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