diff options
Diffstat (limited to 'tdehtml/tdehtml_part.h')
-rw-r--r-- | tdehtml/tdehtml_part.h | 1683 |
1 files changed, 1683 insertions, 0 deletions
diff --git a/tdehtml/tdehtml_part.h b/tdehtml/tdehtml_part.h new file mode 100644 index 000000000..452083708 --- /dev/null +++ b/tdehtml/tdehtml_part.h @@ -0,0 +1,1683 @@ +// -*- c-basic-offset: 2 -*- +/* This file is part of the KDE project + * + * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> + * 1999-2001 Lars Knoll <knoll@kde.org> + * 1999-2001 Antti Koivisto <koivisto@kde.org> + * 2000-2001 Simon Hausmann <hausmann@kde.org> + * 2000-2001 Dirk Mueller <mueller@kde.org> + * 2000 Stefan Schimanski <1Stein@gmx.de> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ +#ifndef __tdehtml_part_h__ +#define __tdehtml_part_h__ + +#include "dom/html_document.h" +#include "dom/dom2_range.h" + +#include <tdeparts/part.h> +#include <tdeparts/browserextension.h> +#include <kdemacros.h> +#include <kfinddialog.h> + +#include <tqregexp.h> + +class TDEHTMLPartPrivate; +class TDEHTMLPartBrowserExtension; +class KJSProxy; +class TDEHTMLView; +class TDEHTMLSettings; +class KJavaAppletContext; +class KJSErrorDlg; + +namespace DOM +{ + class HTMLDocument; + class HTMLDocumentImpl; + class DocumentImpl; + class HTMLTitleElementImpl; + class HTMLElementImpl; + class HTMLFrameElementImpl; + class HTMLIFrameElementImpl; + class HTMLObjectElementImpl; + class HTMLFormElementImpl; + class HTMLAnchorElementImpl; + class HTMLMetaElementImpl; + class NodeImpl; + class Node; + class HTMLEventListener; + class EventListener; +} + +namespace KJS +{ + class Interpreter; +} + +namespace tdehtml +{ + class DocLoader; + class RenderPart; + class RenderPartObject; + class ChildFrame; + class MouseEvent; + class MousePressEvent; + class MouseDoubleClickEvent; + class MouseMoveEvent; + class MouseReleaseEvent; + class DrawContentsEvent; + class CachedObject; + class RenderWidget; + class CSSStyleSelector; + class HTMLTokenizer; + class Decoder; + class XMLTokenizer; +} + +namespace KJS { + class Window; + class WindowFunc; + class ExternalFunc; + class JSEventListener; + class JSLazyEventListener; + class JSNodeFilter; + class DOMDocument; + class SourceFile; + class ScheduledAction; +} + +namespace KParts +{ + class PartManager; + class LiveConnectExtension; +} + +namespace KWallet +{ + class Wallet; +} + +/** + * This class is tdehtml's main class. It features an almost complete + * web browser, and html renderer. + * + * The easiest way to use this class (if you just want to display an HTML + * page at some URL) is the following: + * + * \code + * KURL url = "http://www.kde.org"; + * TDEHTMLPart *w = new TDEHTMLPart(); + * w->openURL(url); + * w->view()->resize(500, 400); + * w->show(); + * \endcode + * + * Java and JavaScript are enabled by default depending on the user's + * settings. If you do not need them, and especially if you display + * unfiltered data from untrusted sources, it is strongly recommended to + * turn them off. In that case, you should also turn off the automatic + * redirect and plugins: + * + * \code + * w->setJScriptEnabled(false); + * w->setJavaEnabled(false); + * w->setMetaRefreshEnabled(false); + * w->setPluginsEnabled(false); + * \endcode + * + * You may also wish to disable external references. This will prevent TDEHTML + * from loading images, frames, etc, or redirecting to external sites. + * + * \code + * w->setOnlyLocalReferences(true); + * \endcode + * + * Some apps want to write their HTML code directly into the widget instead of + * opening an url. You can do this in the following way: + * + * \code + * TQString myHTMLCode = ...; + * TDEHTMLPart *w = new TDEHTMLPart(); + * w->begin(); + * w->write(myHTMLCode); + * ... + * w->end(); + * \endcode + * + * You can do as many calls to write() as you wish. There are two + * write() methods, one accepting a TQString and one accepting a + * @p char @p * argument. You should use one or the other + * (but not both) since the method using + * the @p char @p * argument does an additional decoding step to convert the + * written data to Unicode. + * + * It is also possible to write content to the HTML part using the + * standard streaming API from KParts::ReadOnlyPart. The usage of + * the API is similar to that of the begin(), write(), end() process + * described above as the following example shows: + * + * \code + * TDEHTMLPart *doc = new TDEHTMLPart(); + * doc->openStream( "text/html", KURL() ); + * doc->writeStream( TQCString( "<html><body><p>TDEHTML Rocks!</p></body></html>" ) ); + * doc->closeStream(); + * \endcode + * + * @short HTML Browser Widget + * @author Lars Knoll (knoll@kde.org) + * + */ +class TDEHTML_EXPORT TDEHTMLPart : public KParts::ReadOnlyPart +{ + Q_OBJECT + friend class TDEHTMLView; + friend class DOM::HTMLTitleElementImpl; + friend class DOM::HTMLFrameElementImpl; + friend class DOM::HTMLIFrameElementImpl; + friend class DOM::HTMLObjectElementImpl; + friend class DOM::HTMLAnchorElementImpl; + friend class DOM::HTMLMetaElementImpl; + friend class DOM::NodeImpl; + friend class TDEHTMLRun; + friend class DOM::HTMLFormElementImpl; + friend class tdehtml::RenderPartObject; + friend class KJS::Window; + friend class KJS::ScheduledAction; + friend class KJS::JSNodeFilter; + friend class KJS::WindowFunc; + friend class KJS::ExternalFunc; + friend class KJS::JSEventListener; + friend class KJS::JSLazyEventListener; + friend class KJS::DOMDocument; + friend class KJS::SourceFile; + friend class KJSProxy; + friend class TDEHTMLPartBrowserExtension; + friend class DOM::DocumentImpl; + friend class DOM::HTMLDocumentImpl; + friend class TDEHTMLPartBrowserHostExtension; + friend class tdehtml::HTMLTokenizer; + friend class tdehtml::XMLTokenizer; + friend class tdehtml::RenderWidget; + friend class tdehtml::CSSStyleSelector; + friend class TDEHTMLPartIface; + friend class TDEHTMLPartFunction; + friend class TDEHTMLPopupGUIClient; + + TQ_PROPERTY( bool javaScriptEnabled READ jScriptEnabled WRITE setJScriptEnabled ) + TQ_PROPERTY( bool javaEnabled READ javaEnabled WRITE setJavaEnabled ) + TQ_PROPERTY( bool autoloadImages READ autoloadImages WRITE setAutoloadImages ) + TQ_PROPERTY( bool dndEnabled READ dndEnabled WRITE setDNDEnabled ) + TQ_PROPERTY( bool pluginsEnabled READ pluginsEnabled WRITE setPluginsEnabled ) + + /* + * + * Don't add setOnlyLocalReferences here. It shouldn't be accessible via DCOP. + * + **/ + TQ_PROPERTY( TQCString dcopObjectId READ dcopObjectId ) + TQ_PROPERTY( bool modified READ isModified ) + +public: + enum GUIProfile { DefaultGUI, BrowserViewGUI /* ... */ }; + + /** + * Constructs a new TDEHTMLPart. + * + * TDEHTML basically consists of two objects: The TDEHTMLPart itself, + * holding the document data (DOM document), and the TDEHTMLView, + * derived from TQScrollView, in which the document content is + * rendered in. You can specify two different parent objects for a + * TDEHTMLPart, one parent for the TDEHTMLPart document and on parent + * for the TDEHTMLView. If the second @p parent argument is 0L, then + * @p parentWidget is used as parent for both objects, the part and + * the view. + */ + TDEHTMLPart( TQWidget *parentWidget = 0, const char *widgetname = 0, + TQObject *parent = 0, const char *name = 0, GUIProfile prof = DefaultGUI ); + + TDEHTMLPart( TDEHTMLView *view, TQObject *parent = 0, const char *name = 0, GUIProfile prof = DefaultGUI ); + + /** + * Destructor. + */ + virtual ~TDEHTMLPart(); + + /** + * Opens the specified URL @p url. + * + * Reimplemented from KParts::ReadOnlyPart::openURL . + */ + virtual bool openURL( const KURL &url ); + + /** + * Stops loading the document and kills all data requests (for images, etc.) + */ + virtual bool closeURL(); + + /** + * Called when a certain error situation (i.e. connection timed out) occurred. + * The default implementation either shows a KIO error dialog or loads a more + * verbose error description a as page, depending on the users configuration. + * @p job is the job that signaled the error situation + */ + virtual void showError( TDEIO::Job* job ); + + /** + * Returns a reference to the DOM HTML document (for non-HTML documents, returns null) + */ + DOM::HTMLDocument htmlDocument() const; + + /** + * Returns a reference to the DOM document. + */ + DOM::Document document() const; + + /** + * Returns the content of the source document. + * @since 3.4 + */ + TQString documentSource() const; + + /** + * Returns the node that has the keyboard focus. + */ + DOM::Node activeNode() const; + + /** + * Returns a pointer to the KParts::BrowserExtension. + */ + KParts::BrowserExtension *browserExtension() const; + KParts::LiveConnectExtension *liveConnectExtension( const tdehtml::RenderPart *) const; + KParts::BrowserHostExtension *browserHostExtension() const; + + /** + * Returns a pointer to the HTML document's view. + */ + TDEHTMLView *view() const; + + /** + * Enable/disable Javascript support. Note that this will + * in either case permanently override the default usersetting. + * If you want to have the default UserSettings, don't call this + * method. + */ + void setJScriptEnabled( bool enable ); + + /** + * Returns @p true if Javascript support is enabled or @p false + * otherwise. + */ + bool jScriptEnabled() const; + + /** + * Returns the JavaScript interpreter the part is using. This method is + * mainly intended for applications which embed and extend the part and + * provides a mechanism for adding additional native objects to the + * interpreter (or removing the built-ins). + * + * One thing people using this method to add things to the interpreter must + * consider, is that when you start writing new content to the part, the + * interpreter is cleared. This includes both use of the + * begin( const KURL &, int, int ) method, and the openURL( const KURL & ) + * method. If you want your objects to have a longer lifespan, then you must + * retain a KJS::Object yourself to ensure that the reference count of your + * custom objects never reaches 0. You will also need to re-add your + * bindings everytime this happens - one way to detect the need for this is + * to connect to the docCreated() signal, another is to reimplement the + * begin() method. + */ + KJS::Interpreter *jScriptInterpreter(); + + /** + * Enable/disable statusbar messages. + * When this class wants to set the statusbar text, it emits + * setStatusBarText(const TQString & text) + * If you want to catch this for your own statusbar, note that it returns + * back a rich text string, starting with "<qt>". This you need to + * either pass this into your own TQLabel or to strip out the tags + * before passing it to TQStatusBar::message(const TQString & message) + * + * @see KParts::Part::setStatusBarText( const TQString & text ) + */ + void setStatusMessagesEnabled( bool enable ); + + /** + * Returns @p true if status messages are enabled. + */ + bool statusMessagesEnabled() const; + + /** + * Enable/disable automatic forwarding by <meta http-equiv="refresh" ....> + */ + void setMetaRefreshEnabled( bool enable ); + + /** + * Returns @p true if automatic forwarding is enabled. + */ + bool metaRefreshEnabled() const; + + /** + * Same as executeScript( const TQString & ) except with the Node parameter + * specifying the 'this' value. + */ + TQVariant executeScript( const DOM::Node &n, const TQString &script ); + + /** + * Enables or disables Drag'n'Drop support. A drag operation is started if + * the users drags a link. + */ + void setDNDEnabled( bool b ); + + /** + * Returns whether Dragn'n'Drop support is enabled or not. + */ + bool dndEnabled() const; + + /** + * Enables/disables Java applet support. Note that calling this function + * will permanently override the User settings about Java applet support. + * Not calling this function is the only way to let the default settings + * apply. + */ + void setJavaEnabled( bool enable ); + + /** + * Return true if Java applet support is enabled, false if disabled + */ + bool javaEnabled() const; + + /** + * Returns the java context of the applets. If no applet exists, 0 is returned. + */ + KJavaAppletContext *javaContext(); + + /** + * Returns the java context of the applets. If no context exists yet, a + * new one is created. + */ + KJavaAppletContext *createJavaContext(); + + /** + * Enables or disables plugins, default is enabled + */ + void setPluginsEnabled( bool enable ); + + /** + * Returns true if plugins are enabled/disabled. + */ + bool pluginsEnabled() const; + + /** + * Specifies whether images contained in the document should be loaded + * automatically or not. + * + * @note Request will be ignored if called before begin(). + */ + void setAutoloadImages( bool enable ); + /** + * Returns whether images contained in the document are loaded automatically + * or not. + * @note that the returned information is unrelieable as long as no begin() + * was called. + */ + bool autoloadImages() const; + + /** + * Security option. + * + * Specify whether only file:/ or data:/ urls are allowed to be loaded without + * user confirmation by TDEHTML. + * ( for example referenced by stylesheets, images, scripts, subdocuments, embedded elements ). + * + * This option is mainly intended for enabling the "mail reader mode", where you load untrusted + * content with a file:/ url. + * + * Please note that enabling this option currently automatically disables Javascript, + * Java and Plugins support. This might change in the future if the security model + * is becoming more sophisticated, so don't rely on this behaviour. + * + * ( default false - everything is loaded unless forbidden by TDEApplication::authorizeURLAction). + */ + void setOnlyLocalReferences( bool enable ); + + /** + * Returns whether only file:/ or data:/ references are allowed + * to be loaded ( default false ). See setOnlyLocalReferences. + **/ + bool onlyLocalReferences() const; + + /** Returns whether caret mode is on/off. + * @since 3.2 + */ + bool isCaretMode() const; + + /** + * Returns @p true if the document is editable, @p false otherwise. + * @since 3.2 + */ + bool isEditable() const; + + /** + * Sets the caret to the given position. + * + * If the given location is invalid, it will snap to the nearest valid + * location. Immediately afterwards a @p caretPositionChanged signal + * containing the effective position is emitted + * @param node node to set to + * @param offset zero-based offset within the node + * @param extendSelection If @p true, a selection will be spanned from the + * last caret position to the given one. Otherwise, any existing selection + * will be deselected. + * @since 3.2 + */ + void setCaretPosition(DOM::Node node, long offset, bool extendSelection = false); + + /** + * Enumeration for displaying the caret. + * @param Visible caret is displayed + * @param Invisible caret is not displayed + * @param Blink caret toggles between visible and invisible + * @since 3.2 + */ + enum CaretDisplayPolicy { + CaretVisible, CaretInvisible, CaretBlink + }; + + /** + * Returns the current caret policy when the view is not focused. + * @since 3.2 + */ + CaretDisplayPolicy caretDisplayPolicyNonFocused() const; + + /** + * Sets the caret display policy when the view is not focused. + * + * Whenever the caret is in use, this property determines how the + * caret should be displayed when the document view is not focused. + * + * The default policy is CaretInvisible. + * @param policy new display policy + * @since 3.2 + */ + void setCaretDisplayPolicyNonFocused(CaretDisplayPolicy policy); + +#ifndef KDE_NO_COMPAT + void enableJScript( bool e ) { setJScriptEnabled(e); } + void enableJava( bool e ) { setJavaEnabled(e); } + void enablePlugins( bool e ) { setPluginsEnabled(e); } + void autoloadImages( bool e ) { setAutoloadImages(e); } + void enableMetaRefresh( bool e ) { setMetaRefreshEnabled(e); } + bool setCharset( const TQString &, bool ) { return true; } + + KURL baseURL() const; + TQString baseTarget() const; +#endif + + /** + * Returns the URL for the background Image (used by save background) + */ + KURL backgroundURL() const; + + /** + * Schedules a redirection after @p delay seconds. + */ + void scheduleRedirection( int delay, const TQString &url, bool lockHistory = true ); + + /** + * Clears the widget and prepares it for new content. + * + * If you want url() to return + * for example "file:/tmp/test.html", you can use the following code: + * \code + * view->begin( KURL("file:/tmp/test.html" ) ); + * \endcode + * + * @param url is the url of the document to be displayed. Even if you + * are generating the HTML on the fly, it may be useful to specify + * a directory so that any pixmaps are found. + * + * @param xOffset is the initial horizontal scrollbar value. Usually + * you don't want to use this. + * + * @param yOffset is the initial vertical scrollbar value. Usually + * you don't want to use this. + * + * All child frames and the old document are removed if you call + * this method. + */ + virtual void begin( const KURL &url = KURL(), int xOffset = 0, int yOffset = 0 ); + + /** + * Writes another part of the HTML code to the widget. + * + * You may call + * this function many times in sequence. But remember: The fewer calls + * you make, the faster the widget will be. + * + * The HTML code is send through a decoder which decodes the stream to + * Unicode. + * + * The @p len parameter is needed for streams encoded in utf-16, + * since these can have \\0 chars in them. In case the encoding + * you're using isn't utf-16, you can safely leave out the length + * parameter. + * + * Attention: Don't mix calls to write( const char *) with calls + * to write( const TQString & ). + * + * The result might not be what you want. + */ + virtual void write( const char *str, int len = -1 ); + + /** + * Writes another part of the HTML code to the widget. + * + * You may call + * this function many times in sequence. But remember: The fewer calls + * you make, the faster the widget will be. + */ + virtual void write( const TQString &str ); + + /** + * Call this after your last call to write(). + */ + virtual void end(); + + /* + * Prints the current HTML page laid out for the printer. + * + * (not implemented at the moment) + */ + // void print(TQPainter *, int pageHeight, int pageWidth); + + /** + * Paints the HTML page to a TQPainter. See TDEHTMLView::paint for details + */ + void paint( TQPainter *, const TQRect &, int = 0, bool * = 0 ); + + /** + * Sets the encoding the page uses. + * + * This can be different from the charset. The widget will try to reload the current page in the new + * encoding, if url() is not empty. + */ + bool setEncoding( const TQString &name, bool override = false ); + + /** + * Returns the encoding the page currently uses. + * + * Note that the encoding might be different from the charset. + */ + TQString encoding() const; + + /** + * Sets a user defined style sheet to be used on top of the HTML 4 + * default style sheet. + * + * This gives a wide range of possibilities to + * change the layout of the page. + * + * To have an effect this function has to be called after calling begin(). + */ + void setUserStyleSheet( const KURL &url ); + + /** + * Sets a user defined style sheet to be used on top of the HTML 4 + * default style sheet. + * + * This gives a wide range of possibilities to + * change the layout of the page. + * + * To have an effect this function has to be called after calling begin(). + */ + void setUserStyleSheet( const TQString &styleSheet ); + +public: + + /** + * Sets the standard font style. + * + * @param name The font name to use for standard text. + */ + void setStandardFont( const TQString &name ); + + /** + * Sets the fixed font style. + * + * @param name The font name to use for fixed text, e.g. + * the <tt><pre></tt> tag. + */ + void setFixedFont( const TQString &name ); + + /** + * Finds the anchor named @p name. + * + * If the anchor is found, the widget + * scrolls to the closest position. Returns @p if the anchor has + * been found. + */ + bool gotoAnchor( const TQString &name ); + + /** + * Go to the next anchor + * + * This is useful to navigate from outside the navigator + * @since 3.2 + */ + bool nextAnchor(); + + /** + * Go to previous anchor + * @since 3.2 + */ + bool prevAnchor(); + + /** + * Sets the cursor to use when the cursor is on a link. + */ + void setURLCursor( const TQCursor &c ); + + /** + * Returns the cursor which is used when the cursor is on a link. + */ + TQCursor urlCursor() const; + + /** + * Extra Find options that can be used when calling the extended findText(). + * @since 3.3 + */ + enum FindOptions + { + FindLinksOnly = 1 * KFindDialog::MinimumUserOption, + FindNoPopups = 2 * KFindDialog::MinimumUserOption + //FindIncremental = 4 * KFindDialog::MinimumUserOption + }; + + /** + * Starts a new search by popping up a dialog asking the user what he wants to + * search for. + * @since 3.3 + */ + void findText(); + + /** + * Starts a new search, but bypasses the user dialog. + * @param str The string to search for. + * @param options Find options. + * @param parent Parent used for centering popups like "string not found". + * @param findDialog Optionally, you can supply your own dialog. + * @since 3.3 + */ + void findText( const TQString &str, long options, TQWidget *parent = 0, + KFindDialog *findDialog = 0 ); + + /** + * Initiates a text search. + */ + void findTextBegin(); + + /** + * Finds the next occurrence of the string or expression. + * If isRegExp is true then str is converted to a TQRegExp, and caseSensitive is ignored. + * @deprecated, use findText( str, options, parent, findDialog ) + */ + bool findTextNext( const TQString &str, bool forward, bool caseSensitive, bool isRegExp ); + + /** + * Finds the next occurence of a string set by @ref findText() + * @return true if a new match was found. + * @since 3.3 + */ + bool findTextNext(); + + /** + * Finds the next occurence of a string set by @ref findText() + * @param reverse if true, revert seach direction (only if no find dialog is used) + * @return true if a new match was found. + * @since 3.5 + */ + // KDE4 merge with default = false + bool findTextNext( bool reverse ); + + /** + * Sets the Zoom factor. The value is given in percent, larger values mean a + * generally larger font and larger page contents. It is not guaranteed that + * all parts of the page are scaled with the same factor though. + * + * The given value should be in the range of 20..300, values outside that + * range are not guaranteed to work. A value of 100 will disable all zooming + * and show the page with the sizes determined via the given lengths in the + * stylesheets. + */ + void setZoomFactor(int percent); + + /** + * Returns the current zoom factor. + */ + int zoomFactor() const; + + /** + * Returns the text the user has marked. + */ + virtual TQString selectedText() const; + + /** + * Return the text the user has marked. This is guaranteed to be valid xml, + * and to contain the \<html> and \<body> tags. + * + * FIXME probably should make virtual for 4.0 ? + * + * @since 3.4 + */ + TQString selectedTextAsHTML() const; + + /** + * Returns the selected part of the HTML. + */ + DOM::Range selection() const; + + /** + * Returns the selected part of the HTML by returning the starting and end + * position. + * + * If there is no selection, both nodes and offsets are equal. + * @param startNode returns node selection starts in + * @param startOffset returns offset within starting node + * @param endNode returns node selection ends in + * @param endOffset returns offset within end node. + * @since 3.2 + */ + void selection(DOM::Node &startNode, long &startOffset, + DOM::Node &endNode, long &endOffset) const; + + /** + * Sets the current selection. + */ + void setSelection( const DOM::Range & ); + + /** + * Has the user selected anything? + * + * Call selectedText() to + * retrieve the selected text. + * + * @return @p true if there is text selected. + */ + bool hasSelection() const; + + /** + * Marks all text in the document as selected. + */ + void selectAll(); + + /** + * Convenience method to show the document's view. + * + * Equivalent to widget()->show() or view()->show() . + */ + void show(); + + /** + * Convenience method to hide the document's view. + * + * Equivalent to widget()->hide() or view()->hide(). + */ + void hide(); + + /** + * Returns a reference to the partmanager instance which + * manages html frame objects. + */ + KParts::PartManager *partManager(); + + /** + * Saves the TDEHTMLPart's complete state (including child frame + * objects) to the provided TQDataStream. + * + * This is called from the saveState() method of the + * browserExtension(). + */ + virtual void saveState( TQDataStream &stream ); + /** + * Restores the TDEHTMLPart's previously saved state (including + * child frame objects) from the provided TQDataStream. + * + * @see saveState() + * + * This is called from the restoreState() method of the + * browserExtension() . + **/ + virtual void restoreState( TQDataStream &stream ); + + /** + * Returns the @p Node currently under the mouse. + * + * The returned node may be a shared node (e. g. an \<area> node if the + * mouse is hovering over an image map). + */ + DOM::Node nodeUnderMouse() const; + + /** + * Returns the @p Node currently under the mouse that is not shared. + * + * The returned node is always the node that is physically under the mouse + * pointer (irrespective of logically overlying elements like, e. g., + * \<area> on image maps). + * @since 3.3 + */ + DOM::Node nonSharedNodeUnderMouse() const; + + /** + * @internal + */ + const TDEHTMLSettings *settings() const; + + /** + * Returns a pointer to the parent TDEHTMLPart if the part is a frame + * in an HTML frameset. + * + * Returns 0L otherwise. + */ + TDEHTMLPart *parentPart(); + + /** + * Returns a list of names of all frame (including iframe) objects of + * the current document. Note that this method is not working recursively + * for sub-frames. + */ + TQStringList frameNames() const; + + TQPtrList<KParts::ReadOnlyPart> frames() const; + + /** + * Finds a frame by name. Returns 0L if frame can't be found. + */ + TDEHTMLPart *findFrame( const TQString &f ); + + /** + * Recursively finds the part containing the frame with name @p f + * and checks if it is accessible by @p callingPart + * Returns 0L if no suitable frame can't be found. + * Returns parent part if a suitable frame was found and + * frame info in @p *childFrame + * @since 3.3 + */ + TDEHTMLPart *findFrameParent( KParts::ReadOnlyPart *callingPart, const TQString &f, tdehtml::ChildFrame **childFrame=0 ); + + /** + * Return the current frame (the one that has focus) + * Not necessarily a direct child of ours, framesets can be nested. + * Returns "this" if this part isn't a frameset. + */ + KParts::ReadOnlyPart *currentFrame() const; + + /** + * Returns whether a frame with the specified name is exists or not. + * In contrary to the findFrame method this one also returns true + * if the frame is defined but no displaying component has been + * found/loaded, yet. + */ + bool frameExists( const TQString &frameName ); + + /** + * Returns child frame framePart its script interpreter + */ + KJSProxy *framejScript(KParts::ReadOnlyPart *framePart); + + /** + * Finds a frame by name. Returns 0L if frame can't be found. + */ + KParts::ReadOnlyPart *findFramePart( const TQString &f ); + /** + * Called by KJS. + * Sets the StatusBarText assigned + * via window.status + */ + void setJSStatusBarText( const TQString &text ); + + /** + * Called by KJS. + * Sets the DefaultStatusBarText assigned + * via window.defaultStatus + */ + void setJSDefaultStatusBarText( const TQString &text ); + + /** + * Called by KJS. + * Returns the StatusBarText assigned + * via window.status + */ + TQString jsStatusBarText() const; + + /** + * Called by KJS. + * Returns the DefaultStatusBarText assigned + * via window.defaultStatus + */ + TQString jsDefaultStatusBarText() const; + + /** + * Referrer used for links in this page. + */ + TQString referrer() const; + + /** + * Referrer used to obtain this page. + */ + TQString pageReferrer() const; + + /** + * Last-modified date (in raw string format), if received in the [HTTP] headers. + */ + TQString lastModified() const; + + /** + * Loads a style sheet into the stylesheet cache. + */ + void preloadStyleSheet( const TQString &url, const TQString &stylesheet ); + + /** + * Loads a script into the script cache. + */ + void preloadScript( const TQString &url, const TQString &script ); + + /** + * @internal + */ + bool restored() const; + + // ### KDE4 remove me + enum FormNotification { NoNotification = 0, Before, Only, Unused=255 }; + /** + * Determine if signal should be emitted before, instead or never when a + * submitForm() happens. + * @since 3.2 + * ### KDE4 remove me + */ + void setFormNotification(FormNotification fn); + + /** + * Determine if signal should be emitted before, instead or never when a + * submitForm() happens. + * ### KDE4 remove me + * @since 3.2 + */ + FormNotification formNotification() const; + + /** + * Returns the toplevel (origin) URL of this document, even if this + * part is a frame or an iframe. + * + * @return the actual original url. + * @since 3.2 + */ + KURL toplevelURL(); + + /** + * Checks whether the page contains unsubmitted form changes. + * + * @return true if form changes exist + * @since 3.3 + */ + bool isModified() const; + + /** + * Shows or hides the suppressed popup indicator + * @deprecated + * @since 3.4 + */ + void setSuppressedPopupIndicator( bool enable ); + + /** + * Shows or hides the suppressed popup indicator + * @since 3.5 + */ + void setSuppressedPopupIndicator( bool enable, TDEHTMLPart *originPart ); + + /** + * @internal + * @since 3.5 + */ + bool inProgress() const; + +signals: + /** + * Emitted if the cursor is moved over an URL. + */ + void onURL( const TQString &url ); + + /** + * Emitted when the user clicks the right mouse button on the document. + */ + void popupMenu( const TQString &url, const TQPoint &point ); + + /** + * This signal is emitted when the selection changes. + */ + void selectionChanged(); + + /** + * This signal is emitted when an element retrieves the + * keyboard focus. Note that the signal argument can be + * a null node if no element is active, meaning a node + * has explicitly been deactivated without a new one + * becoming active. + */ + void nodeActivated( const DOM::Node & ); + + /** + * @internal */ + void docCreated(); + + /** + * This signal is emitted whenever the caret position has been changed. + * + * The signal transmits the position the DOM::Range way, the node and + * the zero-based offset within this node. + * @param node node which the caret is in. This can be null if the caret + * has been deactivated. + * @param offset offset within the node. If the node is null, the offset + * is meaningless. + * @since 3.2 + */ + void caretPositionChanged(const DOM::Node &node, long offset); + + + /** + * If form notification is on, this will be emitted either for a form + * submit or before the form submit according to the setting. + * @since 3.2 + * ### KDE4 remove me + */ + void formSubmitNotification(const char *action, const TQString& url, + const TQByteArray& formData, const TQString& target, + const TQString& contentType, const TQString& boundary); + + +protected: + + /** + * returns a KURL object for the given url. Use when + * you know what you're doing. + */ + KURL completeURL( const TQString &url ); + + /** + * presents a detailed error message to the user. + * @p errorCode kio error code, eg TDEIO::ERR_SERVER_TIMEOUT. + * @p text kio additional information text. + * @p url the url that triggered the error. + */ + void htmlError( int errorCode, const TQString& text, const KURL& reqUrl ); + + virtual void customEvent( TQCustomEvent *event ); + + /** + * Eventhandler of the tdehtml::MousePressEvent. + */ + virtual void tdehtmlMousePressEvent( tdehtml::MousePressEvent *event ); + /** + * Eventhandler for the tdehtml::MouseDoubleClickEvent. + */ + virtual void tdehtmlMouseDoubleClickEvent( tdehtml::MouseDoubleClickEvent * ); + /** + * Eventhandler for the tdehtml::MouseMouseMoveEvent. + */ + virtual void tdehtmlMouseMoveEvent( tdehtml::MouseMoveEvent *event ); + /** + * Eventhandler for the tdehtml::MouseMouseReleaseEvent. + */ + virtual void tdehtmlMouseReleaseEvent( tdehtml::MouseReleaseEvent *event ); + /** + * Eventhandler for the tdehtml::DrawContentsEvent. + */ + virtual void tdehtmlDrawContentsEvent( tdehtml::DrawContentsEvent * ); + + /** + * Internal reimplementation of KParts::Part::guiActivateEvent . + */ + virtual void guiActivateEvent( KParts::GUIActivateEvent *event ); + + /** + * Internal empty reimplementation of KParts::ReadOnlyPart::openFile . + */ + virtual bool openFile(); + + virtual void urlSelected( const TQString &url, int button, int state, + const TQString &_target, KParts::URLArgs args = KParts::URLArgs()); + + /** + * This method is called when a new embedded object (include html frames) is to be created. + * Reimplement it if you want to add support for certain embeddable objects without registering + * them in the KDE wide registry system (KSyCoCa) . Another reason for re-implementing this + * method could be if you want to derive from KTHMLPart and also want all html frame objects + * to be a object of your derived type, in which case you should return a new instance for + * the mimetype 'text/html' . + */ + virtual KParts::ReadOnlyPart *createPart( TQWidget *parentWidget, const char *widgetName, + TQObject *parent, const char *name, + const TQString &mimetype, TQString &serviceName, + TQStringList &serviceTypes, const TQStringList ¶ms); + + // This is for RenderPartObject. We want to ask the 'download plugin?' + // question only once per mimetype + bool pluginPageQuestionAsked( const TQString& mimetype ) const; + void setPluginPageQuestionAsked( const TQString& mimetype ); + + enum PageSecurity { NotCrypted, Encrypted, Mixed }; + void setPageSecurity( PageSecurity sec ); + + /** + * Implements the streaming API of KParts::ReadOnlyPart. + */ + virtual bool doOpenStream( const TQString& mimeType ); + + /** + * Implements the streaming API of KParts::ReadOnlyPart. + */ + virtual bool doWriteStream( const TQByteArray& data ); + + /** + * Implements the streaming API of KParts::ReadOnlyPart. + */ + virtual bool doCloseStream(); + +public slots: + + /** + * Sets the focused node of the document to the specified node. If the node is a form control, the control will + * receive focus in the same way that it would if the user had clicked on it or tabbed to it with the keyboard. For + * most other types of elements, there is no visual indication of whether or not they are focused. + * + * See activeNode + * + * @param node The node to focus + */ + void setActiveNode( const DOM::Node &node ); + + /** + * Stops all animated images on the current and child pages + */ + void stopAnimations(); + + TQCString dcopObjectId() const; + + /** + * Execute the specified snippet of JavaScript code. + * + * Returns @p true if JavaScript was enabled, no error occurred + * and the code returned true itself or @p false otherwise. + * @deprecated, use executeString( DOM::Node(), script) + */ + TQVariant executeScript( const TQString &script ); + + /** + * Enables/disables caret mode. + * + * Enabling caret mode displays a caret which can be used to navigate + * the document using the keyboard only. Caret mode is switched off by + * default. + * + * @param enable @p true to enable, @p false to disable caret mode. + * @since 3.2 + */ + void setCaretMode(bool enable); + + /** + * Makes the document editable. + * + * Setting this property to @p true makes the document, and its + * subdocuments (such as frames, iframes, objects) editable as a whole. + * FIXME: insert more information about navigation, features etc. as seen fit + * + * @param enable @p true to set document editable, @p false to set it + * read-only. + * @since 3.2 (pending, do not use) + */ + void setEditable(bool enable); + + /** + * Sets the visibility of the caret. + * + * This methods displays or hides the caret regardless of the current + * caret display policy (see setCaretDisplayNonFocused), and regardless + * of focus. + * + * The caret will be shown/hidden only under at least one of + * the following conditions: + * @li the document is editable + * @li the document is in caret mode + * @li the document's currently focused element is editable + * + * @param show @p true to make visible, @p false to hide. + * @since 3.2 + */ + void setCaretVisible(bool show); + + // ### KDE4 FIXME: + // Remove this and make the one below protected+virtual slot. + // Warning: this is effectively "internal". Be careful. + // @since 3.2 + void submitFormProxy( const char *action, const TQString &url, + const TQByteArray &formData, + const TQString &target, + const TQString& contentType = TQString::null, + const TQString& boundary = TQString::null ); + +private slots: + + /** + * @internal + */ + void reparseConfiguration(); + + /** + * @internal + */ + void slotData( TDEIO::Job*, const TQByteArray &data ); + /** + * @internal + */ + void slotInfoMessage( TDEIO::Job*, const TQString& msg ); + /** + * @internal + */ + void slotRestoreData( const TQByteArray &data ); + /** + * @internal + */ + void slotFinished( TDEIO::Job* ); + /** + * @internal + */ + void slotFinishedParsing(); + /** + * @internal + */ + void slotRedirect(); + /** + * @internal + */ + void slotRedirection( TDEIO::Job*, const KURL& ); + /** + * @internal + */ + void slotDebugScript(); + /** + * @internal + */ + void slotDebugDOMTree(); + /** + * @internal + */ + void slotDebugRenderTree(); + /** + * @internal + */ + void slotStopAnimations(); + /** + * @internal + */ + virtual void slotViewDocumentSource(); + /** + * @internal + */ + virtual void slotViewFrameSource(); + /** + * @internal + */ + void slotViewPageInfo(); + /** + * @internal + */ + virtual void slotSaveBackground(); + /** + * @internal + */ + virtual void slotSaveDocument(); + /** + * @internal + */ + virtual void slotSaveFrame(); + /** + * @internal + */ + virtual void slotSecurity(); + /** + * @internal + */ + virtual void slotSetEncoding(); + + /** + * @internal + */ + virtual void slotUseStylesheet(); + + virtual void slotFind(); + virtual void slotFindDone(); // ### remove me + virtual void slotFindDialogDestroyed(); + void slotFindNext(); + void slotFindPrev(); + void slotFindAheadText(); + void slotFindAheadLink(); + + void slotIncZoom(); + void slotDecZoom(); + void slotIncZoomFast(); + void slotDecZoomFast(); + + void slotLoadImages(); + void slotWalletClosed(); + void launchWalletManager(); + void walletMenu(); + + /** + * @internal + */ + void submitFormAgain(); + + /** + * @internal + */ + void updateActions(); + /** + * @internal + */ + void slotPartRemoved( KParts::Part *part ); + /** + * @internal + */ + void slotActiveFrameChanged( KParts::Part *part ); + /** + * @internal + */ + void slotChildStarted( TDEIO::Job *job ); + /** + * @internal + */ + void slotChildCompleted(); + /** + * @internal + */ + void slotChildCompleted( bool ); + /** + * @internal + */ + void slotParentCompleted(); + /** + * @internal + */ + void slotChildURLRequest( const KURL &url, const KParts::URLArgs &args ); + /** + * @internal + */ + void slotChildDocCreated(); + /** + * @internal + */ + void slotRequestFocus( KParts::ReadOnlyPart * ); + void slotLoaderRequestStarted( tdehtml::DocLoader*, tdehtml::CachedObject* obj); + void slotLoaderRequestDone( tdehtml::DocLoader*, tdehtml::CachedObject *obj ); + void checkCompleted(); + + /** + * @internal + */ + void slotAutoScroll(); + + void slotPrintFrame(); + + void slotSelectAll(); + + /** + * @internal + */ + void slotProgressUpdate(); + + /* + * @internal + */ + void slotJobPercent( TDEIO::Job*, unsigned long ); + + /* + * @internal + */ + void slotJobDone( TDEIO::Job* ); + + /* + * @internal + */ + void slotUserSheetStatDone( TDEIO::Job* ); + + /* + * @internal + */ + void slotJobSpeed( TDEIO::Job*, unsigned long ); + + /** + * @internal + */ + void slotClearSelection(); + + /** + * @internal + */ + void slotZoomView( int ); + + /** + * @internal + */ + void slotHighlight( const TQString &, int index, int length ); + + /** + * @internal + */ + void slotAutomaticDetectionLanguage( int _id ); + + /** + * @internal + */ + void slotToggleCaretMode(); + + /** + * @internal + */ + void suppressedPopupMenu(); + + /** + * @internal + */ + void togglePopupPassivePopup(); + + /** + * @internal + */ + void showSuppressedPopups(); + + /** + * @internal + */ + void launchJSConfigDialog(); + + /** + * @internal + */ + void launchJSErrorDialog(); + + /** + * @internal + */ + void removeJSErrorExtension(); + + /** + * @internal + */ + void disableJSErrorExtension(); + + /** + * @internal + */ + void jsErrorDialogContextMenu(); + + /** + * @internal + * used to restore or reset the view's scroll position (including positioning on anchors) + * once a sufficient portion of the document as been laid out. + */ + void restoreScrollPosition(); + + void walletOpened(KWallet::Wallet*); + +private: + + KJSErrorDlg *jsErrorExtension(); + + enum StatusBarPriority { BarDefaultText, BarHoverText, BarOverrideText }; + void setStatusBarText( const TQString& text, StatusBarPriority p); + + bool restoreURL( const KURL &url ); + void resetFromScript(); + void emitSelectionChanged(); + // Returns whether callingHtmlPart may access this part + bool checkFrameAccess(TDEHTMLPart *callingHtmlPart); + bool openURLInFrame( const KURL &url, const KParts::URLArgs &urlArgs ); + bool urlSelectedIntern( const TQString &url, int button, int state, + const TQString &_target, KParts::URLArgs args = KParts::URLArgs()); + void startAutoScroll(); + void stopAutoScroll(); + void overURL( const TQString &url, const TQString &target, bool shiftPressed = false ); + void resetHoverText(); // Undo overURL and reset HoverText + + bool processObjectRequest( tdehtml::ChildFrame *child, const KURL &url, const TQString &mimetype ); + + KWallet::Wallet* wallet(); + + void openWallet(DOM::HTMLFormElementImpl*); + void saveToWallet(const TQString& key, const TQMap<TQString,TQString>& data); + void dequeueWallet(DOM::HTMLFormElementImpl*); + + void enableFindAheadActions(bool); + + /** + * @internal + */ + // ### KDE4 FIXME: + // It is desirable to be able to filter form submissions as well. + // For instance, forms can have a target and an inheriting class + // might want to filter based on the target. Make this protected + // and virtual, or provide a better solution. + // See the web_module for the sidebar for an example where this is + // necessary. + void submitForm( const char *action, const TQString &url, const TQByteArray &formData, + const TQString &target, const TQString& contentType = TQString::null, + const TQString& boundary = TQString::null ); + + void popupMenu( const TQString &url ); + + void init( TDEHTMLView *view, GUIProfile prof ); + + + void clear(); + + bool scheduleScript( const DOM::Node &n, const TQString& script); + + TQVariant crossFrameExecuteScript(const TQString& target, const TQString& script); + TQVariant executeScheduledScript(); + + bool requestFrame( tdehtml::RenderPart *frame, const TQString &url, const TQString &frameName, + const TQStringList &args = TQStringList(), bool isIFrame = false ); + + /** + * @internal returns a name for a frame without a name. + * This function returns a sequence of names. + * All names in a sequence are different but the sequence is + * always the same. + * The sequence is reset in clear(). + */ + TQString requestFrameName(); + + bool requestObject( tdehtml::RenderPart *frame, const TQString &url, const TQString &serviceType, + const TQStringList &args = TQStringList() ); + + bool requestObject( tdehtml::ChildFrame *child, const KURL &url, const KParts::URLArgs &args = KParts::URLArgs() ); + + DOM::EventListener *createHTMLEventListener( TQString code, TQString name, DOM::NodeImpl *node ); + + DOM::HTMLDocumentImpl *docImpl() const; + DOM::DocumentImpl *xmlDocImpl() const; + tdehtml::ChildFrame *frame( const TQObject *obj ); + + tdehtml::ChildFrame *recursiveFrameRequest( TDEHTMLPart *callingHtmlPart, const KURL &url, const KParts::URLArgs &args, bool callParent = true ); + + bool checkLinkSecurity( const KURL &linkURL,const TQString &message = TQString::null, const TQString &button = TQString::null ); + TQVariant executeScript( const TQString& filename, int baseLine, const DOM::Node &n, const TQString& script ); + + KJSProxy *jScript(); + + TDEHTMLPart *opener(); + long cacheId() const; + void setOpener( TDEHTMLPart *_opener ); + bool openedByJS(); + void setOpenedByJS( bool _openedByJS ); + + void checkEmitLoadEvent(); + void emitLoadEvent(); + + bool initFindNode( bool selection, bool reverse, bool fromCursor ); + + void extendSelection( DOM::NodeImpl* node, long offset, DOM::Node& selectionNode, long& selectionOffset, bool right, bool paragraph ); + /** extends the current selection to the given content-coordinates @p x, @p y + * @param x content x-coordinate + * @param y content y-coordinate + * @param absX absolute x-coordinate of @p innerNode + * @param absY absolute y-coordinate of @p innerNode + * @param innerNode node from which to start extending the selection. The + * caller has to ensure that the node has a renderer. + * @internal + */ + void extendSelectionTo(int x, int y, int absX, int absY, const DOM::Node &innerNode); + /** checks whether a selection is extended. + * @return @p true if a selection is extended by the mouse. + */ + bool isExtendingSelection() const; + tdehtml::Decoder *createDecoder(); + TQString defaultEncoding() const; + + /** .html, .xhtml or .xml */ + TQString defaultExtension() const; + + /** @internal + * generic zoom in + */ + void zoomIn(const int stepping[], int count); + /** @internal + * generic zoom out + */ + void zoomOut(const int stepping[], int count); + + void emitCaretPositionChanged(const DOM::Node &node, long offset); + + void setDebugScript( bool enable ); + + void runAdFilter(); + + TDEHTMLPartPrivate *d; + friend class TDEHTMLPartPrivate; +}; + + +#endif |