WebCore:
[WebKit-https.git] / WebCore / dom / Event.h
1 /*
2  * This file is part of the DOM implementation for KDE.
3  *
4  * Copyright (C) 2001 Peter Kelly (pmk@post.com)
5  * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de)
6  * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
7  * Copyright (C) 2003, 2004, 2005, 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 Event_h
27 #define Event_h
28
29 #include "AtomicString.h"
30 #include "Node.h"
31 #include "Shared.h"
32
33 namespace WebCore {
34
35     // FIXME: this should probably defined elsewhere.
36     typedef unsigned long long DOMTimeStamp;
37
38     // FIXME: these too should probably defined elsewhere.
39     const int EventExceptionOffset = 100;
40     const int EventExceptionMax = 199;
41     enum EventExceptionCode { UNSPECIFIED_EVENT_TYPE_ERR = EventExceptionOffset };
42
43     class Event : public Shared<Event> {
44     public:
45         enum PhaseType { 
46             CAPTURING_PHASE     = 1, 
47             AT_TARGET           = 2,
48             BUBBLING_PHASE      = 3 
49         };
50
51         enum EventType {
52             MOUSEDOWN           = 1,
53             MOUSEUP             = 2,
54             MOUSEOVER           = 4,
55             MOUSEOUT            = 8,
56             MOUSEMOVE           = 16,
57             MOUSEDRAG           = 32,
58             CLICK               = 64,
59             DBLCLICK            = 128,
60             KEYDOWN             = 256,
61             KEYUP               = 512,
62             KEYPRESS            = 1024,
63             DRAGDROP            = 2048,
64             FOCUS               = 4096,
65             BLUR                = 8192,
66             SELECT              = 16384,
67             CHANGE              = 32768
68         };
69
70         Event();
71         Event(const AtomicString& type, bool canBubble, bool cancelable);
72         virtual ~Event();
73
74         void initEvent(const AtomicString& type, bool canBubble, bool cancelable);
75
76         const AtomicString& type() const { return m_type; }
77
78         Node* target() const { return m_target.get(); }
79         void setTarget(PassRefPtr<Node>);
80
81         Node* currentTarget() const { return m_currentTarget; }
82         void setCurrentTarget(Node* currentTarget) { m_currentTarget = currentTarget; }
83
84         unsigned short eventPhase() const { return m_eventPhase; }
85         void setEventPhase(unsigned short eventPhase) { m_eventPhase = eventPhase; }
86
87         bool bubbles() const { return m_canBubble; }
88         bool cancelable() const { return m_cancelable; }
89         DOMTimeStamp timeStamp() { return m_createTime; }
90         void stopPropagation() { m_propagationStopped = true; }
91
92         virtual bool isUIEvent() const;
93         virtual bool isMouseEvent() const;
94         virtual bool isMutationEvent() const;
95         virtual bool isKeyboardEvent() const;
96         virtual bool isDragEvent() const; // a subset of mouse events
97         virtual bool isClipboardEvent() const;
98         virtual bool isWheelEvent() const;
99         virtual bool isBeforeTextInsertedEvent() const;
100         virtual bool isOverflowEvent() const;
101 #ifdef SVG_SUPPORT
102         virtual bool isSVGZoomEvent() const;
103 #endif
104
105         bool propagationStopped() const { return m_propagationStopped; }
106
107         bool defaultPrevented() const { return m_defaultPrevented; }
108         void preventDefault() { if (m_cancelable) m_defaultPrevented = true; }
109         void setDefaultPrevented(bool defaultPrevented) { m_defaultPrevented = defaultPrevented; }
110
111         bool defaultHandled() const { return m_defaultHandled; }
112         void setDefaultHandled() { m_defaultHandled = true; }
113
114         bool cancelBubble() const { return m_cancelBubble; }
115         void setCancelBubble(bool cancel) { m_cancelBubble = cancel; }
116
117         Event* underlyingEvent() const { return m_underlyingEvent.get(); }
118         void setUnderlyingEvent(PassRefPtr<Event>);
119
120         virtual bool storesResultAsString() const;
121         virtual void storeResult(const String&);
122
123     protected:
124         virtual void receivedTarget();
125         bool dispatched() const { return m_target; }
126
127     private:
128         AtomicString m_type;
129         bool m_canBubble;
130         bool m_cancelable;
131
132         bool m_propagationStopped;
133         bool m_defaultPrevented;
134         bool m_defaultHandled;
135         bool m_cancelBubble;
136
137         Node* m_currentTarget;
138         unsigned short m_eventPhase;
139         RefPtr<Node> m_target;
140         DOMTimeStamp m_createTime;
141
142         RefPtr<Event> m_underlyingEvent;
143     };
144
145 } // namespace WebCore
146
147 #endif // Event_h