591eb9b0eb6096cdce8e5e5c09c017bc96bd1c99
[WebKit-https.git] / WebCore / dom / ContainerNode.h
1 /*
2  * This file is part of the DOM implementation for KDE.
3  *
4  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
5  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
6  *           (C) 2001 Dirk Mueller (mueller@kde.org)
7  * Copyright (C) 2004, 2006 Apple Computer, Inc.
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Library General Public
11  * License as published by the Free Software Foundation; either
12  * version 2 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Library General Public License for more details.
18  *
19  * You should have received a copy of the GNU Library General Public License
20  * along with this library; see the file COPYING.LIB.  If not, write to
21  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22  * Boston, MA 02111-1307, USA.
23  *
24  */
25
26 #ifndef ContainerNode_h
27 #define ContainerNode_h
28
29 #include "EventTargetNode.h"
30
31 namespace WebCore {
32     
33 typedef void (*NodeCallback)(Node*);
34
35 class ContainerNode : public EventTargetNode
36 {
37 public:
38     ContainerNode(Document *doc);
39     virtual ~ContainerNode();
40
41     virtual Node* firstChild() const;
42     virtual Node* lastChild() const;
43
44     virtual bool insertBefore(PassRefPtr<Node> newChild, Node* refChild, ExceptionCode&);
45     virtual bool replaceChild(PassRefPtr<Node> newChild, Node* oldChild, ExceptionCode&);
46     virtual bool removeChild(Node* child, ExceptionCode&);
47     virtual bool appendChild(PassRefPtr<Node> newChild, ExceptionCode&);
48
49     virtual ContainerNode* addChild(PassRefPtr<Node>);
50     virtual bool hasChildNodes() const;
51     virtual void attach();
52     virtual void detach();
53     virtual void willRemove();
54     virtual IntRect getRect() const;
55     virtual void setFocus(bool = true);
56     virtual void setActive(bool active = true, bool pause = false);
57     virtual void setHovered(bool = true);
58     virtual unsigned childNodeCount() const;
59     virtual Node* childNode(unsigned index) const;
60
61     virtual void insertedIntoDocument();
62     virtual void removedFromDocument();
63     virtual void insertedIntoTree(bool deep);
64     virtual void removedFromTree(bool deep);
65
66     Node* fastFirstChild() const { return m_firstChild; }
67     Node* fastLastChild() const { return m_lastChild; }
68
69     void removeAllChildren();
70     void removeChildren();
71     void cloneChildNodes(Node* clone);
72
73 protected:
74     static void queuePostAttachCallback(NodeCallback, Node*);
75
76     void fastSetFirstChild(Node* child) { m_firstChild = child; }
77     void fastSetLastChild(Node* child) { m_lastChild = child; }
78     
79 private:
80     Node* m_firstChild;
81     Node* m_lastChild;
82
83     bool getUpperLeftCorner(int& x, int& y) const;
84     bool getLowerRightCorner(int& x, int& y) const;
85 };
86
87 } // namespace WebCore
88
89 #endif // ContainerNode_h