23cc8e411c76f5ab8c0068b7c94425e59d9a1fc9
[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         // Reverse-engineered from Netscape
52         enum EventType {
53             MOUSEDOWN           = 1,
54             MOUSEUP             = 2,
55             MOUSEOVER           = 4,
56             MOUSEOUT            = 8,
57             MOUSEMOVE           = 16,
58             MOUSEDRAG           = 32,
59             CLICK               = 64,
60             DBLCLICK            = 128,
61             KEYDOWN             = 256,
62             KEYUP               = 512,
63             KEYPRESS            = 1024,
64             DRAGDROP            = 2048,
65             FOCUS               = 4096,
66             BLUR                = 8192,
67             SELECT              = 16384,
68             CHANGE              = 32768
69         };
70     
71         Event();
72         Event(const AtomicString& typeArg, bool canBubbleArg, bool cancelableArg);
73         virtual ~Event();
74
75         void initEvent(const AtomicString &eventTypeArg, bool canBubbleArg, bool cancelableArg);
76
77         const AtomicString& type() const { return m_type; }
78         
79         Node* target() const { return m_target.get(); }
80         void setTarget(Node*);
81         
82         Node* currentTarget() const { return m_currentTarget; }
83         void setCurrentTarget(Node* currentTarget) { m_currentTarget = currentTarget; }
84         
85         unsigned short eventPhase() const { return m_eventPhase; }
86         void setEventPhase(unsigned short eventPhase) { m_eventPhase = eventPhase; }
87         
88         bool bubbles() const { return m_canBubble; }
89         bool cancelable() const { return m_cancelable; }
90         DOMTimeStamp timeStamp() { return m_createTime; }
91         void stopPropagation() { m_propagationStopped = true; }
92
93         virtual bool isUIEvent() const;
94         virtual bool isMouseEvent() const;
95         virtual bool isMutationEvent() const;
96         virtual bool isKeyboardEvent() const;
97         virtual bool isDragEvent() const; // a subset of mouse events
98         virtual bool isClipboardEvent() const;
99         virtual bool isWheelEvent() const;
100         virtual bool isBeforeTextInsertedEvent() const;
101         virtual bool isOverflowEvent() const;
102 #ifdef SVG_SUPPORT
103         virtual bool isSVGZoomEvent() const;
104 #endif
105         
106         bool propagationStopped() const { return m_propagationStopped; }
107         bool defaultPrevented() const { return m_defaultPrevented; }
108
109         void setDefaultHandled() { m_defaultHandled = true; }
110         bool defaultHandled() const { return m_defaultHandled; }
111
112         void preventDefault() { if (m_cancelable) m_defaultPrevented = true; }
113         void setDefaultPrevented(bool defaultPrevented) { m_defaultPrevented = defaultPrevented; }
114
115         void setCancelBubble(bool cancel) { m_cancelBubble = cancel; }
116         bool getCancelBubble() const { return m_cancelBubble; }
117
118         virtual bool storesResultAsString() const;
119         virtual void storeResult(const String&);
120
121     protected:
122         virtual void receivedTarget();
123         bool dispatched() const { return m_target; }
124
125     private:
126         AtomicString m_type;
127         bool m_canBubble;
128         bool m_cancelable;
129
130         bool m_propagationStopped;
131         bool m_defaultPrevented;
132         bool m_defaultHandled;
133         bool m_cancelBubble;
134
135         Node* m_currentTarget; // ref > 0 maintained externally
136         unsigned short m_eventPhase;
137         RefPtr<Node> m_target;
138         DOMTimeStamp m_createTime;
139     };
140
141 } // namespace WebCore
142
143 #endif // Event_h