Reviewed by Darin Adler.
[WebKit-https.git] / WebCore / dom / EventTargetNode.h
1 /*
2  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2001 Dirk Mueller (mueller@kde.org)
5  * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
6  *           (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public License
19  * along with this library; see the file COPYING.LIB.  If not, write to
20  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  * Boston, MA 02110-1301, USA.
22  *
23  */
24
25 #ifndef EventTargetNode_h
26 #define EventTargetNode_h
27
28 #include "EventTarget.h"
29 #include "Node.h"
30
31 namespace WebCore {
32
33 class Attribute;
34 class Frame;
35
36 class EventTargetNode : public Node, public EventTarget {
37 public:
38     EventTargetNode(Document*, bool isElement = false, bool isContainer = false);
39     virtual ~EventTargetNode();
40
41     virtual bool isEventTargetNode() const { return true; }
42     virtual EventTargetNode* toNode() { return this; }
43
44     Frame* associatedFrame() const;
45
46     virtual void addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture);
47     virtual void removeEventListener(const AtomicString& eventType, EventListener*, bool useCapture);
48     virtual bool dispatchEvent(PassRefPtr<Event>, ExceptionCode&);
49     void removeAllEventListeners();
50
51     void setEventListenerForType(const AtomicString& eventType, PassRefPtr<EventListener>);
52     void setEventListenerForTypeAndAttribute(const AtomicString& eventType, Attribute*);
53     void removeEventListenerForType(const AtomicString& eventType);
54     bool dispatchEventForType(const AtomicString& eventType, bool canBubble, bool cancelable);
55     EventListener* eventListenerForType(const AtomicString& eventType) const;
56
57     bool dispatchSubtreeModifiedEvent();
58     void dispatchWindowEvent(PassRefPtr<Event>);
59     void dispatchWindowEvent(const AtomicString& eventType, bool canBubble, bool cancelable);
60     bool dispatchUIEvent(const AtomicString& eventType, int detail = 0, PassRefPtr<Event> underlyingEvent = 0);
61     bool dispatchKeyEvent(const PlatformKeyboardEvent&);
62     void dispatchWheelEvent(PlatformWheelEvent&);
63     bool dispatchMouseEvent(const PlatformMouseEvent&, const AtomicString& eventType,
64         int clickCount = 0, Node* relatedTarget = 0);
65     bool dispatchMouseEvent(const AtomicString& eventType, int button, int clickCount,
66         int pageX, int pageY, int screenX, int screenY,
67         bool ctrlKey, bool altKey, bool shiftKey, bool metaKey,
68         bool isSimulated = false, Node* relatedTarget = 0, PassRefPtr<Event> underlyingEvent = 0);
69     void dispatchSimulatedMouseEvent(const AtomicString& eventType, PassRefPtr<Event> underlyingEvent = 0);
70     void dispatchSimulatedClick(PassRefPtr<Event> underlyingEvent, bool sendMouseEvents = false, bool showPressedLook = true);
71     bool dispatchProgressEvent(const AtomicString &eventType, bool lengthComputableArg, unsigned loadedArg, unsigned totalArg);
72     void dispatchStorageEvent(const AtomicString &eventType, const String& key, const String& oldValue, const String& newValue, Frame* source);
73     bool dispatchWebKitAnimationEvent(const AtomicString& eventType, const String& animationName, double elapsedTime);
74     bool dispatchWebKitTransitionEvent(const AtomicString& eventType, const String& propertyName, double elapsedTime);
75     bool dispatchGenericEvent(PassRefPtr<Event>, ExceptionCode&);
76
77     virtual void handleLocalEvents(Event*, bool useCapture);
78
79     virtual void dispatchFocusEvent();
80     virtual void dispatchBlurEvent();
81
82     virtual void insertedIntoDocument();
83     virtual void removedFromDocument();
84     virtual void willMoveToNewOwnerDocument();
85     virtual void didMoveToNewOwnerDocument();
86
87     /**
88      * Perform the default action for an event e.g. submitting a form
89      */
90     virtual void defaultEventHandler(Event*);
91
92     /**
93      * Used for disabled form elements; if true, prevents mouse events from being dispatched
94      * to event listeners, and prevents DOMActivate events from being sent at all.
95      */
96     virtual bool disabled() const;
97
98     RegisteredEventListenerList* localEventListeners() const { return m_regdListeners; }
99
100     EventListener* onabort() const;
101     void setOnabort(PassRefPtr<EventListener>);
102     EventListener* onblur() const;
103     void setOnblur(PassRefPtr<EventListener>);
104     EventListener* onchange() const;
105     void setOnchange(PassRefPtr<EventListener>);
106     EventListener* onclick() const;
107     void setOnclick(PassRefPtr<EventListener>);
108     EventListener* oncontextmenu() const;
109     void setOncontextmenu(PassRefPtr<EventListener>);
110     EventListener* ondblclick() const;
111     void setOndblclick(PassRefPtr<EventListener>);
112     EventListener* onerror() const;
113     void setOnerror(PassRefPtr<EventListener>);
114     EventListener* onfocus() const;
115     void setOnfocus(PassRefPtr<EventListener>);
116     EventListener* oninput() const;
117     void setOninput(PassRefPtr<EventListener>);
118     EventListener* onkeydown() const;
119     void setOnkeydown(PassRefPtr<EventListener>);
120     EventListener* onkeypress() const;
121     void setOnkeypress(PassRefPtr<EventListener>);
122     EventListener* onkeyup() const;
123     void setOnkeyup(PassRefPtr<EventListener>);
124     EventListener* onload() const;
125     void setOnload(PassRefPtr<EventListener>);
126     EventListener* onmousedown() const;
127     void setOnmousedown(PassRefPtr<EventListener>);
128     EventListener* onmousemove() const;
129     void setOnmousemove(PassRefPtr<EventListener>);
130     EventListener* onmouseout() const;
131     void setOnmouseout(PassRefPtr<EventListener>);
132     EventListener* onmouseover() const;
133     void setOnmouseover(PassRefPtr<EventListener>);
134     EventListener* onmouseup() const;
135     void setOnmouseup(PassRefPtr<EventListener>);
136     EventListener* onmousewheel() const;
137     void setOnmousewheel(PassRefPtr<EventListener>);
138     EventListener* onbeforecut() const;
139     void setOnbeforecut(PassRefPtr<EventListener>);
140     EventListener* oncut() const;
141     void setOncut(PassRefPtr<EventListener>);
142     EventListener* onbeforecopy() const;
143     void setOnbeforecopy(PassRefPtr<EventListener>);
144     EventListener* oncopy() const;
145     void setOncopy(PassRefPtr<EventListener>);
146     EventListener* onbeforepaste() const;
147     void setOnbeforepaste(PassRefPtr<EventListener>);
148     EventListener* onpaste() const;
149     void setOnpaste(PassRefPtr<EventListener>);
150     EventListener* ondragenter() const;
151     void setOndragenter(PassRefPtr<EventListener>);
152     EventListener* ondragover() const;
153     void setOndragover(PassRefPtr<EventListener>);
154     EventListener* ondragleave() const;
155     void setOndragleave(PassRefPtr<EventListener>);
156     EventListener* ondrop() const;
157     void setOndrop(PassRefPtr<EventListener>);
158     EventListener* ondragstart() const;
159     void setOndragstart(PassRefPtr<EventListener>);
160     EventListener* ondrag() const;
161     void setOndrag(PassRefPtr<EventListener>);
162     EventListener* ondragend() const;
163     void setOndragend(PassRefPtr<EventListener>);
164     EventListener* onreset() const;
165     void setOnreset(PassRefPtr<EventListener>);
166     EventListener* onresize() const;
167     void setOnresize(PassRefPtr<EventListener>);
168     EventListener* onscroll() const;
169     void setOnscroll(PassRefPtr<EventListener>);
170     EventListener* onsearch() const;
171     void setOnsearch(PassRefPtr<EventListener>);
172     EventListener* onselect() const;
173     void setOnselect(PassRefPtr<EventListener>);
174     EventListener* onselectstart() const;
175     void setOnselectstart(PassRefPtr<EventListener>);
176     EventListener* onsubmit() const;
177     void setOnsubmit(PassRefPtr<EventListener>);
178     EventListener* onunload() const;
179     void setOnunload(PassRefPtr<EventListener>);
180
181     using Node::ref;
182     using Node::deref;
183  
184 protected:
185     friend class EventTarget;
186     RegisteredEventListenerList* m_regdListeners;
187
188 private:
189     virtual void refEventTarget() { ref(); }
190     virtual void derefEventTarget() { deref(); }
191 };
192
193 inline EventTargetNode* EventTargetNodeCast(Node* n) 
194
195     ASSERT(n->isEventTargetNode());
196     return static_cast<EventTargetNode*>(n); 
197 }
198
199 inline const EventTargetNode* EventTargetNodeCast(const Node* n) 
200
201     ASSERT(n->isEventTargetNode());
202     return static_cast<const EventTargetNode*>(n); 
203 }
204
205 } // namespace WebCore
206
207 #endif // EventTargetNode_h