📄 khtml_part.h
字号:
// -*- 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>
* Copyright (C) 2004 Apple Computer, Inc.
*
* 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., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __khtml_part_h__
#define __khtml_part_h__
#include "editing/text_granularity.h"
#include "editing/edit_actions.h"
#include <kparts/part.h>
#include <kparts/browserextension.h>
class KHTMLPartPrivate;
class KHTMLPartBrowserExtension;
class KJSProxy;
class KHTMLView;
class KHTMLSettings;
class KJavaAppletContext;
class KHTMLPartOOMStopper;
namespace DOM
{
class CSSComputedStyleDeclarationImpl;
class CSSMutableStyleDeclarationImpl;
class CSSStyleDeclarationImpl;
class DOMString;
class Document;
class DocumentImpl;
class ElementImpl;
class EventListener;
class HTMLAnchorElementImpl;
class HTMLDocument;
class HTMLDocumentImpl;
class HTMLElementImpl;
class HTMLEventListener;
class HTMLFormElementImpl;
class HTMLFrameElementImpl;
class HTMLIFrameElementImpl;
class HTMLMetaElementImpl;
class HTMLObjectElementImpl;
class HTMLTitleElementImpl;
class Node;
class NodeImpl;
class Range;
}
namespace khtml
{
class CachedObject;
struct ChildFrame;
class CSSStyleSelector;
class DocLoader;
class DrawContentsEvent;
class EditCommandPtr;
class FormData;
class HTMLTokenizer;
class MouseDoubleClickEvent;
class MouseEvent;
class MouseMoveEvent;
class MousePressEvent;
class MouseReleaseEvent;
class RenderPart;
class RenderPartObject;
class RenderWidget;
class Selection;
class XMLTokenizer;
}
namespace KJS {
class DOMDocument;
class Selection;
class SelectionFunc;
class Window;
class WindowFunc;
}
namespace KParts
{
class PartManager;
};
/**
* This class is khtml'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:
*
* <pre>
* KURL url = "http://www.kde.org";
* KHTMLPart *w = new KHTMLPart();
* w->openURL(url);
* w->view()->resize(500, 400);
* w->show();
* </pre>
*
* By default Java and JavaScript support are disabled. You can enable them by
* using the @ref setJavaEnabled() and @ref setJScriptEnabled() methods.
*
* Some apps want to write their HTML code directly into the widget instead of
* it opening an url. You can also do that in the following way:
*
* <pre>
* QString myHTMLCode = ...;
* KHTMLPart *w = new KHTMLPart();
* w->begin();
* w->write(myHTMLCode);
* ...
* w->end();
* </pre>
*
* You can do as many calls to write as you want. But there are two
* @ref write() methods, one accepting a @ref QString 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.
*
* @short HTML Browser Widget
* @author Lars Knoll (knoll@kde.org)
* */
class KHTMLPart : public KParts::ReadOnlyPart
{
Q_OBJECT
friend class KHTMLView;
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 KHTMLRun;
friend class DOM::HTMLFormElementImpl;
friend class khtml::RenderPartObject;
friend class KJS::Selection;
friend class KJS::SelectionFunc;
friend class KJS::Window;
friend class KJS::WindowFunc;
friend class KJS::DOMDocument;
friend class KJSProxy;
friend class KHTMLPartBrowserExtension;
friend class DOM::DocumentImpl;
friend class DOM::HTMLDocumentImpl;
friend class KHTMLPartBrowserHostExtension;
friend class khtml::HTMLTokenizer;
friend class khtml::XMLTokenizer;
friend class khtml::RenderWidget;
friend class khtml::CSSStyleSelector;
friend class KHTMLPartIface;
Q_PROPERTY( bool javaScriptEnabled READ jScriptEnabled WRITE setJScriptEnabled )
Q_PROPERTY( bool javaEnabled READ javaEnabled WRITE setJavaEnabled )
Q_PROPERTY( bool autoloadImages READ autoloadImages WRITE setAutoloadImages )
Q_PROPERTY( bool dndEnabled READ dndEnabled WRITE setDNDEnabled )
Q_PROPERTY( bool pluginsEnabled READ pluginsEnabled WRITE setPluginsEnabled )
Q_PROPERTY( bool onlyLocalReferences READ onlyLocalReferences WRITE setOnlyLocalReferences )
Q_PROPERTY( QCString dcopObjectId READ dcopObjectId )
public:
enum GUIProfile { DefaultGUI, BrowserViewGUI /* ... */ };
enum { NoXPosForVerticalArrowNavigation = INT_MIN };
/**
* Constructs a new KHTMLPart.
*
* KHTML basically consists of two objects: The KHTMLPart itself,
* holding the document data (DOM document), and the @ref KHTMLView,
* derived from @ref QScrollView, in which the document content is
* rendered in. You can specify two different parent objects for a
* KHTMLPart, one parent for the KHTMLPart document and on parent
* for the @ref KHTMLView. If the second @p parent argument is 0L, then
* @p parentWidget is used as parent for both objects, the part and
* the view.
*/
KHTMLPart( QWidget *parentWidget = 0, const char *widgetname = 0,
QObject *parent = 0, const char *name = 0, GUIProfile prof = DefaultGUI );
KHTMLPart( KHTMLView *view, QObject *parent = 0, const char *name = 0, GUIProfile prof = DefaultGUI );
/**
* Destructor.
*/
virtual ~KHTMLPart();
/**
* Opens the specified URL @p url.
*
* Reimplemented from @ref KParts::ReadOnlyPart::openURL .
*/
virtual bool openURL( const KURL &url );
void didExplicitOpen();
/**
* Stops loading the document and kill all data requests (for images, etc.)
*/
virtual bool closeURL();
#if !APPLE_CHANGES
/**
* is called when a certain error situation (i.e. connection timed out) occured.
* 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(KIO::Job* job);
#endif
/**
* 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 node that has the keyboard focus.
*/
DOM::Node activeNode() const;
/**
* Returns a pointer to the @ref KParts::BrowserExtension.
*/
KParts::BrowserExtension *browserExtension() const;
/**
* Returns a pointer to the HTML document's view.
*/
KHTMLView *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;
/**
* Enable/disable the automatic forwarding by <meta http-equiv="refresh" ....>
*/
void setMetaRefreshEnabled( bool enable );
/**
* Returns @p true if automtaic forwarding is enabled.
*/
bool metaRefreshEnabled() const;
/**
* Execute the specified snippet of JavaScript code.
*
* Returns @p true if JavaScript was enabled, no error occured
* and the code returned true itself or @p false otherwise.
* @deprecated, use the one below.
*/
QVariant executeScript( const QString &script, bool forceUserGesture = false );
/**
* Same as above except the Node parameter specifying the 'this' value.
*/
QVariant executeScript( const DOM::Node &n, const QString &script, bool forceUserGesture = false );
/**
* 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;
/**
* Implementation of CSS property -khtml-user-drag == auto
*/
virtual bool shouldDragAutoNode(DOM::NodeImpl*, int x, int y) 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 if Java applet support is enabled/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 via, default is enabled
*/
void setPluginsEnabled( bool enable );
/**
* Returns trie 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 @ref 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 local references ( stylesheets, images, scripts, subdocuments )
* should be loaded. ( default false - everything is loaded, if the more specific
* options allow )
*/
void setOnlyLocalReferences(bool enable);
/**
* Returns whether references should be loaded ( default false )
**/
bool onlyLocalReferences() const;
#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 QString &, bool ) { return true; }
KURL baseURL() const;
QString 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(double delay, const QString &url, bool lockHistory = true);
/**
* Schedules a location change.
* This is used for JavaScript-triggered location changes.
*/
void scheduleLocationChange(const QString &url, const QString &referrer, bool lockHistory = true, bool userGesture = false);
bool isScheduledLocationChangePending() const;
/**
* Schedules a history navigation operation (go forward, go back, etc.).
* This is used for JavaScript-triggered location changes.
*/
void scheduleHistoryNavigation( int steps );
/**
* Clears the widget and prepares it for new content.
*
* If you want @ref url() to return
* for example "file:/tmp/test.html", you can use the following code:
* <PRE>
* view->begin( KURL("file:/tmp/test.html" ) );
* </PRE>
*
* @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 @ref write( const char *) with calls
* to @ref write( const QString & ).
*
* 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 QString &str );
/**
* Call this after your last call to @ref write().
*/
virtual void end();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -