📄 dom_nodeimpl.h
字号:
virtual long maxOffset() const;
virtual long caretMinOffset() const;
virtual long caretMaxOffset() const;
virtual unsigned long caretMaxRenderedOffset() const;
virtual long previousOffset (long current) const;
virtual long nextOffset (long current) const;
#ifndef NDEBUG
virtual void dump(QTextStream *stream, QString ind = "") const;
#endif
// -----------------------------------------------------------------------------
// Integration with rendering tree
/**
* Attaches this node to the rendering tree. This calculates the style to be applied to the node and creates an
* appropriate RenderObject which will be inserted into the tree (except when the style has display: none). This
* makes the node visible in the KHTMLView.
*/
virtual void attach();
/**
* Detaches the node from the rendering tree, making it invisible in the rendered view. This method will remove
* the node's rendering object from the rendering tree and delete it.
*/
virtual void detach();
void createRendererIfNeeded();
virtual khtml::RenderStyle *styleForRenderer(khtml::RenderObject *parent);
virtual bool rendererIsNeeded(khtml::RenderStyle *);
virtual khtml::RenderObject *createRenderer(RenderArena *, khtml::RenderStyle *);
// -----------------------------------------------------------------------------
// Methods for maintaining the state of the element between history navigation
/**
* Indicates whether or not this type of node maintains it's state. If so, the state of the node will be stored when
* the user goes to a different page using the state() method, and restored using the restoreState() method if the
* user returns (e.g. using the back button). This is used to ensure that user-changeable elements such as form
* controls maintain their contents when the user returns to a previous page in the history.
*/
virtual bool maintainsState();
/**
* Returns the state of this node represented as a string. This string will be passed to restoreState() if the user
* returns to the page.
*
* @return State information about the node represented as a string
*/
virtual QString state();
/**
* Sets the state of the element based on strings previously returned by state(). This is used to initialize form
* controls with their old values when the user returns to the page in their history. The receiver
* should remove the string from the list that it uses for its restore.
*
* @param states The strings previously returned by nodes' state methods.
*/
virtual void restoreState(QStringList &stateList);
// -----------------------------------------------------------------------------
// Notification of document stucture changes
/**
* Notifies the node that it has been inserted into the document. This is called during document parsing, and also
* when a node is added through the DOM methods insertBefore(), appendChild() or replaceChild(). Note that this only
* happens when the node becomes part of the document tree, i.e. only when the document is actually an ancestor of
* the node. The call happens _after_ the node has been added to the tree.
*
* This is similar to the DOMNodeInsertedIntoDocument DOM event, but does not require the overhead of event
* dispatching.
*/
virtual void insertedIntoDocument();
/**
* Notifies the node that it is no longer part of the document tree, i.e. when the document is no longer an ancestor
* node.
*
* This is similar to the DOMNodeRemovedFromDocument DOM event, but does not require the overhead of event
* dispatching, and is called _after_ the node is removed from the tree.
*/
virtual void removedFromDocument();
/**
* Notifies the node that it's list of children have changed (either by adding or removing child nodes), or a child
* node that is of the type CDATA_SECTION_NODE, TEXT_NODE or COMMENT_NODE has changed its value.
*/
virtual void childrenChanged();
virtual DOMString toString() const = 0;
#ifndef NDEBUG
virtual void formatForDebugger(char *buffer, unsigned length) const;
void displayNode(const char *prefix="");
void displayTree();
#endif
void registerNodeList(NodeListImpl *list);
void unregisterNodeList(NodeListImpl *list);
void notifyNodeListsSubtreeModified();
void notifyLocalNodeListsSubtreeModified();
private: // members
DocumentPtr *document;
NodeImpl *m_previous;
NodeImpl *m_next;
protected:
khtml::RenderObject *m_render;
QPtrList<RegisteredEventListener> *m_regdListeners;
QPtrDict<NodeListImpl> *m_nodeLists;
unsigned short m_tabIndex : 15;
bool m_hasTabIndex : 1;
bool m_hasId : 1;
bool m_hasClass : 1;
bool m_hasStyle : 1;
bool m_attached : 1;
bool m_changed : 1;
bool m_hasChangedChild : 1;
bool m_inDocument : 1;
bool m_hasAnchor : 1;
bool m_specified : 1; // used in AttrImpl. Accessor functions there
bool m_focused : 1;
bool m_active : 1;
bool m_styleElement : 1; // contains stylesheet text
bool m_implicit : 1; // implicitely generated by the parser
// 3 bits unused
};
// this is the full Node Implementation with parents and children.
class NodeBaseImpl : public NodeImpl
{
public:
NodeBaseImpl(DocumentPtr *doc);
virtual ~NodeBaseImpl();
// DOM methods overridden from parent classes
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 bool hasChildNodes ( ) const;
// Other methods (not part of DOM)
void removeChildren();
void cloneChildNodes(NodeImpl *clone);
virtual void setFirstChild(NodeImpl *child);
virtual void setLastChild(NodeImpl *child);
virtual NodeImpl *addChild(NodeImpl *newChild);
virtual void attach();
virtual void detach();
virtual NodeListImpl *getElementsByTagNameNS ( DOMStringImpl* namespaceURI,
DOMStringImpl* localName );
virtual QRect getRect() const;
bool getUpperLeftCorner(int &xPos, int &yPos) const;
bool getLowerRightCorner(int &xPos, int &yPos) const;
virtual void setFocus(bool=true);
virtual void setActive(bool=true);
virtual unsigned long childNodeCount() const;
virtual NodeImpl *childNode(unsigned long index);
virtual void insertedIntoDocument();
virtual void removedFromDocument();
// check for being (grand-..)father:
bool checkNoOwner( NodeImpl *other, int &exceptioncode );
//protected:
NodeImpl *_first;
NodeImpl *_last;
// helper functions for inserting children:
// ### this should vanish. do it in dom/ !
// check for same source document:
bool checkSameDocument( NodeImpl *newchild, int &exceptioncode );
// check for being child:
bool checkIsChild( NodeImpl *oldchild, int &exceptioncode );
// ###
// find out if a node is allowed to be our child
void dispatchChildInsertedEvents( NodeImpl *child, int &exceptioncode );
void dispatchChildRemovalEvents( NodeImpl *child, int &exceptioncode );
};
// --------------------------------------------------------------------------
class Node;
class NodeImpl;
class NodeListImpl : public khtml::Shared<NodeListImpl>
{
public:
NodeListImpl( NodeImpl *_rootNode );
virtual ~NodeListImpl();
// DOM methods & attributes for NodeList
virtual unsigned long length() const = 0;
virtual NodeImpl *item ( unsigned long index ) const = 0;
virtual NodeImpl *itemById ( const DOMString & elementId ) const;
// Other methods (not part of DOM)
void rootNodeSubtreeModified();
#if APPLE_CHANGES
static NodeList createInstance(NodeListImpl *impl);
#endif
protected:
// helper functions for searching all ElementImpls in a tree
unsigned long recursiveLength(NodeImpl *start = 0) const;
NodeImpl *recursiveItem ( unsigned long offset, NodeImpl *start = 0 ) const;
virtual bool nodeMatches( NodeImpl *testNode ) const = 0;
NodeImpl *rootNode;
mutable int cachedLength;
mutable NodeImpl *lastItem;
mutable unsigned long lastItemOffset;
mutable bool isLengthCacheValid : 1;
mutable bool isItemCacheValid : 1;
};
class ChildNodeListImpl : public NodeListImpl
{
public:
ChildNodeListImpl( NodeImpl *n);
// DOM methods overridden from parent classes
virtual unsigned long length() const;
virtual NodeImpl *item ( unsigned long index ) const;
protected:
virtual bool nodeMatches( NodeImpl *testNode ) const;
};
/**
* NodeList which lists all Nodes in a document with a given tag name
*/
class TagNodeListImpl : public NodeListImpl
{
public:
TagNodeListImpl( NodeImpl *n, NodeImpl::Id tagId, NodeImpl::Id tagIdMask );
// DOM methods overridden from parent classes
virtual unsigned long length() const;
virtual NodeImpl *item ( unsigned long index ) const;
// Other methods (not part of DOM)
protected:
virtual bool nodeMatches( NodeImpl *testNode ) const;
NodeImpl::Id m_id;
NodeImpl::Id m_idMask;
};
/**
* NodeList which lists all Nodes in a Element with a given "name=" tag
*/
class NameNodeListImpl : public NodeListImpl
{
public:
NameNodeListImpl( NodeImpl *doc, const DOMString &t );
// DOM methods overridden from parent classes
virtual unsigned long length() const;
virtual NodeImpl *item ( unsigned long index ) const;
// Other methods (not part of DOM)
protected:
virtual bool nodeMatches( NodeImpl *testNode ) const;
DOMString nodeName;
};
// Generic NamedNodeMap interface
// Other classes implement this for more specific situations e.g. attributes
// of an element
class NamedNodeMapImpl : public khtml::Shared<NamedNodeMapImpl>
{
public:
NamedNodeMapImpl();
virtual ~NamedNodeMapImpl();
// DOM methods & attributes for NamedNodeMap
virtual NodeImpl *getNamedItem ( NodeImpl::Id id ) const = 0;
virtual Node removeNamedItem ( NodeImpl::Id id, int &exceptioncode ) = 0;
virtual Node setNamedItem ( NodeImpl* arg, int &exceptioncode ) = 0;
virtual NodeImpl *item ( unsigned long index ) const = 0;
virtual unsigned long length( ) const = 0;
// Other methods (not part of DOM)
virtual NodeImpl::Id mapId(const DOMString& namespaceURI, const DOMString& localName, bool readonly) = 0;
virtual bool isReadOnly() { return false; }
#if APPLE_CHANGES
static NamedNodeMap createInstance(NamedNodeMapImpl *impl);
#endif
};
// ### fixme
#if 0
// Generic read-only NamedNodeMap implementation
// You can add items using the internal function addItem()
class GenericRONamedNodeMapImpl : public NamedNodeMapImpl
{
public:
GenericRONamedNodeMapImpl(DocumentPtr* doc);
virtual ~GenericRONamedNodeMapImpl();
// DOM methods & attributes for NamedNodeMap
virtual NodeImpl *getNamedItem ( const DOMString &name, int &exceptioncode ) const;
virtual Node setNamedItem ( const Node &arg, int &exceptioncode );
virtual Node removeNamedItem ( const DOMString &name, int &exceptioncode );
virtual NodeImpl *item ( unsigned long index ) const;
virtual unsigned long length( ) const;
virtual NodeImpl *getNamedItemNS( const DOMString &namespaceURI, const DOMString &localName,
int &exceptioncode ) const;
virtual NodeImpl *setNamedItemNS( NodeImpl *arg, int &exceptioncode );
virtual NodeImpl *removeNamedItemNS( const DOMString &namespaceURI, const DOMString &localName,
int &exceptioncode );
// Other methods (not part of DOM)
virtual bool isReadOnly() { return true; }
void addNode(NodeImpl *n);
protected:
DocumentImpl* m_doc;
QPtrList<NodeImpl> *m_contents;
};
#endif
}; //namespace
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -