00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _KJS_WINDOW_H_
00023 #define _KJS_WINDOW_H_
00024
00025 #include <qobject.h>
00026 #include <qguardedptr.h>
00027 #include <qmap.h>
00028 #include <qptrlist.h>
00029 #include <qdatetime.h>
00030
00031 #include "kjs_binding.h"
00032
00033 class QTimer;
00034 class KHTMLView;
00035 class KHTMLPart;
00036
00037 namespace KJS {
00038
00039 class WindowFunc;
00040 class WindowQObject;
00041 class Location;
00042 class History;
00043 class External;
00044 class FrameArray;
00045 class JSEventListener;
00046 class JSLazyEventListener;
00047
00048 class Screen : public ObjectImp {
00049 public:
00050 Screen(ExecState *exec);
00051 enum {
00052 Height, Width, ColorDepth, PixelDepth, AvailLeft, AvailTop, AvailHeight,
00053 AvailWidth
00054 };
00055 virtual Value get(ExecState *exec, const Identifier &propertyName) const;
00056 Value getValueProperty(ExecState *exec, int token) const;
00057 private:
00058 KHTMLView *view;
00059 virtual const ClassInfo* classInfo() const { return &info; }
00060 static const ClassInfo info;
00061 };
00062
00063 class Window : public ObjectImp {
00064 friend QGuardedPtr<KHTMLPart> getInstance();
00065 friend class Location;
00066 friend class WindowFunc;
00067 friend class WindowQObject;
00068 friend class ScheduledAction;
00069 public:
00070 Window(KHTMLPart *p);
00071 public:
00072 ~Window();
00078 static Value retrieve(KHTMLPart *p);
00082 static Window *retrieveWindow(KHTMLPart *p);
00087 static Window *retrieveActive(ExecState *exec);
00088 QGuardedPtr<KHTMLPart> part() const { return m_part; }
00089 virtual void mark();
00090 virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
00091 virtual Value get(ExecState *exec, const Identifier &propertyName) const;
00092 virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
00093 virtual bool toBoolean(ExecState *exec) const;
00094 void scheduleClose();
00095 void closeNow();
00096 void delayedGoHistory(int steps);
00097 void goHistory(int steps);
00098 void goURL(ExecState* exec, const QString& url, bool lockHistory);
00099 Value openWindow(ExecState *exec, const List &args);
00100 void resizeTo(QWidget* tl, int width, int height);
00101 void afterScriptExecution();
00102 bool isSafeScript(ExecState *exec) const {
00103 KHTMLPart *activePart = static_cast<KJS::ScriptInterpreter *>( exec->interpreter() )->part();
00104 if ( activePart == m_part ) return true;
00105 return checkIsSafeScript( activePart );
00106 }
00107 Location *location() const;
00108 ObjectImp* frames( ExecState* exec ) const;
00109 JSEventListener *getJSEventListener(const Value &val, bool html = false);
00110 JSLazyEventListener *getJSLazyEventListener(const QString &code, const QString &name, bool html = false);
00111 void clear( ExecState *exec );
00112 virtual UString toString(ExecState *exec) const;
00113
00114
00115 void setCurrentEvent( DOM::Event *evt );
00116
00117 QPtrDict<JSEventListener> jsEventListeners;
00118 virtual const ClassInfo* classInfo() const { return &info; }
00119 static const ClassInfo info;
00120 enum { Closed, Crypto, DefaultStatus, Status, Document, Node, EventCtor, Range,
00121 NodeFilter, DOMException, CSSRule, Frames, _History, _External, Event, InnerHeight,
00122 InnerWidth, Length, _Location, Navigate, Name, _Navigator, _Konqueror, ClientInformation,
00123 OffscreenBuffering, Opener, OuterHeight, OuterWidth, PageXOffset, PageYOffset,
00124 Parent, Personalbar, ScreenX, ScreenY, Scrollbars, Scroll, ScrollBy,
00125 ScreenTop, ScreenLeft,
00126 ScrollTo, ScrollX, ScrollY, MoveBy, MoveTo, ResizeBy, ResizeTo, Self, _Window, Top, _Screen,
00127 Image, Option, Alert, Confirm, Prompt, Open, SetTimeout, ClearTimeout, XMLHttpRequest, XMLSerializer,
00128 Focus, Blur, Close, SetInterval, ClearInterval, CaptureEvents, ReleaseEvents,
00129 Print, AddEventListener, RemoveEventListener, SideBar,
00130 Onabort, Onblur,
00131 Onchange, Onclick, Ondblclick, Ondragdrop, Onerror, Onfocus,
00132 Onkeydown, Onkeypress, Onkeyup, Onload, Onmousedown, Onmousemove,
00133 Onmouseout, Onmouseover, Onmouseup, Onmove, Onreset, Onresize,
00134 Onselect, Onsubmit, Onunload };
00135 WindowQObject *winq;
00136 protected:
00137 enum DelayedActionId { NullAction, DelayedClose, DelayedGoHistory };
00138
00139 Value getListener(ExecState *exec, int eventId) const;
00140 void setListener(ExecState *exec, int eventId, Value func);
00141 private:
00142 struct DelayedAction;
00143 friend struct DelayedAction;
00144
00145 bool checkIsSafeScript( KHTMLPart* activePart ) const;
00146
00147 QGuardedPtr<KHTMLPart> m_part;
00148 Screen *screen;
00149 History *history;
00150 External *external;
00151 FrameArray *m_frames;
00152 Location *loc;
00153 DOM::Event *m_evt;
00154
00155 struct DelayedAction {
00156 DelayedAction() : actionId(NullAction) {}
00157 DelayedAction( DelayedActionId id, QVariant p = QVariant() ) : actionId(id), param(p) {}
00158 DelayedActionId actionId;
00159 QVariant param;
00160 };
00161 QValueList<DelayedAction> m_delayed;
00162 };
00163
00169 class ScheduledAction {
00170 public:
00171 ScheduledAction(Object _func, List _args, QTime _nextTime, int _interval, bool _singleShot, int _timerId);
00172 ScheduledAction(QString _code, QTime _nextTime, int _interval, bool _singleShot, int _timerId);
00173 ~ScheduledAction();
00174 void execute(Window *window);
00175 void mark();
00176
00177 ObjectImp *func;
00178 List args;
00179 QString code;
00180 bool isFunction;
00181 bool singleShot;
00182
00183 QTime nextTime;
00184 int interval;
00185 bool executing;
00186 int timerId;
00187 };
00188
00189 class WindowQObject : public QObject {
00190 Q_OBJECT
00191 public:
00192 WindowQObject(Window *w);
00193 ~WindowQObject();
00194 int installTimeout(const Identifier &handler, int t, bool singleShot);
00195 int installTimeout(const Value &func, List args, int t, bool singleShot);
00196 void clearTimeout(int timerId);
00197 void mark();
00198 public slots:
00199 void timeoutClose();
00200 protected slots:
00201 void parentDestroyed();
00202 protected:
00203 void timerEvent(QTimerEvent *e);
00204 void setNextTimer();
00205 private:
00206 Window *parent;
00207 KHTMLPart *part;
00208 QPtrList<ScheduledAction> scheduledActions;
00209 int pausedTime;
00210 int lastTimerId;
00211 };
00212
00213 class Location : public ObjectImp {
00214 public:
00215 ~Location();
00216 virtual Value get(ExecState *exec, const Identifier &propertyName) const;
00217 virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
00218 virtual Value toPrimitive(ExecState *exec, Type preferred) const;
00219 virtual UString toString(ExecState *exec) const;
00220 enum { Hash, Href, Hostname, Host, Pathname, Port, Protocol, Search, EqualEqual,
00221 Assign, Replace, Reload, ToString };
00222 KHTMLPart *part() const { return m_part; }
00223 virtual const ClassInfo* classInfo() const { return &info; }
00224 static const ClassInfo info;
00225 private:
00226 friend class Window;
00227 Location(KHTMLPart *p);
00228 QGuardedPtr<KHTMLPart> m_part;
00229 };
00230
00231 #ifdef Q_WS_QWS
00232 class Konqueror : public ObjectImp {
00233 friend class KonquerorFunc;
00234 public:
00235 Konqueror(KHTMLPart *p) : part(p) { }
00236 virtual Value get(ExecState *exec, const Identifier &propertyName) const;
00237 virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
00238 virtual UString toString(ExecState *exec) const;
00239 virtual const ClassInfo* classInfo() const { return &info; }
00240 static const ClassInfo info;
00241 private:
00242 KHTMLPart *part;
00243 };
00244 #endif
00245
00246 }
00247
00248 #endif