10c7bdd6063711098cfffe4ada8e44de401171cc
[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 History;
43   class FrameArray;
44   class JSEventListener;
45   class JSLazyEventListener;
46
47   class Screen : public ObjectImp {
48   public:
49     Screen(ExecState *exec);
50     enum {
51       Height, Width, ColorDepth, PixelDepth, AvailLeft, AvailTop, AvailHeight,
52       AvailWidth
53     };
54     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
55     Value getValueProperty(ExecState *exec, int token) const;
56   private:
57     KHTMLView *view;
58     virtual const ClassInfo* classInfo() const { return &info; }
59     static const ClassInfo info;
60   };
61
62   class Window : public ObjectImp {
63     friend QGuardedPtr<KHTMLPart> getInstance();
64     friend class Location;
65     friend class WindowFunc;
66     friend class WindowQObject;
67     friend class ScheduledAction;
68   public:
69     Window(KHTMLPart *p);
70   public:
71     ~Window();
72     /**
73      * Returns and registers a window object. In case there's already a Window
74      * for the specified part p this will be returned in order to have unique
75      * bindings.
76      */
77     static Value retrieve(KHTMLPart *p);
78     /**
79      * Returns the Window object for a given HTML part
80      */
81     static Window *retrieveWindow(KHTMLPart *p);
82     /**
83      * returns a pointer to the Window object this javascript interpreting instance
84      * was called from.
85      */
86     static Window *retrieveActive(ExecState *exec);
87     QGuardedPtr<KHTMLPart> part() const { return m_part; }
88     virtual void mark();
89     virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
90     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
91     virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
92     virtual bool toBoolean(ExecState *exec) const;
93     int installTimeout(const UString &handler, int t, bool singleShot);
94     int installTimeout(const Value &function, List &args, int t, bool singleShot);
95     void clearTimeout(int timerId);
96 #ifdef APPLE_CHANGES
97     bool hasTimeouts();
98     QMap<int, ScheduledAction*> *pauseTimeouts(const void *key);
99     void resumeTimeouts(QMap<int, ScheduledAction*>*sa, const void *key);
100 #endif
101     void scheduleClose();
102     bool isSafeScript(ExecState *exec) const;
103     Location *location() const;
104     Selection *selection() const;
105     JSEventListener *getJSEventListener(const Value &val, bool html = false);
106     JSLazyEventListener *getJSLazyEventListener(const QString &code, bool html = false, int lineno = 0);
107     void clear( ExecState *exec );
108     virtual UString toString(ExecState *exec) const;
109
110     // Set the current "event" object
111     void setCurrentEvent( DOM::Event *evt );
112
113     QPtrDict<JSEventListener> jsEventListeners;
114     virtual const ClassInfo* classInfo() const { return &info; }
115     static const ClassInfo info;
116     enum { Closed, Crypto, DefaultStatus, Status, Document, Node, EventCtor, Range,
117            NodeFilter, DOMException, CSSRule, Frames, _History, Event, InnerHeight,
118            InnerWidth, Length, _Location, Name, _Navigator, _Konqueror, ClientInformation,
119            OffscreenBuffering, Opener, OuterHeight, OuterWidth, PageXOffset, PageYOffset,
120            Parent, Personalbar, ScreenX, ScreenY, Scrollbars, Scroll, ScrollBy,
121            ScreenTop, ScreenLeft,
122            ScrollTo, ScrollX, ScrollY, MoveBy, MoveTo, ResizeBy, ResizeTo, Self, _Window, Top, _Screen,
123            Image, Option, Alert, Confirm, Prompt, Open, Print, SetTimeout, ClearTimeout,
124            Focus, GetSelection, Blur, Close, SetInterval, ClearInterval, CaptureEvents, 
125            ReleaseEvents, AddEventListener, RemoveEventListener, XMLHttpRequest, XMLSerializer,
126            Onabort, Onblur, Onchange, Onclick, Ondblclick, Ondragdrop, Onerror, 
127            Onfocus, Onkeydown, Onkeypress, Onkeyup, Onload, Onmousedown, Onmousemove,
128            Onmouseout, Onmouseover, Onmouseup, Onmove, Onreset, Onresize, Onscroll, Onsearch,
129            Onselect, Onsubmit, Onunload };
130   protected:
131     Value getListener(ExecState *exec, int eventId) const;
132     void setListener(ExecState *exec, int eventId, Value func);
133   private:
134     void updateLayout() const;
135
136     QGuardedPtr<KHTMLPart> m_part;
137     Screen *screen;
138     History *history;
139     FrameArray *frames;
140     Location *loc;
141     Selection *m_selection;
142     WindowQObject *winq;
143     DOM::Event *m_evt;
144   };
145
146   /**
147    * An action (either function or string) to be executed after a specified
148    * time interval, either once or repeatedly. Used for window.setTimeout()
149    * and window.setInterval()
150    */
151   class ScheduledAction {
152   public:
153     ScheduledAction(Object _func, List _args, bool _singleShot);
154     ScheduledAction(const QString &_code, bool _singleShot);
155     ~ScheduledAction();
156     void execute(Window *window);
157
158     ProtectedObject func;
159     List args;
160     QString code;
161     bool isFunction;
162     bool singleShot;
163   };
164
165   class WindowQObject : public QObject {
166     Q_OBJECT
167   public:
168     WindowQObject(Window *w);
169     ~WindowQObject();
170     int installTimeout(const UString &handler, int t, bool singleShot);
171     int installTimeout(const Value &func, List args, int t, bool singleShot);
172     void clearTimeout(int timerId, bool delAction = true);
173 #ifdef APPLE_CHANGES
174     bool hasTimeouts();
175     QMap<int, ScheduledAction*> *WindowQObject::pauseTimeouts(const void *key);
176     void WindowQObject::resumeTimeouts(QMap<int, ScheduledAction*> *sa, const void *key);
177 #endif
178
179   public slots:
180     void timeoutClose();
181   protected slots:
182     void parentDestroyed();
183   protected:
184     void timerEvent(QTimerEvent *e);
185   private:
186     Window *parent;
187     KHTMLPart *part;            // not guarded, may be dangling
188     QMap<int, ScheduledAction*> scheduledActions;
189   };
190
191   class Location : public ObjectImp {
192   public:
193     ~Location();
194     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
195     virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
196     virtual Value toPrimitive(ExecState *exec, Type preferred) const;
197     virtual UString toString(ExecState *exec) const;
198     enum { Hash, Href, Hostname, Host, Pathname, Port, Protocol, Search, EqualEqual,
199            Replace, Reload, ToString };
200     KHTMLPart *part() const { return m_part; }
201     virtual const ClassInfo* classInfo() const { return &info; }
202     static const ClassInfo info;
203   private:
204     friend class Window;
205     Location(KHTMLPart *p);
206     QGuardedPtr<KHTMLPart> m_part;
207   };
208
209   class Selection : public ObjectImp {
210   public:
211     ~Selection();
212     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
213     virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
214     virtual Value toPrimitive(ExecState *exec, Type preferred) const;
215     virtual UString toString(ExecState *exec) const;
216     enum { AnchorNode, AnchorOffset, FocusNode, FocusOffset, BaseNode, BaseOffset, ExtentNode, ExtentOffset, 
217            IsCollapsed, _Type, EqualEqual, Collapse, CollapseToEnd, CollapseToStart, Empty, ToString, 
218            SetBaseAndExtent, SetPosition, Modify };
219     KHTMLPart *part() const { return m_part; }
220     virtual const ClassInfo* classInfo() const { return &info; }
221     static const ClassInfo info;
222   private:
223     friend class Window;
224     Selection(KHTMLPart *p);
225     QGuardedPtr<KHTMLPart> m_part;
226   };
227
228 #ifdef Q_WS_QWS
229   class Konqueror : public ObjectImp {
230     friend class KonquerorFunc;
231   public:
232     Konqueror(KHTMLPart *p) : part(p) { }
233     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
234     virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
235     virtual UString toString(ExecState *exec) const;
236     virtual const ClassInfo* classInfo() const { return &info; }
237     static const ClassInfo info;
238   private:
239     KHTMLPart *part;
240   };
241 #endif
242
243 }; // namespace
244
245 #endif