⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dom_nodeimpl.h

📁 khtml在gtk上的移植版本
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * 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) 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 _DOM_NodeImpl_h_#define _DOM_NodeImpl_h_#include "dom/dom_misc.h"#include "dom/dom_string.h"#include "dom/dom_node.h"#include "misc/helper.h"#include "misc/shared.h"#include "dom_atomicstring.h"class QPainter;template <class type> class QPtrList;class KHTMLView;class RenderArena;class QRect;class QMouseEvent;class QKeyEvent;class QTextStream;class QStringList;namespace khtml {    class RenderObject;    class RenderStyle;};namespace DOM {class CSSStyleDeclarationImpl;class DocumentImpl;class ElementImpl;class EventImpl;class NamedNodeMapImpl;class NodeListImpl;class Position;class Range;class RangeImpl;class RegisteredEventListener;// The namespace used for XHTML elements#define XHTML_NAMESPACE "http://www.w3.org/1999/xhtml"const Q_UINT16 noNamespace = 0;const Q_UINT16 anyNamespace = 1;const Q_UINT16 xhtmlNamespace = 2;const Q_UINT16 anyLocalName = 0;const Q_UINT32 namespaceMask = 0xFFFF0000U;const Q_UINT32 localNameMask = 0x0000FFFFU;inline Q_UINT16 namespacePart(Q_UINT32 i) { return i >> 16; }inline Q_UINT16 localNamePart(Q_UINT32 i) { return i; }inline Q_UINT32 makeId(Q_UINT16 n, Q_UINT16 l) { return (n << 16) | l; }const Q_UINT32 anyQName = makeId(anyNamespace, anyLocalName);class DocumentPtr : public khtml::Shared<DocumentPtr>{public:    DocumentImpl *document() const { return doc; }private:    DocumentPtr() { doc = 0; }    friend class DocumentImpl;    friend class DOMImplementationImpl;    DocumentImpl *doc;};// this class implements nodes, which can have a parent but no children:class NodeImpl : public khtml::TreeShared<NodeImpl>{    friend class DocumentImpl;public:    NodeImpl(DocumentPtr *doc);    virtual ~NodeImpl();    // DOM methods & attributes for Node    virtual DOMString nodeName() const;    virtual DOMString nodeValue() const;    virtual void setNodeValue( const DOMString &_nodeValue, int &exceptioncode );    virtual unsigned short nodeType() const;    NodeImpl *parentNode() const { return m_parent; }    NodeImpl *previousSibling() const { return m_previous; }    NodeImpl *nextSibling() const { return m_next; }    virtual NodeListImpl *childNodes();    virtual NodeImpl *firstChild() const;    virtual NodeImpl *lastChild() const;    virtual NodeImpl *insertBefore ( NodeImpl *newChild, NodeImpl *refChild, int &exceptioncode );    virtual NodeImpl *replaceChild ( NodeImpl *newChild, NodeImpl *oldChild, int &exceptioncode );    virtual NodeImpl *removeChild ( NodeImpl *oldChild, int &exceptioncode );    virtual NodeImpl *appendChild ( NodeImpl *newChild, int &exceptioncode );    virtual void remove(int &exceptioncode);    virtual bool hasChildNodes (  ) const;    virtual NodeImpl *cloneNode ( bool deep ) = 0;    virtual DOMString localName() const;    virtual DOMString prefix() const;    virtual void setPrefix(const DOMString &_prefix, int &exceptioncode );    void normalize ();    // Other methods (not part of DOM)    virtual bool isElementNode() const { return false; }    virtual bool isHTMLElement() const { return false; }    virtual bool isAttributeNode() const { return false; }    virtual bool isTextNode() const { return false; }    virtual bool isDocumentNode() const { return false; }    virtual bool isXMLElementNode() const { return false; }    bool isBlockFlow() const;        // Used by <form> elements to indicate a malformed state of some kind, typically    // used to keep from applying the bottom margin of the form.    virtual bool isMalformed() { return false; }    virtual void setMalformed(bool malformed) {};        virtual bool containsOnlyWhitespace() const { return false; }        // helper functions not being part of the DOM    // Attention: they assume that the caller did the consistency checking!    void setPreviousSibling(NodeImpl *previous) { m_previous = previous; }    void setNextSibling(NodeImpl *next) { m_next = next; }    virtual void setFirstChild(NodeImpl *child);    virtual void setLastChild(NodeImpl *child);    /** (Not part of the official DOM)     * Returns the next leaf node.     *     * Using this function delivers leaf nodes as if the whole DOM tree     * were a linear chain of its leaf nodes.     * @return next leaf node or 0 if there are no more.     */    NodeImpl *nextLeafNode() const;    /** (Not part of the official DOM)     * Returns the previous leaf node.     *     * Using this function delivers leaf nodes as if the whole DOM tree     * were a linear chain of its leaf nodes.     * @return previous leaf node or 0 if there are no more.     */    NodeImpl *previousLeafNode() const;    bool isEditableBlock() const;    ElementImpl *enclosingBlockFlowElement() const;    ElementImpl *rootEditableElement() const;        bool inSameRootEditableElement(NodeImpl *);    bool inSameContainingBlockFlowElement(NodeImpl *);        Position positionForCoordinates(int x, int y);    // used by the parser. Doesn't do as many error checkings as    // appendChild(), and returns the node into which will be parsed next.    virtual NodeImpl *addChild(NodeImpl *newChild);    typedef Q_UINT32 Id;    // id() is used to easily and exactly identify a node. It    // is optimized for quick comparison and low memory consumption.    // its value depends on the owner document of the node and is    // categorized in the following way:    // 1..ID_LAST_TAG: the node inherits HTMLElementImpl and is    //                 part of the HTML namespace.    //                 The HTML namespace is either the global    //                 one (no namespace) or the XHTML namespace    //                 depending on the owner document's doctype    // ID_LAST_TAG+1..0xffff: non-HTML elements in the global namespace    // others       non-HTML elements in a namespace.    //                 the upper 16 bit identify the namespace    //                 the lower 16 bit identify the local part of the    //                 qualified element name.    virtual Id id() const { return 0; };#if APPLE_CHANGES    Id identifier() const;#endif    enum MouseEventType {        MousePress,        MouseRelease,        MouseClick,        MouseDblClick,        MouseMove    };    struct MouseEvent    {        MouseEvent( int _button, MouseEventType _type,                    const DOMString &_url = DOMString(), const DOMString& _target = DOMString(),                    NodeImpl *_innerNode = 0)            {                button = _button; type = _type;                url = _url; target = _target;                innerNode = _innerNode;            }        int button;        MouseEventType type;        DOMString url; // url under mouse or empty        DOMString target;        Node innerNode;    };    // for LINK and STYLE    virtual void sheetLoaded() {}    bool hasID() const      { return m_hasId; }    bool hasClass() const   { return m_hasClass; }    bool hasStyle() const   { return m_hasStyle; }    bool active() const     { return m_active; }    bool focused() const { return m_focused; }    bool attached() const   { return m_attached; }    bool changed() const    { return m_changed; }    bool hasChangedChild() const { return m_hasChangedChild; }    bool hasAnchor() const { return m_hasAnchor; }    bool inDocument() const { return m_inDocument; }    bool styleElement() const { return m_styleElement; }    bool implicitNode() const { return m_implicit; }    void setHasID(bool b=true) { m_hasId = b; }    void setHasClass(bool b=true) { m_hasClass = b; }    void setHasStyle(bool b=true) { m_hasStyle = b; }    void setHasChangedChild( bool b = true ) { m_hasChangedChild = b; }    void setInDocument(bool b=true) { m_inDocument = b; }    virtual void setFocus(bool b=true) { m_focused = b; }    virtual void setActive(bool b=true) { m_active = b; }    void setChanged(bool b=true);    unsigned short tabIndex() const { return m_tabIndex; }    void setTabIndex(unsigned short _tabIndex) { m_tabIndex = _tabIndex; }    /**        * whether this node can receive the keyboard focus.     */    virtual bool isFocusable() const;    virtual bool isKeyboardFocusable() const;    virtual bool isMouseFocusable() const;        virtual bool isInline() const;    virtual QString toHTML() const;    QString recursive_toHTML(bool start = false) const;    QString recursive_toHTMLWithOptions(bool start=false, const DOM::RangeImpl *range=NULL, QPtrList<NodeImpl> *nodes=NULL) const;    void recursive_completeURLs(QString baseURL);        virtual bool isContentEditable() const;    virtual QRect getRect() const;    enum StyleChange { NoChange, NoInherit, Inherit, Detach, Force };    virtual void recalcStyle( StyleChange = NoChange ) {}    StyleChange diff( khtml::RenderStyle *s1, khtml::RenderStyle *s2 ) const;    unsigned long nodeIndex() const;    // Returns the document that this node is associated with. This is guaranteed to always be non-null, as opposed to    // DOM's ownerDocument() which is null for Document nodes (and sometimes DocumentType nodes).    DocumentImpl* getDocument() const { return document->document(); }    void setDocument(DocumentPtr *doc);    void addEventListener(int id, EventListener *listener, const bool useCapture);    void removeEventListener(int id, EventListener *listener, bool useCapture);    void removeHTMLEventListener(int id);    void setHTMLEventListener(int id, EventListener *listener);    EventListener *getHTMLEventListener(int id);    bool dispatchEvent(EventImpl *evt, int &exceptioncode, bool tempEvent = false);    bool dispatchGenericEvent( EventImpl *evt, int &exceptioncode);    bool dispatchHTMLEvent(int _id, bool canBubbleArg, bool cancelableArg);    bool dispatchWindowEvent(int _id, bool canBubbleArg, bool cancelableArg);    bool dispatchMouseEvent(QMouseEvent *e, int overrideId = 0, int overrideDetail = 0);    bool dispatchUIEvent(int _id, int detail = 0);    bool dispatchSubtreeModifiedEvent();    bool dispatchKeyEvent(QKeyEvent *key);    void handleLocalEvents(EventImpl *evt, bool useCapture);    /**     * Perform the default action for an event e.g. submitting a form     */    virtual void defaultEventHandler(EventImpl *evt);    /**     * Used for disabled form elements; if true, prevents mouse events from being dispatched     * to event listeners, and prevents DOMActivate events from being sent at all.     */    virtual bool disabled() const;    virtual bool isReadOnly();    virtual bool childTypeAllowed( unsigned short /*type*/ ) { return false; }    virtual unsigned long childNodeCount();    virtual NodeImpl *childNode(unsigned long index);    /**     * Does a pre-order traversal of the tree to find the node next node after this one. This uses the same order that     * the tags appear in the source file.     *     * @param stayWithin If not null, the traversal will stop once the specified node is reached. This can be used to     * restrict traversal to a particular sub-tree.     *     * @return The next node, in document order     *     * see @ref traversePreviousNode()     */    NodeImpl *traverseNextNode(NodeImpl *stayWithin = 0) const;        /* Like traverseNextNode, but skips children and starts with the next sibling. */    NodeImpl *traverseNextSibling(NodeImpl *stayWithin = 0) const;    /**     * Does a reverse pre-order traversal to find the node that comes before the current one in document order     *     * see @ref traverseNextNode()     */    NodeImpl *traversePreviousNode() const;    DocumentPtr *docPtr() const { return document; }    NodeImpl *previousEditable() const;    NodeImpl *nextEditable() const;    //bool isEditable() const;    khtml::RenderObject *renderer() const { return m_render; }    khtml::RenderObject *nextRenderer();    khtml::RenderObject *previousRenderer();    void setRenderer(khtml::RenderObject* renderer) { m_render = renderer; }        void checkSetPrefix(const DOMString &_prefix, int &exceptioncode);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -