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