Reviewed by Vicki.
[WebKit-https.git] / WebCore / khtml / ecma / kjs_events.h
1 // -*- c-basic-offset: 2 -*-
2 /*
3  *  This file is part of the KDE libraries
4  *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
5  *  Copyright (C) 2003 Apple Computer, Inc.
6  *
7  *  This library is free software; you can redistribute it and/or
8  *  modify it under the terms of the GNU Lesser 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  *  Lesser General Public License for more details.
16  *
17  *  You should have received a copy of the GNU Lesser General Public
18  *  License along with this library; if not, write to the Free Software
19  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
21
22 #ifndef _KJS_EVENTS_H_
23 #define _KJS_EVENTS_H_
24
25 #include "ecma/kjs_dom.h"
26 #include "ecma/kjs_html.h"
27 #include "dom/dom2_events.h"
28 #include "dom/dom_misc.h"
29
30 namespace DOM { class ClipboardImpl; }
31
32 namespace KJS {
33
34   class Window;
35   class Clipboard;
36     
37   class JSEventListener : public DOM::EventListener {
38   public:
39     JSEventListener(Object _listener, const Object &_win, bool _html = false);
40     virtual ~JSEventListener();
41     virtual void handleEvent(DOM::Event &evt, bool isWindowEvent);
42     virtual DOM::DOMString eventListenerType();
43     virtual Object listenerObj() const;
44     ObjectImp *listenerObjImp() const { return listenerObj().imp(); }
45   protected:
46     mutable ProtectedObject listener;
47     bool html;
48     ProtectedObject win;
49   };
50
51   class JSLazyEventListener : public JSEventListener {
52   public:
53     JSLazyEventListener(QString _code, const Object &_win, DOM::NodeImpl *node, int lineno = 0);
54     virtual void handleEvent(DOM::Event &evt, bool isWindowEvent);
55     Object listenerObj() const;
56     
57   private:
58     void parseCode() const;
59     
60     mutable QString code;
61     mutable bool parsed;
62     int lineNumber;
63     DOM::NodeImpl *originalNode;
64   };
65
66
67   Value getNodeEventListener(DOM::Node n, int eventId);
68
69   // Constructor for Event - currently only used for some global vars
70   class EventConstructor : public DOMObject {
71   public:
72     EventConstructor(ExecState *) { }
73     virtual Value tryGet(ExecState *exec,const Identifier &p) const;
74     Value getValueProperty(ExecState *, int token) const;
75     // no put - all read-only
76     virtual const ClassInfo* classInfo() const { return &info; }
77     static const ClassInfo info;
78   };
79
80   Value getEventConstructor(ExecState *exec);
81
82   class DOMEvent : public DOMObject {
83   public:
84     DOMEvent(ExecState *exec, DOM::Event e);
85     ~DOMEvent();
86     virtual Value tryGet(ExecState *exec,const Identifier &p) const;
87     Value getValueProperty(ExecState *, int token) const;
88     virtual void tryPut(ExecState *exec, const Identifier &propertyName,
89                         const Value& value, int attr = None);
90     void putValue(ExecState *exec, int token, const Value& value, int);
91     virtual const ClassInfo* classInfo() const { return &info; }
92     static const ClassInfo info;
93     enum { Type, Target, CurrentTarget, EventPhase, Bubbles,
94            Cancelable, TimeStamp, StopPropagation, PreventDefault, InitEvent,
95            // MS IE equivalents
96            SrcElement, ReturnValue, CancelBubble, ClipboardData, DataTransfer };
97     DOM::Event toEvent() const { return event; }
98   protected:
99     DOM::Event event;
100     mutable Clipboard *clipboard;
101   };
102
103   Value getDOMEvent(ExecState *exec, DOM::Event e);
104
105   /**
106    * Convert an object to an Event. Returns a null Event if not possible.
107    */
108   DOM::Event toEvent(const Value&);
109
110   // Constructor object EventException
111   class EventExceptionConstructor : public DOMObject {
112   public:
113     EventExceptionConstructor(ExecState *) { }
114     virtual Value tryGet(ExecState *exec,const Identifier &p) const;
115     Value getValueProperty(ExecState *, int token) const;
116     // no put - all read-only
117     virtual const ClassInfo* classInfo() const { return &info; }
118     static const ClassInfo info;
119   };
120
121   Value getEventExceptionConstructor(ExecState *exec);
122
123   class DOMUIEvent : public DOMEvent {
124   public:
125     DOMUIEvent(ExecState *exec, DOM::UIEvent ue) : DOMEvent(exec, ue) {}
126     ~DOMUIEvent();
127     virtual Value tryGet(ExecState *exec,const Identifier &p) const;
128     Value getValueProperty(ExecState *, int token) const;
129     // no put - all read-only
130     virtual const ClassInfo* classInfo() const { return &info; }
131     static const ClassInfo info;
132     enum { View, Detail, KeyCode, CharCode, LayerX, LayerY, PageX, PageY, Which, InitUIEvent };
133     DOM::UIEvent toUIEvent() const { return static_cast<DOM::UIEvent>(event); }
134   };
135
136   class DOMMouseEvent : public DOMUIEvent {
137   public:
138     DOMMouseEvent(ExecState *exec, DOM::MouseEvent me) : DOMUIEvent(exec, me) {}
139     ~DOMMouseEvent();
140     virtual Value tryGet(ExecState *exec,const Identifier &p) const;
141     Value getValueProperty(ExecState *, int token) const;
142     virtual void mark();
143     // no put - all read-only
144     virtual const ClassInfo* classInfo() const { return &info; }
145     static const ClassInfo info;
146     enum { ScreenX, ScreenY, ClientX, X, ClientY, Y, OffsetX, OffsetY,
147            CtrlKey, ShiftKey, AltKey,
148            MetaKey, Button, RelatedTarget, FromElement, ToElement,
149            InitMouseEvent };
150     DOM::MouseEvent toMouseEvent() const { return static_cast<DOM::MouseEvent>(event); }
151   };
152
153   class DOMKeyboardEvent : public DOMUIEvent {
154   public:
155     DOMKeyboardEvent(ExecState *exec, DOM::KeyboardEvent ke) : DOMUIEvent(exec, ke) {}
156     ~DOMKeyboardEvent();
157     virtual Value tryGet(ExecState *exec, const Identifier &p) const;
158     Value getValueProperty(ExecState *, int token) const;
159     // no put - all read-only
160     virtual const ClassInfo* classInfo() const;
161     static const ClassInfo info;
162     enum { KeyIdentifier, KeyLocation, CtrlKey, ShiftKey, AltKey, MetaKey, AltGraphKey, InitKeyboardEvent};
163     DOM::KeyboardEvent toKeyboardEvent() const { return event; }
164   };
165
166   // Constructor object MutationEvent
167   class MutationEventConstructor : public DOMObject {
168   public:
169     MutationEventConstructor(ExecState *) { }
170     virtual Value tryGet(ExecState *exec,const Identifier &p) const;
171     Value getValueProperty(ExecState *, int token) const;
172     // no put - all read-only
173     virtual const ClassInfo* classInfo() const { return &info; }
174     static const ClassInfo info;
175   };
176
177   Value getMutationEventConstructor(ExecState *exec);
178
179   class DOMMutationEvent : public DOMEvent {
180   public:
181     DOMMutationEvent(ExecState *exec, DOM::MutationEvent me) : DOMEvent(exec, me) {}
182     ~DOMMutationEvent();
183     virtual Value tryGet(ExecState *exec,const Identifier &p) const;
184     Value getValueProperty(ExecState *, int token) const;
185     // no put - all read-only
186     virtual const ClassInfo* classInfo() const { return &info; }
187     static const ClassInfo info;
188     enum { AttrChange, RelatedNode, AttrName, PrevValue, NewValue,
189            InitMutationEvent };
190     DOM::MutationEvent toMutationEvent() const { return static_cast<DOM::MutationEvent>(event); }
191   };
192   
193   class Clipboard : public DOMObject {
194   friend class ClipboardProtoFunc;
195   public:
196     Clipboard(ExecState *exec, DOM::ClipboardImpl *ds);
197     ~Clipboard();
198     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
199     Value getValueProperty(ExecState *exec, int token) const;
200     virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
201     void putValue(ExecState *exec, int token, const Value& value, int /*attr*/);
202     virtual bool toBoolean(ExecState *) const { return true; }
203     virtual const ClassInfo* classInfo() const { return &info; }
204     static const ClassInfo info;
205     enum { ClearData, GetData, SetData, Types, SetDragImage, DropEffect, EffectAllowed };
206   private:
207     DOM::ClipboardImpl *clipboard;
208   };
209   
210   
211 }; // namespace
212
213 #endif