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