khtml Library API Documentation

khtmlpart_p.h

00001 #ifndef khtmlpart_p_h
00002 #define khtmlpart_p_h
00003 
00004 /* This file is part of the KDE project
00005  *
00006  * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
00007  *                     1999-2001 Lars Knoll <knoll@kde.org>
00008  *                     1999-2001 Antti Koivisto <koivisto@kde.org>
00009  *                     2000-2001 Simon Hausmann <hausmann@kde.org>
00010  *                     2000-2001 Dirk Mueller <mueller@kde.org>
00011  *                     2000 Stefan Schimanski <1Stein@gmx.de>
00012  *
00013  * This library is free software; you can redistribute it and/or
00014  * modify it under the terms of the GNU Library General Public
00015  * License as published by the Free Software Foundation; either
00016  * version 2 of the License, or (at your option) any later version.
00017  *
00018  * This library is distributed in the hope that it will be useful,
00019  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00021  * Library General Public License for more details.
00022  *
00023  * You should have received a copy of the GNU Library General Public License
00024  * along with this library; see the file COPYING.LIB.  If not, write to
00025  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00026  * Boston, MA 02111-1307, USA.
00027  */
00028 #include <kcursor.h>
00029 #include <kxmlguifactory.h>
00030 
00031 #include "khtml_run.h"
00032 #include "../kutils/kfind.h"
00033 #include "khtml_factory.h"
00034 #include "khtml_events.h"
00035 #include "khtml_ext.h"
00036 #include "khtml_iface.h"
00037 #include "khtml_settings.h"
00038 #include "misc/decoder.h"
00039 #include "java/kjavaappletcontext.h"
00040 #include "ecma/kjs_proxy.h"
00041 
00042 class KPopupMenu;;
00043 class KSelectAction;
00044 
00045 namespace KIO
00046 {
00047   class Job;
00048   class TransferJob;
00049 }
00050 
00051 namespace khtml
00052 {
00053   struct ChildFrame
00054   {
00055       enum Type { Frame, IFrame, Object };
00056 
00057       ChildFrame() {
00058           m_bCompleted = false; m_bPreloaded = false; m_type = Frame; m_bNotify = false;
00059           m_bPendingRedirection = false;
00060       }
00061 
00062       ~ChildFrame() { if (m_run) m_run->abort(); }
00063 
00064     QGuardedPtr<khtml::RenderPart> m_frame;
00065     QGuardedPtr<KParts::ReadOnlyPart> m_part;
00066     QGuardedPtr<KParts::BrowserExtension> m_extension;
00067     QGuardedPtr<KParts::LiveConnectExtension> m_liveconnect;
00068     QString m_serviceName;
00069     QString m_serviceType;
00070     bool m_bCompleted;
00071     QString m_name;
00072     KParts::URLArgs m_args;
00073     QGuardedPtr<KHTMLRun> m_run;
00074     bool m_bPreloaded;
00075     KURL m_workingURL;
00076     Type m_type;
00077     QStringList m_params;
00078     bool m_bNotify;
00079     bool m_bPendingRedirection;
00080   };
00081 
00082 }
00083 
00084 class FrameList : public QValueList<khtml::ChildFrame>
00085 {
00086 public:
00087     Iterator find( const QString &name );
00088 };
00089 
00090 typedef FrameList::ConstIterator ConstFrameIt;
00091 typedef FrameList::Iterator FrameIt;
00092 
00093 static int khtml_part_dcop_counter = 0;
00094 
00095 class KHTMLPartPrivate
00096 {
00097 public:
00098   KHTMLPartPrivate(QObject* parent)
00099   {
00100     m_doc = 0L;
00101     m_decoder = 0L;
00102     m_jscript = 0L;
00103     m_runningScripts = 0;
00104     m_kjs_lib = 0;
00105     m_job = 0L;
00106     m_bComplete = true;
00107     m_bLoadEventEmitted = true;
00108     m_cachePolicy = KIO::CC_Verify;
00109     m_manager = 0L;
00110     m_settings = new KHTMLSettings(*KHTMLFactory::defaultHTMLSettings());
00111     m_bClearing = false;
00112     m_bCleared = false;
00113     m_zoomFactor = 100;
00114     m_bDnd = true;
00115     m_startOffset = m_endOffset = 0;
00116     m_startBeforeEnd = true;
00117     m_linkCursor = KCursor::handCursor();
00118     m_loadedObjects = 0;
00119     m_totalObjectCount = 0;
00120     m_jobPercent = 0;
00121     m_haveEncoding = false;
00122     m_activeFrame = 0L;
00123     m_find = 0;
00124     m_ssl_in_use = false;
00125 #ifndef Q_WS_QWS
00126     m_javaContext = 0;
00127 #endif
00128     m_cacheId = 0;
00129     m_frameNameId = 1;
00130 
00131     m_restored = false;
00132 
00133     m_focusNodeNumber = -1;
00134     m_focusNodeRestored = false;
00135 
00136     m_bJScriptForce = false;
00137     m_bJScriptOverride = false;
00138     m_bJavaForce = false;
00139     m_bJavaOverride = false;
00140     m_bPluginsForce = false;
00141     m_bPluginsOverride = false;
00142     m_onlyLocalReferences = false;
00143 
00144     m_metaRefreshEnabled = true;
00145     m_bHTTPRefresh = false;
00146 
00147     m_bFirstData = true;
00148     m_submitForm = 0;
00149     m_delayRedirect = 0;
00150     m_automaticDetectionLanguage = khtml::Decoder::SemiautomaticDetection;
00151 
00152     // inherit settings from parent
00153     if(parent && parent->inherits("KHTMLPart"))
00154     {
00155         KHTMLPart* part = static_cast<KHTMLPart*>(parent);
00156         if(part->d)
00157         {
00158             m_bJScriptForce = part->d->m_bJScriptForce;
00159             m_bJScriptOverride = part->d->m_bJScriptOverride;
00160             m_bJavaForce = part->d->m_bJavaForce;
00161             m_bJavaOverride = part->d->m_bJavaOverride;
00162             m_bPluginsForce = part->d->m_bPluginsForce;
00163             m_bPluginsOverride = part->d->m_bPluginsOverride;
00164             // Same for SSL settings
00165             m_ssl_in_use = part->d->m_ssl_in_use;
00166             m_onlyLocalReferences = part->d->m_onlyLocalReferences;
00167             m_zoomFactor = part->d->m_zoomFactor;
00168             m_automaticDetectionLanguage = part->d->m_automaticDetectionLanguage;
00169         }
00170     }
00171 
00172     m_focusNodeNumber = -1;
00173     m_focusNodeRestored = false;
00174     m_opener = 0;
00175     m_openedByJS = false;
00176     m_newJSInterpreterExists = false;
00177     m_dcopobject = 0;
00178     m_jobspeed = 0;
00179     m_dcop_counter = ++khtml_part_dcop_counter;
00180   }
00181   ~KHTMLPartPrivate()
00182   {
00183     delete m_dcopobject;
00184     delete m_extension;
00185     delete m_settings;
00186     delete m_jscript;
00187     if ( m_kjs_lib)
00188        m_kjs_lib->unload();
00189 #ifndef Q_WS_QWS
00190     delete m_javaContext;
00191 #endif
00192   }
00193 
00194   FrameList m_frames;
00195   QValueList<khtml::ChildFrame> m_objects;
00196 
00197   QGuardedPtr<KHTMLView> m_view;
00198   KHTMLPartBrowserExtension *m_extension;
00199   KHTMLPartBrowserHostExtension *m_hostExtension;
00200   DOM::DocumentImpl *m_doc;
00201   khtml::Decoder *m_decoder;
00202   QString m_encoding;
00203   QString m_sheetUsed;
00204   long m_cacheId;
00205   QString scheduledScript;
00206   DOM::Node scheduledScriptNode;
00207 
00208   KJSProxy *m_jscript;
00209   KLibrary *m_kjs_lib;
00210   int m_runningScripts;
00211   bool m_bBackRightClick :1;
00212   bool m_bJScriptEnabled :1;
00213   bool m_bJScriptDebugEnabled :1;
00214   bool m_bJavaEnabled :1;
00215   bool m_bPluginsEnabled :1;
00216   bool m_bJScriptForce :1;
00217   bool m_bJScriptOverride :1;
00218   bool m_bJavaForce :1;
00219   bool m_bJavaOverride :1;
00220   bool m_bPluginsForce :1;
00221   bool m_metaRefreshEnabled :1;
00222   bool m_bPluginsOverride :1;
00223   bool m_restored :1;
00224   int m_frameNameId;
00225   int m_dcop_counter;
00226   DCOPObject *m_dcopobject;
00227 
00228 #ifndef Q_WS_QWS
00229   KJavaAppletContext *m_javaContext;
00230 #endif
00231 
00232   KHTMLSettings *m_settings;
00233 
00234   KIO::TransferJob * m_job;
00235 
00236   QString m_statusBarText[3];
00237   unsigned long m_jobspeed;
00238   QString m_lastModified;
00239   QString m_httpHeaders;
00240   QString m_pageServices;
00241 
00242   // QStrings for SSL metadata
00243   // Note: When adding new variables don't forget to update ::saveState()/::restoreState()!
00244   bool m_ssl_in_use;
00245   QString m_ssl_peer_certificate,
00246           m_ssl_peer_chain,
00247           m_ssl_peer_ip,
00248           m_ssl_cipher,
00249           m_ssl_cipher_desc,
00250           m_ssl_cipher_version,
00251           m_ssl_cipher_used_bits,
00252           m_ssl_cipher_bits,
00253           m_ssl_cert_state,
00254           m_ssl_parent_ip,
00255           m_ssl_parent_cert;
00256 
00257   bool m_bComplete:1;
00258   bool m_bLoadEventEmitted:1;
00259   bool m_haveEncoding:1;
00260   bool m_bHTTPRefresh:1;
00261   bool m_onlyLocalReferences :1;
00262   bool m_redirectLockHistory:1;
00263 
00264   KURL m_workingURL;
00265 
00266   KIO::CacheControl m_cachePolicy;
00267   QTimer m_redirectionTimer;
00268   QTime m_parsetime;
00269   int m_delayRedirect;
00270   QString m_redirectURL;
00271 
00272   KAction *m_paViewDocument;
00273   KAction *m_paViewFrame;
00274   KAction *m_paViewInfo;
00275   KAction *m_paSaveBackground;
00276   KAction *m_paSaveDocument;
00277   KAction *m_paSaveFrame;
00278   KAction *m_paSecurity;
00279   KActionMenu *m_paSetEncoding;
00280   KSelectAction *m_paUseStylesheet;
00281   KHTMLZoomFactorAction *m_paIncZoomFactor;
00282   KHTMLZoomFactorAction *m_paDecZoomFactor;
00283   KAction *m_paLoadImages;
00284   KAction *m_paFind;
00285   KAction *m_paFindNext;
00286   KAction *m_paPrintFrame;
00287   KAction *m_paSelectAll;
00288   KAction *m_paDebugDOMTree;
00289   KAction *m_paDebugRenderTree;
00290 
00291   KParts::PartManager *m_manager;
00292 
00293   QString m_popupMenuXML;
00294   KHTMLPart::GUIProfile m_guiProfile;
00295 
00296   int m_zoomFactor;
00297 
00298   QString m_strSelectedURL;
00299   QString m_strSelectedURLTarget;
00300   QString m_referrer;
00301   QString m_pageReferrer;
00302 
00303   struct SubmitForm
00304   {
00305     const char *submitAction;
00306     QString submitUrl;
00307     QByteArray submitFormData;
00308     QString target;
00309     QString submitContentType;
00310     QString submitBoundary;
00311   };
00312 
00313   SubmitForm *m_submitForm;
00314 
00315   bool m_bMousePressed;
00316   bool m_bRightMousePressed;
00317   DOM::Node m_mousePressNode; //node under the mouse when the mouse was pressed (set in the mouse handler)
00318 
00319   DOM::Node m_selectionStart;
00320   long m_startOffset;
00321   DOM::Node m_selectionEnd;
00322   long m_endOffset;
00323   QString m_overURL;
00324   QString m_overURLTarget;
00325 
00326   bool m_startBeforeEnd:1;
00327   bool m_bDnd:1;
00328   bool m_bFirstData:1;
00329   bool m_bClearing:1;
00330   bool m_bCleared:1;
00331   bool m_bSecurityInQuestion:1;
00332   bool m_focusNodeRestored:1;
00333 
00334   int m_focusNodeNumber;
00335 
00336   QPoint m_dragStartPos;
00337 #ifdef KHTML_NO_SELECTION
00338   QPoint m_dragLastPos;
00339 #endif
00340 
00341   QCursor m_linkCursor;
00342   QTimer m_scrollTimer;
00343 
00344   unsigned long m_loadedObjects;
00345   unsigned long m_totalObjectCount;
00346   unsigned int m_jobPercent;
00347 
00348   QTimer m_progressUpdateTimer;
00349 
00350   QStringList m_pluginPageQuestionAsked;
00351 
00353   struct StringPortion
00354   {
00355       // Just basic ref/deref on our node to make sure it doesn't get deleted
00356       StringPortion( int i, DOM::NodeImpl* n ) : index(i), node(n) { if (node) node->ref(); }
00357       StringPortion() : index(0), node(0) {} // for QValueList
00358       StringPortion( const StringPortion& other ) : node(0) { operator=(other); }
00359       StringPortion& operator=( const StringPortion& other ) {
00360           index=other.index;
00361           if (other.node) other.node->ref();
00362           if (node) node->deref();
00363           node=other.node;
00364           return *this;
00365       }
00366       ~StringPortion() { if (node) node->deref(); }
00367 
00368       int index;
00369       DOM::NodeImpl *node;
00370   };
00371   QValueList<StringPortion> m_stringPortions;
00372 
00373   KFind *m_find;
00374 
00375   struct findState
00376   {
00377     findState()
00378     { options = 0; }
00379     QStringList history;
00380     QString text;
00381     int options;
00382   };
00383 
00384   findState m_lastFindState;
00385 
00386   DOM::NodeImpl *m_findNode; // current node
00387   DOM::NodeImpl *m_findNodeEnd; // end node
00388   int m_findPos; // current pos in current node
00389   int m_findPosEnd; // pos in end node
00391 
00392   //QGuardedPtr<KParts::Part> m_activeFrame;
00393   KParts::Part * m_activeFrame;
00394   QGuardedPtr<KHTMLPart> m_opener;
00395   bool m_openedByJS;
00396   bool m_newJSInterpreterExists; // set to 1 by setOpenedByJS, for window.open
00397 
00398   khtml::Decoder::AutomaticDetectinonLanguage m_automaticDetectionLanguage;
00399   KPopupMenu *m_automaticDetection;
00400   KSelectAction *m_manualDetection;
00401 };
00402 
00403 #endif
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.5.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Sun Mar 20 11:20:35 2005 by doxygen 1.3.3 written by Dimitri van Heesch, © 1997-2001