5d499a5ddc8c5b34aedae8e9e288cad2812d90b1
[WebKit-https.git] / WebCore / khtml / ecma / kjs_window.h
1 // -*- c-basic-offset: 2 -*-
2 /*
3  *  This file is part of the KDE libraries
4  *  Copyright (C) 2000 Harri Porten (porten@kde.org)
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_WINDOW_H_
23 #define _KJS_WINDOW_H_
24
25 #include <qobject.h>
26 #include <qguardedptr.h>
27 #include <qmap.h>
28 #include <qptrlist.h>
29
30 #include "kjs_binding.h"
31
32 class QTimer;
33 class KHTMLView;
34 class KHTMLPart;
35
36 namespace KJS {
37
38   class WindowFunc;
39   class WindowQObject;
40   class Location;
41   class Selection;
42   class BarInfo;
43   class History;
44   class FrameArray;
45   class JSEventListener;
46   class JSUnprotectedEventListener;
47   class JSLazyEventListener;
48
49   class Screen : public ObjectImp {
50   public:
51     Screen(ExecState *exec);
52     enum {
53       Height, Width, ColorDepth, PixelDepth, AvailLeft, AvailTop, AvailHeight,
54       AvailWidth
55     };
56     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
57     Value getValueProperty(ExecState *exec, int token) const;
58   private:
59     KHTMLView *view;
60     virtual const ClassInfo* classInfo() const { return &info; }
61     static const ClassInfo info;
62   };
63
64   class Window : public ObjectImp {
65     friend QGuardedPtr<KHTMLPart> getInstance();
66     friend class Location;
67     friend class WindowFunc;
68     friend class WindowQObject;
69     friend class ScheduledAction;
70   public:
71     Window(KHTMLPart *p);
72   public:
73     ~Window();
74     /**
75      * Returns and registers a window object. In case there's already a Window
76      * for the specified part p this will be returned in order to have unique
77      * bindings.
78      */
79     static Value retrieve(KHTMLPart *p);
80     /**
81      * Returns the Window object for a given HTML part
82      */
83     static Window *retrieveWindow(KHTMLPart *p);
84     /**
85      * returns a pointer to the Window object this javascript interpreting instance
86      * was called from.
87      */
88     static Window *retrieveActive(ExecState *exec);
89     QGuardedPtr<KHTMLPart> part() const { return m_part; }
90     virtual void mark();
91     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
92     virtual bool hasProperty(ExecState *exec, const Identifier &propertyName) const;
93     virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
94     virtual bool toBoolean(ExecState *exec) const;
95     int installTimeout(const UString &handler, int t, bool singleShot);
96     int installTimeout(const Value &function, List &args, int t, bool singleShot);
97     void clearTimeout(int timerId);
98 #ifdef APPLE_CHANGES
99     bool hasTimeouts();
100     QMap<int, ScheduledAction*> *pauseTimeouts(const void *key);
101     void resumeTimeouts(QMap<int, ScheduledAction*>*sa, const void *key);
102     
103     KJS::Interpreter *interpreter() const;
104
105     static bool isSafeScript (const KJS::ScriptInterpreter *origin, const KJS::ScriptInterpreter *target);
106 #endif
107     void scheduleClose();
108         
109     bool isSafeScript(ExecState *exec) const;
110     Location *location() const;
111     Selection *selection() const;
112     BarInfo *locationbar(ExecState *exec) const;
113     BarInfo *menubar(ExecState *exec) const;
114     BarInfo *personalbar(ExecState *exec) const;
115     BarInfo *scrollbars(ExecState *exec) const;
116     BarInfo *statusbar(ExecState *exec) const;
117     BarInfo *toolbar(ExecState *exec) const;
118     JSEventListener *getJSEventListener(const Value &val, bool html = false);
119     JSUnprotectedEventListener *getJSUnprotectedEventListener(const Value &val, bool html = false);
120     JSLazyEventListener *getJSLazyEventListener(const QString &code, DOM::NodeImpl *node, int lineno = 0);
121     void clear( ExecState *exec );
122     virtual UString toString(ExecState *exec) const;
123
124     // Set the current "event" object
125     void setCurrentEvent( DOM::Event *evt );
126
127     QPtrDict<JSEventListener> jsEventListeners;
128     QPtrDict<JSUnprotectedEventListener> jsUnprotectedEventListeners;
129     virtual const ClassInfo* classInfo() const { return &info; }
130     static const ClassInfo info;
131     enum { Closed, Crypto, DefaultStatus, Status, Document, Node, EventCtor, Range,
132            NodeFilter, DOMException, CSSRule, Frames, _History, Event, InnerHeight,
133            InnerWidth, Length, _Location, Locationbar, Name, _Navigator, _Konqueror, ClientInformation,
134            Menubar, OffscreenBuffering, Opener, OuterHeight, OuterWidth, PageXOffset, PageYOffset,
135            Parent, Personalbar, ScreenX, ScreenY, Scrollbars, Scroll, ScrollBy,
136            ScreenTop, ScreenLeft,
137            ScrollTo, ScrollX, ScrollY, MoveBy, MoveTo, ResizeBy, ResizeTo, Self, _Window, Top, _Screen,
138            Image, Option, Alert, Confirm, Prompt, Open, Print, SetTimeout, ClearTimeout,
139            Focus, GetSelection, Blur, Close, SetInterval, ClearInterval, CaptureEvents, 
140            ReleaseEvents, AddEventListener, RemoveEventListener, XMLHttpRequest, XMLSerializer,
141            Onabort, Onblur, Onchange, Onclick, Ondblclick, Ondragdrop, Onerror, 
142            Onfocus, Onkeydown, Onkeypress, Onkeyup, Onload, Onmousedown, Onmousemove,
143            Onmouseout, Onmouseover, Onmouseup, OnWindowMouseWheel, Onmove, Onreset, Onresize, Onscroll, Onsearch,
144            Onselect, Onsubmit, Onunload,
145            Statusbar, Toolbar, FrameElement };
146   protected:
147     Value getListener(ExecState *exec, int eventId) const;
148     void setListener(ExecState *exec, int eventId, Value func);
149   private:
150     void updateLayout(bool ignoreStylesheets = true) const;
151
152     QGuardedPtr<KHTMLPart> m_part;
153     Screen *screen;
154     History *history;
155     FrameArray *frames;
156     Location *loc;
157     Selection *m_selection;
158     BarInfo *m_locationbar;
159     BarInfo *m_menubar;
160     BarInfo *m_personalbar;
161     BarInfo *m_scrollbars;
162     BarInfo *m_statusbar;
163     BarInfo *m_toolbar;
164     WindowQObject *winq;
165     DOM::Event *m_evt;
166   };
167
168   /**
169    * An action (either function or string) to be executed after a specified
170    * time interval, either once or repeatedly. Used for window.setTimeout()
171    * and window.setInterval()
172    */
173   class ScheduledAction {
174   public:
175     ScheduledAction(Object _func, List _args, bool _singleShot);
176     ScheduledAction(const QString &_code, bool _singleShot);
177     ~ScheduledAction();
178     void execute(Window *window);
179
180     ProtectedObject func;
181     List args;
182     QString code;
183     bool isFunction;
184     bool singleShot;
185   };
186
187   class WindowQObject : public QObject {
188     Q_OBJECT
189   public:
190     WindowQObject(Window *w);
191     ~WindowQObject();
192     int installTimeout(const UString &handler, int t, bool singleShot);
193     int installTimeout(const Value &func, List args, int t, bool singleShot);
194     void clearTimeout(int timerId, bool delAction = true);
195 #ifdef APPLE_CHANGES
196     bool hasTimeouts();
197     QMap<int, ScheduledAction*> *WindowQObject::pauseTimeouts(const void *key);
198     void WindowQObject::resumeTimeouts(QMap<int, ScheduledAction*> *sa, const void *key);
199 #endif
200
201   public slots:
202     void timeoutClose();
203   protected slots:
204     void parentDestroyed();
205   protected:
206     void timerEvent(QTimerEvent *e);
207   private:
208     Window *parent;
209     KHTMLPart *part;            // not guarded, may be dangling
210     QMap<int, ScheduledAction*> scheduledActions;
211   };
212
213   class Location : public ObjectImp {
214   public:
215     ~Location();
216     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
217     virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
218     virtual Value toPrimitive(ExecState *exec, Type preferred) const;
219     virtual UString toString(ExecState *exec) const;
220     enum { Hash, Href, Hostname, Host, Pathname, Port, Protocol, Search, EqualEqual,
221            Replace, Reload, ToString };
222     KHTMLPart *part() const { return m_part; }
223     virtual const ClassInfo* classInfo() const { return &info; }
224     static const ClassInfo info;
225   private:
226     friend class Window;
227     Location(KHTMLPart *p);
228     QGuardedPtr<KHTMLPart> m_part;
229   };
230
231   class Selection : public ObjectImp {
232   public:
233     ~Selection();
234     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
235     virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
236     virtual Value toPrimitive(ExecState *exec, Type preferred) const;
237     virtual UString toString(ExecState *exec) const;
238     enum { AnchorNode, AnchorOffset, FocusNode, FocusOffset, BaseNode, BaseOffset, ExtentNode, ExtentOffset, 
239            IsCollapsed, _Type, EqualEqual, Collapse, CollapseToEnd, CollapseToStart, Empty, ToString, 
240            SetBaseAndExtent, SetPosition, Modify };
241     KHTMLPart *part() const { return m_part; }
242     virtual const ClassInfo* classInfo() const { return &info; }
243     static const ClassInfo info;
244   private:
245     friend class Window;
246     Selection(KHTMLPart *p);
247     QGuardedPtr<KHTMLPart> m_part;
248   };
249
250   class BarInfo : public ObjectImp {
251   public:
252     ~BarInfo();
253     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
254     virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
255     enum { Visible };
256     enum Type { Locationbar, Menubar, Personalbar, Scrollbars, Statusbar, Toolbar };
257     KHTMLPart *part() const { return m_part; }
258     virtual const ClassInfo* classInfo() const { return &info; }
259     static const ClassInfo info;
260   private:
261     friend class Window;
262     BarInfo(ExecState *exec, KHTMLPart *p, Type barType);
263     QGuardedPtr<KHTMLPart> m_part;
264     Type m_type;
265   };
266
267 #ifdef Q_WS_QWS
268   class Konqueror : public ObjectImp {
269     friend class KonquerorFunc;
270   public:
271     Konqueror(KHTMLPart *p) : part(p) { }
272     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
273     virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
274     virtual UString toString(ExecState *exec) const;
275     virtual const ClassInfo* classInfo() const { return &info; }
276     static const ClassInfo info;
277   private:
278     KHTMLPart *part;
279   };
280 #endif
281
282 }; // namespace
283
284 #endif