Remove extraneous includes (HTMLElement, SVGElement, GlyphBuffer, Clipboard)
[WebKit-https.git] / Source / WebCore / dom / Event.h
1 /*
2  * Copyright (C) 2001 Peter Kelly (pmk@post.com)
3  * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de)
4  * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
5  * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  *
22  */
23
24 #ifndef Event_h
25 #define Event_h
26
27 #include "DOMTimeStamp.h"
28 #include "EventNames.h"
29 #include <wtf/HashMap.h>
30 #include <wtf/ListHashSet.h>
31 #include <wtf/RefCounted.h>
32 #include <wtf/text/AtomicString.h>
33
34 namespace WebCore {
35
36 class Clipboard;
37 class EventTarget;
38 class EventDispatcher;
39 class HTMLIFrameElement;
40 class MemoryInstrumentation;
41 class MemoryObjectInfo;
42
43 struct EventInit {
44     EventInit();
45      
46     bool bubbles;
47     bool cancelable;
48 };
49
50 class Event : public RefCounted<Event> {
51 public:
52     enum PhaseType { 
53         NONE                = 0,
54         CAPTURING_PHASE     = 1, 
55         AT_TARGET           = 2,
56         BUBBLING_PHASE      = 3 
57     };
58
59     enum EventType {
60         MOUSEDOWN           = 1,
61         MOUSEUP             = 2,
62         MOUSEOVER           = 4,
63         MOUSEOUT            = 8,
64         MOUSEMOVE           = 16,
65         MOUSEDRAG           = 32,
66         CLICK               = 64,
67         DBLCLICK            = 128,
68         KEYDOWN             = 256,
69         KEYUP               = 512,
70         KEYPRESS            = 1024,
71         DRAGDROP            = 2048,
72         FOCUS               = 4096,
73         BLUR                = 8192,
74         SELECT              = 16384,
75         CHANGE              = 32768
76     };
77
78     static PassRefPtr<Event> create()
79     {
80         return adoptRef(new Event);
81     }
82     static PassRefPtr<Event> create(const AtomicString& type, bool canBubble, bool cancelable)
83     {
84         return adoptRef(new Event(type, canBubble, cancelable));
85     }
86
87     static PassRefPtr<Event> create(const AtomicString& type, const EventInit& initializer)
88     {
89         return adoptRef(new Event(type, initializer));
90     }
91
92     virtual ~Event();
93
94     void initEvent(const AtomicString& type, bool canBubble, bool cancelable);
95
96     const AtomicString& type() const { return m_type; }
97     
98     EventTarget* target() const { return m_target.get(); }
99     void setTarget(PassRefPtr<EventTarget>);
100
101     EventTarget* currentTarget() const { return m_currentTarget; }
102     void setCurrentTarget(EventTarget* currentTarget) { m_currentTarget = currentTarget; }
103
104     unsigned short eventPhase() const { return m_eventPhase; }
105     void setEventPhase(unsigned short eventPhase) { m_eventPhase = eventPhase; }
106
107     bool bubbles() const { return m_canBubble; }
108     bool cancelable() const { return m_cancelable; }
109     DOMTimeStamp timeStamp() const { return m_createTime; }
110
111     void stopPropagation() { m_propagationStopped = true; }
112     void stopImmediatePropagation() { m_immediatePropagationStopped = true; }
113     
114     // IE Extensions
115     EventTarget* srcElement() const { return target(); } // MSIE extension - "the object that fired the event"
116
117     bool returnValue() const { return !defaultPrevented(); }
118     void setReturnValue(bool returnValue) { setDefaultPrevented(!returnValue); }
119
120     Clipboard* clipboardData() const { return isClipboardEvent() ? clipboard() : 0; }
121
122     virtual const AtomicString& interfaceName() const;
123     bool hasInterface(const AtomicString&) const;
124
125     // These events are general classes of events.
126     virtual bool isUIEvent() const;
127     virtual bool isMouseEvent() const;
128     virtual bool isKeyboardEvent() const;
129     virtual bool isTouchEvent() const;
130
131     // Drag events are a subset of mouse events.
132     virtual bool isDragEvent() const;
133
134     // These events lack a DOM interface.
135     virtual bool isClipboardEvent() const;
136     virtual bool isBeforeTextInsertedEvent() const;
137
138     bool propagationStopped() const { return m_propagationStopped || m_immediatePropagationStopped; }
139     bool immediatePropagationStopped() const { return m_immediatePropagationStopped; }
140
141     bool defaultPrevented() const { return m_defaultPrevented; }
142     void preventDefault()
143     {
144         if (m_cancelable)
145             m_defaultPrevented = true;
146     }
147     void setDefaultPrevented(bool defaultPrevented) { m_defaultPrevented = defaultPrevented; }
148
149     bool defaultHandled() const { return m_defaultHandled; }
150     void setDefaultHandled() { m_defaultHandled = true; }
151
152     bool cancelBubble() const { return m_cancelBubble; }
153     void setCancelBubble(bool cancel) { m_cancelBubble = cancel; }
154
155     Event* underlyingEvent() const { return m_underlyingEvent.get(); }
156     void setUnderlyingEvent(PassRefPtr<Event>);
157
158     virtual bool storesResultAsString() const;
159     virtual void storeResult(const String&);
160
161     virtual Clipboard* clipboard() const { return 0; }
162
163     bool isBeingDispatched() const { return eventPhase(); }
164
165     virtual void reportMemoryUsage(MemoryObjectInfo*) const;
166
167     virtual PassRefPtr<Event> cloneFor(HTMLIFrameElement*) const;
168
169 protected:
170     Event();
171     Event(const AtomicString& type, bool canBubble, bool cancelable);
172     Event(const AtomicString& type, const EventInit&);
173
174     virtual void receivedTarget();
175     bool dispatched() const { return m_target; }
176
177 private:
178     AtomicString m_type;
179     bool m_canBubble;
180     bool m_cancelable;
181
182     bool m_propagationStopped;
183     bool m_immediatePropagationStopped;
184     bool m_defaultPrevented;
185     bool m_defaultHandled;
186     bool m_cancelBubble;
187
188     unsigned short m_eventPhase;
189     EventTarget* m_currentTarget;
190     RefPtr<EventTarget> m_target;
191     DOMTimeStamp m_createTime;
192
193     RefPtr<Event> m_underlyingEvent;
194 };
195
196 } // namespace WebCore
197
198 #endif // Event_h