📄 dom_docimpl.h
字号:
/* * This file is part of the DOM implementation for KDE. * * Copyright (C) 1999 Lars Knoll (knoll@kde.org) * (C) 1999 Antti Koivisto (koivisto@kde.org) * (C) 2001 Dirk Mueller (mueller@kde.org) * Copyright (C) 2003 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 _DOM_DocumentImpl_h_#define _DOM_DocumentImpl_h_#include "xml/dom_elementimpl.h"#include "xml/dom2_traversalimpl.h"#include "misc/shared.h"#include <qstringlist.h>#include <qptrlist.h>#include <qobject.h>#include <qdict.h>#include <qmap.h>#include <qdatetime.h>#include <kurl.h>#if APPLE_CHANGES#include "KWQSignal.h"#include "decoder.h"#endif#include "htmlediting.h"class QPaintDevice;class QPaintDeviceMetrics;class KHTMLView;class KHTMLPart;class RenderArena;#if APPLE_CHANGESclass KWQAccObjectCache;#endif// This amount of time must have elapsed before we will even consider scheduling a layout without a delay.const int cLayoutScheduleThreshold = 250;// This is the amount of time we will delay doing a layout whenever we are either still parsing, or // when the minimum amount of time according to the |cLayoutScheduleThreshold| has not yet elapsed.const int cLayoutTimerDelay = 1000;namespace khtml { class CSSStyleSelector; class DocLoader; class EditCommand; class RenderImage; class Tokenizer; class XMLHandler;}#ifndef KHTML_NO_XBLnamespace XBL { class XBLBindingManager;}#endifnamespace DOM { class AbstractViewImpl; class AttrImpl; class CDATASectionImpl; class CSSStyleSheetImpl; class CSSMappedAttributeDeclarationImpl; class CommentImpl; class DocumentFragmentImpl; class DocumentImpl; class DocumentType; class DocumentTypeImpl;#if APPLE_CHANGES class DOMImplementation;#endif class EditingTextImpl; class ElementImpl; class EntityReferenceImpl; class EventImpl; class EventListener; class GenericRONamedNodeMapImpl; class HTMLDocumentImpl; class HTMLElementImpl; class HTMLImageLoader; class HTMLMapElementImpl; class JSEditor; class NodeFilter; class NodeFilterImpl; class NodeIteratorImpl; class NodeListImpl; class ProcessingInstructionImpl; class RangeImpl; class RegisteredEventListener; class Selection; class StyleSheetImpl; class StyleSheetListImpl; class TextImpl; class TreeWalkerImpl;class DOMImplementationImpl : public khtml::Shared<DOMImplementationImpl>{public: DOMImplementationImpl(); ~DOMImplementationImpl(); // DOM methods & attributes for DOMImplementation bool hasFeature ( const DOMString &feature, const DOMString &version ); DocumentTypeImpl *createDocumentType( const DOMString &qualifiedName, const DOMString &publicId, const DOMString &systemId, int &exceptioncode ); DocumentImpl *createDocument( const DOMString &namespaceURI, const DOMString &qualifiedName, const DocumentType &doctype, int &exceptioncode ); DOMImplementationImpl* getInterface(const DOMString& feature) const; // From the DOMImplementationCSS interface CSSStyleSheetImpl *createCSSStyleSheet(DOMStringImpl *title, DOMStringImpl *media, int &exceptioncode); // From the HTMLDOMImplementation interface HTMLDocumentImpl* createHTMLDocument( const DOMString& title); // Other methods (not part of DOM) DocumentImpl *createDocument( KHTMLView *v = 0 ); HTMLDocumentImpl *createHTMLDocument( KHTMLView *v = 0 ); // Returns the static instance of this class - only one instance of this class should // ever be present, and is used as a factory method for creating DocumentImpl objects static DOMImplementationImpl *instance();#if APPLE_CHANGES static DOMImplementation createInstance (DOMImplementationImpl *impl);#endifprotected: static DOMImplementationImpl *m_instance;};/** * @internal */class DocumentImpl : public QObject, public NodeBaseImpl{ Q_OBJECTpublic: DocumentImpl(DOMImplementationImpl *_implementation, KHTMLView *v); ~DocumentImpl(); // DOM methods & attributes for Document DocumentTypeImpl *doctype() const; DOMImplementationImpl *implementation() const; virtual ElementImpl *documentElement() const; virtual ElementImpl *createElement ( const DOMString &tagName, int &exceptioncode ); DocumentFragmentImpl *createDocumentFragment (); TextImpl *createTextNode ( const DOMString &data ); CommentImpl *createComment ( const DOMString &data ); CDATASectionImpl *createCDATASection ( const DOMString &data ); ProcessingInstructionImpl *createProcessingInstruction ( const DOMString &target, const DOMString &data ); Attr createAttribute(NodeImpl::Id id); EntityReferenceImpl *createEntityReference ( const DOMString &name ); NodeImpl *importNode( NodeImpl *importedNode, bool deep, int &exceptioncode ); virtual ElementImpl *createElementNS ( const DOMString &_namespaceURI, const DOMString &_qualifiedName, int &exceptioncode ); ElementImpl *getElementById ( const DOMString &elementId ) const; // Actually part of HTMLDocument, but used for giving XML documents a window title as well DOMString title() const { return m_title; } void setTitle(DOMString _title); // DOM methods overridden from parent classes virtual DOMString nodeName() const; virtual unsigned short nodeType() const; // Other methods (not part of DOM) virtual bool isDocumentNode() const { return true; } virtual bool isHTMLDocument() const { return false; } virtual ElementImpl *createHTMLElement ( const DOMString &tagName, int &exceptioncode ); khtml::CSSStyleSelector *styleSelector() { return m_styleSelector; } ElementImpl *DocumentImpl::getElementByAccessKey( const DOMString &key ); /** * Updates the pending sheet count and then calls updateStyleSelector. */ void stylesheetLoaded(); /** * This method returns true if all top-level stylesheets have loaded (including * any @imports that they may be loading). */ bool haveStylesheetsLoaded() { return m_pendingStylesheets <= 0 || m_ignorePendingStylesheets; } /** * Increments the number of pending sheets. The <link> elements * invoke this to add themselves to the loading list. */ void addPendingSheet() { m_pendingStylesheets++; } /** * Called when one or more stylesheets in the document may have been added, removed or changed. * * Creates a new style selector and assign it to this document. This is done by iterating through all nodes in * document (or those before <BODY> in a HTML document), searching for stylesheets. Stylesheets can be contained in * <LINK>, <STYLE> or <BODY> elements, as well as processing instructions (XML documents only). A list is * constructed from these which is used to create the a new style selector which collates all of the stylesheets * found and is used to calculate the derived styles for all rendering objects. */ void updateStyleSelector(); void recalcStyleSelector(); bool usesDescendantRules() { return m_usesDescendantRules; } void setUsesDescendantRules(bool b) { m_usesDescendantRules = b; } bool usesSiblingRules() { return m_usesSiblingRules; } void setUsesSiblingRules(bool b) { m_usesSiblingRules = b; }\ QString nextState(); // Query all registered elements for their state QStringList docState(); void registerMaintainsState(NodeImpl* e) { m_maintainsState.append(e); } void deregisterMaintainsState(NodeImpl* e) { m_maintainsState.removeRef(e); } // Set the state the document should restore to void setRestoreState( const QStringList &s) { m_state = s; } QStringList &restoreState( ) { return m_state; } KHTMLView *view() const { return m_view; } KHTMLPart *part() const; RangeImpl *createRange(); NodeIteratorImpl *createNodeIterator(NodeImpl *root, unsigned long whatToShow, NodeFilterImpl *filter, bool expandEntityReferences, int &exceptioncode); TreeWalkerImpl *createTreeWalker(NodeImpl *root, unsigned long whatToShow, NodeFilterImpl *filter, bool expandEntityReferences, int &exceptioncode); // Special support for editing CSSStyleDeclarationImpl *createCSSStyleDeclaration(); EditingTextImpl *createEditingTextNode(const DOMString &text); virtual void recalcStyle( StyleChange = NoChange ); static QPtrList<DocumentImpl> * changedDocuments; virtual void updateRendering(); void updateLayout(); static void updateDocumentsRendering(); khtml::DocLoader *docLoader() { return m_docLoader; } virtual void attach(); virtual void detach(); RenderArena* renderArena() { return m_renderArena; }#if APPLE_CHANGES KWQAccObjectCache* getExistingAccObjectCache() { return m_accCache; } KWQAccObjectCache* getOrCreateAccObjectCache();#endif // to get visually ordered hebrew and arabic pages right void setVisuallyOrdered(); void updateSelection(); void open(); void close(); void closeInternal ( bool checkTokenizer ); void write ( const DOMString &text ); void write ( const QString &text ); void writeln ( const DOMString &text ); void finishParsing ( ); void clear(); QString URL() const { return m_url; } void setURL(QString url) { m_url = url; } QString baseURL() const { return m_baseURL.isEmpty() ? m_url : m_baseURL; } void setBaseURL(const QString& baseURL) { m_baseURL = baseURL; } QString baseTarget() const { return m_baseTarget; } void setBaseTarget(const QString& baseTarget) { m_baseTarget = baseTarget; }#if APPLE_CHANGES QString completeURL(const QString &);#else QString completeURL(const QString& url) { return KURL(baseURL(),url).url(); };#endif // from cachedObjectClient virtual void setStyleSheet(const DOM::DOMString &url, const DOM::DOMString &sheetStr); void setUserStyleSheet(const QString& sheet); QString userStyleSheet() const { return m_usersheet; } void setPrintStyleSheet(const QString& sheet) { m_printSheet = sheet; } QString printStyleSheet() const { return m_printSheet; } CSSStyleSheetImpl* elementSheet(); virtual khtml::Tokenizer *createTokenizer(); khtml::Tokenizer *tokenizer() { return m_tokenizer; } virtual khtml::XMLHandler* createTokenHandler(); QPaintDeviceMetrics *paintDeviceMetrics() { return m_paintDeviceMetrics; } QPaintDevice *paintDevice() const { return m_paintDevice; } void setPaintDevice( QPaintDevice *dev ); enum HTMLMode { Html3, Html4, XHtml }; enum ParseMode { Compat, AlmostStrict, Strict }; virtual void determineParseMode( const QString &str ); void setParseMode( ParseMode m ) { pMode = m; } ParseMode parseMode() const { return pMode; } bool inCompatMode() { return pMode == Compat; } bool inAlmostStrictMode() { return pMode == AlmostStrict; } bool inStrictMode() { return pMode == Strict; } void setHTMLMode( HTMLMode m ) { hMode = m; } HTMLMode htmlMode() const { return hMode; } void setParsing(bool b); bool parsing() const { return m_bParsing; } bool allDataReceived() const { return m_bAllDataReceived; } int minimumLayoutDelay(); bool shouldScheduleLayout(); int elapsedTime(); void setTextColor( QColor color ) { m_textColor = color; } QColor textColor() const { return m_textColor; } const QColor& linkColor() const { return m_linkColor; } const QColor& visitedLinkColor() const { return m_visitedLinkColor; } const QColor& activeLinkColor() const { return m_activeLinkColor; } void setLinkColor(const QColor& c) { m_linkColor = c; } void setVisitedLinkColor(const QColor& c) { m_visitedLinkColor = c; } void setActiveLinkColor(const QColor& c) { m_activeLinkColor = c; } void resetLinkColor(); void resetVisitedLinkColor(); void resetActiveLinkColor(); // internal NodeImpl *findElement( Id id ); bool prepareMouseEvent( bool readonly, int x, int y, MouseEvent *ev ); virtual bool childAllowed( NodeImpl *newChild ); virtual bool childTypeAllowed( unsigned short nodeType ); virtual NodeImpl *cloneNode ( bool deep );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -