khtml Library API Documentation

kjs_window.h

00001 // -*- c-basic-offset: 2 -*-
00002 /*
00003  *  This file is part of the KDE libraries
00004  *  Copyright (C) 2000 Harri Porten (porten@kde.org)
00005  *  Copyright (C) 2003 Apple Computer, Inc.
00006  *
00007  *  This library is free software; you can redistribute it and/or
00008  *  modify it under the terms of the GNU Library General Public
00009  *  License as published by the Free Software Foundation; either
00010  *  version 2 of the License, or (at your option) any later version.
00011  *
00012  *  This library is distributed in the hope that it will be useful,
00013  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  *  Library General Public License for more details.
00016  *
00017  *  You should have received a copy of the GNU Library General Public
00018  *  License along with this library; if not, write to the Free Software
00019  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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 KParts {
00038   class ReadOnlyPart;
00039 }
00040 
00041 namespace khtml {
00042   class ChildFrame;
00043 }
00044 
00045 namespace KJS {
00046 
00047   class WindowFunc;
00048   class WindowQObject;
00049   class Location;
00050   class History;
00051   class External;
00052   class FrameArray;
00053   class JSEventListener;
00054   class JSLazyEventListener;
00055 
00056   class Screen : public ObjectImp {
00057   public:
00058     Screen(ExecState *exec);
00059     enum {
00060       Height, Width, ColorDepth, PixelDepth, AvailLeft, AvailTop, AvailHeight,
00061       AvailWidth
00062     };
00063     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
00064     Value getValueProperty(ExecState *exec, int token) const;
00065   private:
00066     KHTMLView *view;
00067     virtual const ClassInfo* classInfo() const { return &info; }
00068     static const ClassInfo info;
00069   };
00070 
00071   class Window : public ObjectImp {
00072     friend QGuardedPtr<KHTMLPart> getInstance();
00073     friend class Location;
00074     friend class WindowFunc;
00075     friend class WindowQObject;
00076     friend class ScheduledAction;
00077   public:
00078     Window(khtml::ChildFrame *p);
00079   public:
00080     ~Window();
00086     static Value retrieve(KParts::ReadOnlyPart *p);
00090     static Window *retrieveWindow(KParts::ReadOnlyPart *p);
00095     static Window *retrieveActive(ExecState *exec);
00096     KParts::ReadOnlyPart *part() const;
00097     virtual void mark();
00098     virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
00099     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
00100     virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
00101     virtual bool toBoolean(ExecState *exec) const;
00102     void scheduleClose();
00103     void closeNow();
00104     void delayedGoHistory(int steps);
00105     void goHistory(int steps);
00106     void goURL(ExecState* exec, const QString& url, bool lockHistory);
00107     Value openWindow(ExecState *exec, const List &args);
00108     void resizeTo(QWidget* tl, int width, int height);
00109     void afterScriptExecution();
00110     bool isSafeScript(ExecState *exec) const {
00111         KParts::ReadOnlyPart *activePart = static_cast<KJS::ScriptInterpreter *>(  exec->interpreter() )->part();
00112       if ( activePart == part() ) return true;
00113       return checkIsSafeScript( activePart );
00114     }
00115     Location *location() const;
00116     ObjectImp* frames( ExecState* exec ) const;
00117     JSEventListener *getJSEventListener(const Value &val, bool html = false);
00118     JSLazyEventListener *getJSLazyEventListener(const QString &code, const QString &name, bool html = false);
00119     void clear( ExecState *exec );
00120     virtual UString toString(ExecState *exec) const;
00121 
00122     // Set the current "event" object
00123     void setCurrentEvent( DOM::Event *evt );
00124 
00125     QPtrDict<JSEventListener> jsEventListeners;
00126     virtual const ClassInfo* classInfo() const { return &info; }
00127     static const ClassInfo info;
00128     enum { Closed, Crypto, DefaultStatus, Status, Document, Node, EventCtor, Range,
00129            NodeFilter, DOMException, CSSRule, Frames, _History, _External, Event, InnerHeight,
00130            InnerWidth, Length, _Location, Navigate, Name, _Navigator, _Konqueror, ClientInformation,
00131            OffscreenBuffering, Opener, OuterHeight, OuterWidth, PageXOffset, PageYOffset,
00132            Parent, Personalbar, ScreenX, ScreenY, Scrollbars, Scroll, ScrollBy,
00133            ScreenTop, ScreenLeft,
00134            ScrollTo, ScrollX, ScrollY, MoveBy, MoveTo, ResizeBy, ResizeTo, Self, _Window, Top, _Screen,
00135            Image, Option, Alert, Confirm, Prompt, Open, SetTimeout, ClearTimeout, XMLHttpRequest, XMLSerializer,
00136            Focus, Blur, Close, SetInterval, ClearInterval, CaptureEvents, ReleaseEvents,
00137            Print, AddEventListener, RemoveEventListener, SideBar,
00138            Onabort, Onblur,
00139            Onchange, Onclick, Ondblclick, Ondragdrop, Onerror, Onfocus,
00140            Onkeydown, Onkeypress, Onkeyup, Onload, Onmousedown, Onmousemove,
00141            Onmouseout, Onmouseover, Onmouseup, Onmove, Onreset, Onresize,
00142            Onselect, Onsubmit, Onunload };
00143     WindowQObject *winq;
00144   protected:
00145     enum DelayedActionId { NullAction, DelayedClose, DelayedGoHistory };
00146 
00147     Value getListener(ExecState *exec, int eventId) const;
00148     void setListener(ExecState *exec, int eventId, Value func);
00149   private:
00150     struct DelayedAction;
00151     friend struct DelayedAction;
00152 
00153     bool checkIsSafeScript( KParts::ReadOnlyPart* activePart ) const;
00154 
00155     QGuardedPtr<khtml::ChildFrame> m_frame;
00156     Screen *screen;
00157     History *history;
00158     External *external;
00159     FrameArray *m_frames;
00160     Location *loc;
00161     DOM::Event *m_evt;
00162 
00163     struct DelayedAction {
00164       DelayedAction() : actionId(NullAction) {} // for QValueList
00165       DelayedAction( DelayedActionId id, QVariant p = QVariant() ) : actionId(id), param(p) {}
00166       DelayedActionId actionId;
00167       QVariant param; // just in case
00168     };
00169     QValueList<DelayedAction> m_delayed;
00170   };
00171 
00177   class ScheduledAction {
00178   public:
00179     ScheduledAction(Object _func, List _args, QTime _nextTime, int _interval, bool _singleShot, int _timerId);
00180     ScheduledAction(QString _code, QTime _nextTime, int _interval, bool _singleShot, int _timerId);
00181     ~ScheduledAction();
00182     bool execute(Window *window);
00183     void mark();
00184 
00185     ObjectImp *func;
00186     List args;
00187     QString code;
00188     bool isFunction;
00189     bool singleShot;
00190 
00191     QTime nextTime;
00192     int interval;
00193     bool executing;
00194     int timerId;
00195   };
00196 
00197   class WindowQObject : public QObject {
00198     Q_OBJECT
00199   public:
00200     WindowQObject(Window *w);
00201     ~WindowQObject();
00202     int installTimeout(const Identifier &handler, int t, bool singleShot);
00203     int installTimeout(const Value &func, List args, int t, bool singleShot);
00204     void clearTimeout(int timerId);
00205     void mark();
00206     bool hasTimers() const;
00207   public slots:
00208     void timeoutClose();
00209   protected slots:
00210     void parentDestroyed();
00211   protected:
00212     void timerEvent(QTimerEvent *e);
00213     void setNextTimer();
00214   private:
00215     Window *parent;
00216     QPtrList<ScheduledAction> scheduledActions;
00217     int pausedTime;
00218     int lastTimerId;
00219   };
00220 
00221   class Location : public ObjectImp {
00222   public:
00223     ~Location();
00224     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
00225     virtual void put(ExecState *exec, const Identifier &propertyName, const Value &value, int attr = None);
00226     virtual Value toPrimitive(ExecState *exec, Type preferred) const;
00227     virtual UString toString(ExecState *exec) const;
00228     enum { Hash, Href, Hostname, Host, Pathname, Port, Protocol, Search, EqualEqual,
00229            Assign, Replace, Reload, ToString };
00230     KParts::ReadOnlyPart *part() const;
00231     virtual const ClassInfo* classInfo() const { return &info; }
00232     static const ClassInfo info;
00233   private:
00234     friend class Window;
00235     Location(khtml::ChildFrame *f);
00236     QGuardedPtr<khtml::ChildFrame> m_frame;
00237   };
00238 
00239 #ifdef Q_WS_QWS
00240   class Konqueror : public ObjectImp {
00241     friend class KonquerorFunc;
00242   public:
00243     Konqueror(KHTMLPart *p) : part(p) { }
00244     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
00245     virtual bool hasProperty(ExecState *exec, const Identifier &p) const;
00246     virtual UString toString(ExecState *exec) const;
00247     virtual const ClassInfo* classInfo() const { return &info; }
00248     static const ClassInfo info;
00249   private:
00250     KHTMLPart *part;
00251   };
00252 #endif
00253 
00254 } // namespace
00255 
00256 #endif
KDE Logo
This file is part of the documentation for khtml Library Version 3.4.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat Jun 11 20:33:19 2005 by doxygen 1.4.1 written by Dimitri van Heesch, © 1997-2003