khtml Library API Documentation

khtml_part.h

00001 // -*- c-basic-offset: 2 -*- 00002 /* This file is part of the KDE project 00003 * 00004 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> 00005 * 1999-2001 Lars Knoll <knoll@kde.org> 00006 * 1999-2001 Antti Koivisto <koivisto@kde.org> 00007 * 2000-2001 Simon Hausmann <hausmann@kde.org> 00008 * 2000-2001 Dirk Mueller <mueller@kde.org> 00009 * 2000 Stefan Schimanski <1Stein@gmx.de> 00010 * 00011 * This library is free software; you can redistribute it and/or 00012 * modify it under the terms of the GNU Library General Public 00013 * License as published by the Free Software Foundation; either 00014 * version 2 of the License, or (at your option) any later version. 00015 * 00016 * This library is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00019 * Library General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU Library General Public License 00022 * along with this library; see the file COPYING.LIB. If not, write to 00023 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00024 * Boston, MA 02111-1307, USA. 00025 */ 00026 #ifndef __khtml_part_h__ 00027 #define __khtml_part_h__ 00028 00029 #include "dom/html_document.h" 00030 #include "dom/dom2_range.h" 00031 00032 #include <kparts/part.h> 00033 #include <kparts/browserextension.h> 00034 #include <kdemacros.h> 00035 #include <kfinddialog.h> 00036 00037 #include <qregexp.h> 00038 00039 class KHTMLPartPrivate; 00040 class KHTMLPartBrowserExtension; 00041 class KJSProxy; 00042 class KHTMLView; 00043 class KHTMLSettings; 00044 class KJavaAppletContext; 00045 class KJSErrorDlg; 00046 00047 namespace DOM 00048 { 00049 class HTMLDocument; 00050 class HTMLDocumentImpl; 00051 class DocumentImpl; 00052 class HTMLTitleElementImpl; 00053 class HTMLElementImpl; 00054 class HTMLFrameElementImpl; 00055 class HTMLIFrameElementImpl; 00056 class HTMLObjectElementImpl; 00057 class HTMLFormElementImpl; 00058 class HTMLAnchorElementImpl; 00059 class HTMLMetaElementImpl; 00060 class NodeImpl; 00061 class Node; 00062 class HTMLEventListener; 00063 class EventListener; 00064 } 00065 00066 namespace KJS 00067 { 00068 class Interpreter; 00069 } 00070 00071 namespace khtml 00072 { 00073 class DocLoader; 00074 class RenderPart; 00075 class RenderPartObject; 00076 struct ChildFrame; 00077 class MouseEvent; 00078 class MousePressEvent; 00079 class MouseDoubleClickEvent; 00080 class MouseMoveEvent; 00081 class MouseReleaseEvent; 00082 class DrawContentsEvent; 00083 class CachedObject; 00084 class RenderWidget; 00085 class CSSStyleSelector; 00086 class HTMLTokenizer; 00087 class Decoder; 00088 class XMLTokenizer; 00089 } 00090 00091 namespace KJS { 00092 class Window; 00093 class WindowFunc; 00094 class ExternalFunc; 00095 class JSEventListener; 00096 class JSLazyEventListener; 00097 class JSNodeFilter; 00098 class DOMDocument; 00099 class SourceFile; 00100 class ScheduledAction; 00101 } 00102 00103 namespace KParts 00104 { 00105 class PartManager; 00106 class LiveConnectExtension; 00107 } 00108 00109 namespace KWallet 00110 { 00111 class Wallet; 00112 } 00113 00185 class KHTMLPart : public KParts::ReadOnlyPart 00186 { 00187 Q_OBJECT 00188 friend class KHTMLView; 00189 friend class DOM::HTMLTitleElementImpl; 00190 friend class DOM::HTMLFrameElementImpl; 00191 friend class DOM::HTMLIFrameElementImpl; 00192 friend class DOM::HTMLObjectElementImpl; 00193 friend class DOM::HTMLAnchorElementImpl; 00194 friend class DOM::HTMLMetaElementImpl; 00195 friend class DOM::NodeImpl; 00196 friend class KHTMLRun; 00197 friend class DOM::HTMLFormElementImpl; 00198 friend class khtml::RenderPartObject; 00199 friend class KJS::Window; 00200 friend class KJS::ScheduledAction; 00201 friend class KJS::JSNodeFilter; 00202 friend class KJS::WindowFunc; 00203 friend class KJS::ExternalFunc; 00204 friend class KJS::JSEventListener; 00205 friend class KJS::JSLazyEventListener; 00206 friend class KJS::DOMDocument; 00207 friend class KJS::SourceFile; 00208 friend class KJSProxy; 00209 friend class KHTMLPartBrowserExtension; 00210 friend class DOM::DocumentImpl; 00211 friend class DOM::HTMLDocumentImpl; 00212 friend class KHTMLPartBrowserHostExtension; 00213 friend class khtml::HTMLTokenizer; 00214 friend class khtml::XMLTokenizer; 00215 friend class khtml::RenderWidget; 00216 friend class khtml::CSSStyleSelector; 00217 friend class KHTMLPartIface; 00218 friend class KHTMLPartFunction; 00219 00220 Q_PROPERTY( bool javaScriptEnabled READ jScriptEnabled WRITE setJScriptEnabled ) 00221 Q_PROPERTY( bool javaEnabled READ javaEnabled WRITE setJavaEnabled ) 00222 Q_PROPERTY( bool autoloadImages READ autoloadImages WRITE setAutoloadImages ) 00223 Q_PROPERTY( bool dndEnabled READ dndEnabled WRITE setDNDEnabled ) 00224 Q_PROPERTY( bool pluginsEnabled READ pluginsEnabled WRITE setPluginsEnabled ) 00225 Q_PROPERTY( bool onlyLocalReferences READ onlyLocalReferences WRITE setOnlyLocalReferences ) 00226 Q_PROPERTY( QCString dcopObjectId READ dcopObjectId ) 00227 Q_PROPERTY( bool modified READ isModified ) 00228 00229 public: 00230 enum GUIProfile { DefaultGUI, BrowserViewGUI /* ... */ }; 00231 00244 KHTMLPart( QWidget *parentWidget = 0, const char *widgetname = 0, 00245 QObject *parent = 0, const char *name = 0, GUIProfile prof = DefaultGUI ); 00246 00247 KHTMLPart( KHTMLView *view, QObject *parent = 0, const char *name = 0, GUIProfile prof = DefaultGUI ); 00248 00252 virtual ~KHTMLPart(); 00253 00259 virtual bool openURL( const KURL &url ); 00260 00264 virtual bool closeURL(); 00265 00272 virtual void showError( KIO::Job* job ); 00273 00277 DOM::HTMLDocument htmlDocument() const; 00278 00282 DOM::Document document() const; 00283 00287 DOM::Node activeNode() const; 00288 00292 KParts::BrowserExtension *browserExtension() const; 00293 KParts::LiveConnectExtension *liveConnectExtension( const khtml::RenderPart *) const; 00294 KParts::BrowserHostExtension *browserHostExtension() const; 00295 00299 KHTMLView *view() const; 00300 00307 void setJScriptEnabled( bool enable ); 00308 00313 bool jScriptEnabled() const; 00314 00332 KJS::Interpreter *jScriptInterpreter(); 00333 00337 void setStatusMessagesEnabled( bool enable ); 00338 00342 bool statusMessagesEnabled() const; 00343 00347 void setMetaRefreshEnabled( bool enable ); 00348 00352 bool metaRefreshEnabled() const; 00353 00358 QVariant executeScript( const DOM::Node &n, const QString &script ); 00359 00364 void setDNDEnabled( bool b ); 00365 00369 bool dndEnabled() const; 00370 00377 void setJavaEnabled( bool enable ); 00378 00382 bool javaEnabled() const; 00383 00387 KJavaAppletContext *javaContext(); 00388 00393 KJavaAppletContext *createJavaContext(); 00394 00398 void setPluginsEnabled( bool enable ); 00399 00403 bool pluginsEnabled() const; 00404 00411 void setAutoloadImages( bool enable ); 00418 bool autoloadImages() const; 00419 00436 void setOnlyLocalReferences( bool enable ); 00437 00442 bool onlyLocalReferences() const; 00443 00447 bool isCaretMode() const; 00448 00453 bool isEditable() const; 00454 00468 void setCaretPosition(DOM::Node node, long offset, bool extendSelection = false); 00469 00477 enum CaretDisplayPolicy { 00478 CaretVisible, CaretInvisible, CaretBlink 00479 }; 00480 00485 CaretDisplayPolicy caretDisplayPolicyNonFocused() const; 00486 00497 void setCaretDisplayPolicyNonFocused(CaretDisplayPolicy policy); 00498 00499 #ifndef KDE_NO_COMPAT 00500 void enableJScript( bool e ) { setJScriptEnabled(e); } 00501 void enableJava( bool e ) { setJavaEnabled(e); } 00502 void enablePlugins( bool e ) { setPluginsEnabled(e); } 00503 void autoloadImages( bool e ) { setAutoloadImages(e); } 00504 void enableMetaRefresh( bool e ) { setMetaRefreshEnabled(e); } 00505 bool setCharset( const QString &, bool ) { return true; } 00506 00507 KURL baseURL() const; 00508 QString baseTarget() const; 00509 #endif 00510 00514 KURL backgroundURL() const; 00515 00519 void scheduleRedirection( int delay, const QString &url, bool lockHistory = true ); 00520 00543 virtual void begin( const KURL &url = KURL(), int xOffset = 0, int yOffset = 0 ); 00544 00565 virtual void write( const char *str, int len = -1 ); 00566 00574 virtual void write( const QString &str ); 00575 00579 virtual void end(); 00580 00581 /* 00582 * Prints the current HTML page laid out for the printer. 00583 * 00584 * (not implemented at the moment) 00585 */ 00586 // void print(QPainter *, int pageHeight, int pageWidth); 00587 00591 void paint( QPainter *, const QRect &, int = 0, bool * = 0 ); 00592 00599 bool setEncoding( const QString &name, bool override = false ); 00600 00606 QString encoding() const; 00607 00615 void setUserStyleSheet( const KURL &url ); 00616 00624 void setUserStyleSheet( const QString &styleSheet ); 00625 00626 public: 00627 00633 void setStandardFont( const QString &name ); 00634 00641 void setFixedFont( const QString &name ); 00642 00650 bool gotoAnchor( const QString &name ); 00651 00658 bool nextAnchor(); 00659 00664 bool prevAnchor(); 00665 00669 void setURLCursor( const QCursor &c ); 00670 00674 QCursor urlCursor() const; 00675 00680 enum FindOptions 00681 { 00682 FindLinksOnly = 1 * KFindDialog::MinimumUserOption, 00683 FindNoPopups = 2 * KFindDialog::MinimumUserOption 00684 //FindIncremental = 4 * KFindDialog::MinimumUserOption 00685 }; 00686 00692 void findText(); 00693 00702 void findText( const QString &str, long options, QWidget *parent = 0, 00703 KFindDialog *findDialog = 0 ); 00704 00708 void findTextBegin(); 00709 00715 bool findTextNext( const QString &str, bool forward, bool caseSensitive, bool isRegExp ); 00716 00722 bool findTextNext(); 00723 00734 void setZoomFactor(int percent); 00735 00739 int zoomFactor() const; 00740 00744 virtual QString selectedText() const; 00745 00749 DOM::Range selection() const; 00750 00762 void selection(DOM::Node &startNode, long &startOffset, 00763 DOM::Node &endNode, long &endOffset) const; 00764 00768 void setSelection( const DOM::Range & ); 00769 00778 bool hasSelection() const; 00779 00783 void selectAll(); 00784 00790 void show(); 00791 00797 void hide(); 00798 00803 KParts::PartManager *partManager(); 00804 00812 virtual void saveState( QDataStream &stream ); 00822 virtual void restoreState( QDataStream &stream ); 00823 00830 DOM::Node nodeUnderMouse() const; 00831 00840 DOM::Node nonSharedNodeUnderMouse() const; 00841 00845 const KHTMLSettings *settings() const; 00846 00853 KHTMLPart *parentPart(); 00854 00860 QStringList frameNames() const; 00861 00862 QPtrList<KParts::ReadOnlyPart> frames() const; 00863 00867 KHTMLPart *findFrame( const QString &f ); 00868 00877 KHTMLPart *findFrameParent( KParts::ReadOnlyPart *callingPart, const QString &f, khtml::ChildFrame **childFrame=0 ); 00878 00884 KParts::ReadOnlyPart *currentFrame() const; 00885 00892 bool frameExists( const QString &frameName ); 00893 00894 00900 void setJSStatusBarText( const QString &text ); 00901 00907 void setJSDefaultStatusBarText( const QString &text ); 00908 00914 QString jsStatusBarText() const; 00915 00921 QString jsDefaultStatusBarText() const; 00922 00926 QString referrer() const; 00927 00931 QString pageReferrer() const; 00932 00936 QString lastModified() const; 00937 00941 void preloadStyleSheet( const QString &url, const QString &stylesheet ); 00942 00946 void preloadScript( const QString &url, const QString &script ); 00947 00951 bool restored() const; 00952 00953 // ### KDE4 remove me 00954 enum FormNotification { NoNotification = 0, Before, Only, Unused=255 }; 00961 void setFormNotification(FormNotification fn); 00962 00969 FormNotification formNotification() const; 00970 00978 KURL toplevelURL(); 00979 00986 bool isModified() const; 00987 00988 signals: 00992 void onURL( const QString &url ); 00993 00997 void popupMenu( const QString &url, const QPoint &point ); 00998 01002 void selectionChanged(); 01003 01011 void nodeActivated( const DOM::Node & ); 01012 01015 void docCreated(); 01016 01028 void caretPositionChanged(const DOM::Node &node, long offset); 01029 01030 01037 void formSubmitNotification(const char *action, const QString& url, 01038 const QByteArray& formData, const QString& target, 01039 const QString& contentType, const QString& boundary); 01040 01041 01042 protected: 01043 01048 KURL completeURL( const QString &url ); 01049 01056 void htmlError( int errorCode, const QString& text, const KURL& reqUrl ); 01057 01058 virtual void customEvent( QCustomEvent *event ); 01059 01063 virtual void khtmlMousePressEvent( khtml::MousePressEvent *event ); 01067 virtual void khtmlMouseDoubleClickEvent( khtml::MouseDoubleClickEvent * ); 01071 virtual void khtmlMouseMoveEvent( khtml::MouseMoveEvent *event ); 01075 virtual void khtmlMouseReleaseEvent( khtml::MouseReleaseEvent *event ); 01079 virtual void khtmlDrawContentsEvent( khtml::DrawContentsEvent * ); 01080 01084 virtual void guiActivateEvent( KParts::GUIActivateEvent *event ); 01085 01089 virtual bool openFile(); 01090 01091 virtual void urlSelected( const QString &url, int button, int state, 01092 const QString &_target, KParts::URLArgs args = KParts::URLArgs()); 01093 01102 virtual KParts::ReadOnlyPart *createPart( QWidget *parentWidget, const char *widgetName, 01103 QObject *parent, const char *name, 01104 const QString &mimetype, QString &serviceName, 01105 QStringList &serviceTypes, const QStringList &params); 01106 01107 // This is for RenderPartObject. We want to ask the 'download plugin?' 01108 // question only once per mimetype 01109 bool pluginPageQuestionAsked( const QString& mimetype ) const; 01110 void setPluginPageQuestionAsked( const QString& mimetype ); 01111 01112 enum PageSecurity { NotCrypted, Encrypted, Mixed }; 01113 void setPageSecurity( PageSecurity sec ); 01114 01118 virtual bool doOpenStream( const QString& mimeType ); 01119 01123 virtual bool doWriteStream( const QByteArray& data ); 01124 01128 virtual bool doCloseStream(); 01129 01130 public slots: 01131 01141 void setActiveNode( const DOM::Node &node ); 01142 01146 void stopAnimations(); 01147 01148 QCString dcopObjectId() const; 01149 01157 QVariant executeScript( const QString &script ); 01158 01169 void setCaretMode(bool enable); 01170 01182 void setEditable(bool enable); 01183 01200 void setCaretVisible(bool show); 01201 01202 // ### KDE4 FIXME: 01203 // Remove this and make the one below protected+virtual slot. 01204 // Warning: this is effectively "internal". Be careful. 01205 // @since 3.2 01206 void submitFormProxy( const char *action, const QString &url, 01207 const QByteArray &formData, 01208 const QString &target, 01209 const QString& contentType = QString::null, 01210 const QString& boundary = QString::null ); 01211 01212 private slots: 01217 void gotoAnchor(); 01218 01222 void reparseConfiguration(); 01223 01227 void slotData( KIO::Job*, const QByteArray &data ); 01231 void slotInfoMessage( KIO::Job*, const QString& msg ); 01235 void slotRestoreData( const QByteArray &data ); 01239 void slotFinished( KIO::Job* ); 01243 void slotFinishedParsing(); 01247 void slotRedirect(); 01251 void slotRedirection( KIO::Job*, const KURL& ); 01255 void slotDebugScript(); 01259 void slotDebugDOMTree(); 01263 void slotDebugRenderTree(); 01267 void slotStopAnimations(); 01271 virtual void slotViewDocumentSource(); 01275 virtual void slotViewFrameSource(); 01279 void slotViewPageInfo(); 01283 virtual void slotSaveBackground(); 01287 virtual void slotSaveDocument(); 01291 virtual void slotSaveFrame(); 01295 virtual void slotSecurity(); 01299 virtual void slotSetEncoding(); 01300 01304 virtual void slotUseStylesheet(); 01305 01306 virtual void slotFind(); 01307 virtual void slotFindDone(); // ### remove me 01308 virtual void slotFindDialogDestroyed(); 01309 void slotFindNext(); 01310 01311 void slotIncZoom(); 01312 void slotDecZoom(); 01313 void slotIncZoomFast(); 01314 void slotDecZoomFast(); 01315 01316 void slotLoadImages(); 01317 void slotWalletClosed(); 01318 void launchWalletManager(); 01319 void walletMenu(); 01320 01324 void submitFormAgain(); 01325 01329 void updateActions(); 01333 void slotPartRemoved( KParts::Part *part ); 01337 void slotActiveFrameChanged( KParts::Part *part ); 01341 void slotChildStarted( KIO::Job *job ); 01345 void slotChildCompleted(); 01349 void slotChildCompleted( bool ); 01353 void slotParentCompleted(); 01357 void slotChildURLRequest( const KURL &url, const KParts::URLArgs &args ); 01361 void slotChildDocCreated(); 01362 01363 void slotLoaderRequestStarted( khtml::DocLoader*, khtml::CachedObject* obj); 01364 void slotLoaderRequestDone( khtml::DocLoader*, khtml::CachedObject *obj ); 01365 void checkCompleted(); 01366 01370 void slotAutoScroll(); 01371 01372 void slotPrintFrame(); 01373 01374 void slotSelectAll(); 01375 01379 void slotProgressUpdate(); 01380 01381 /* 01382 * @internal 01383 */ 01384 void slotJobPercent( KIO::Job*, unsigned long ); 01385 01386 /* 01387 * @internal 01388 */ 01389 void slotJobDone( KIO::Job* ); 01390 01391 /* 01392 * @internal 01393 */ 01394 void slotUserSheetStatDone( KIO::Job* ); 01395 01396 /* 01397 * @internal 01398 */ 01399 void slotJobSpeed( KIO::Job*, unsigned long ); 01400 01404 void slotClearSelection(); 01405 01409 void slotZoomView( int ); 01410 01414 void slotHighlight( const QString &, int index, int length ); 01415 01419 void slotAutomaticDetectionLanguage( int _id ); 01420 01424 void slotToggleCaretMode(); 01425 01429 void launchJSErrorDialog(); 01430 01434 void removeJSErrorExtension(); 01435 01439 void disableJSErrorExtension(); 01440 01444 void jsErrorDialogContextMenu(); 01445 01449 void restoreScrollPosition(); 01450 01451 private: 01452 01453 KJSErrorDlg *jsErrorExtension(); 01454 01455 enum StatusBarPriority { BarDefaultText, BarHoverText, BarOverrideText }; 01456 void setStatusBarText( const QString& text, StatusBarPriority p); 01457 01458 bool restoreURL( const KURL &url ); 01459 void emitSelectionChanged(); 01460 // Returns whether callingHtmlPart may access this part 01461 bool checkFrameAccess(KHTMLPart *callingHtmlPart); 01462 bool openURLInFrame( const KURL &url, const KParts::URLArgs &urlArgs ); 01463 void startAutoScroll(); 01464 void stopAutoScroll(); 01465 void overURL( const QString &url, const QString &target, bool shiftPressed = false ); 01466 01467 bool processObjectRequest( khtml::ChildFrame *child, const KURL &url, const QString &mimetype ); 01468 01469 KWallet::Wallet* wallet(); 01470 01474 // ### KDE4 FIXME: 01475 // It is desirable to be able to filter form submissions as well. 01476 // For instance, forms can have a target and an inheriting class 01477 // might want to filter based on the target. Make this protected 01478 // and virtual, or provide a better solution. 01479 // See the web_module for the sidebar for an example where this is 01480 // necessary. 01481 void submitForm( const char *action, const QString &url, const QByteArray &formData, 01482 const QString &target, const QString& contentType = QString::null, 01483 const QString& boundary = QString::null ); 01484 01485 void popupMenu( const QString &url ); 01486 01487 void init( KHTMLView *view, GUIProfile prof ); 01488 01489 01490 void clear(); 01491 01492 bool scheduleScript( const DOM::Node &n, const QString& script); 01493 01494 QVariant crossFrameExecuteScript(const QString& target, const QString& script); 01495 QVariant executeScheduledScript(); 01496 01497 bool requestFrame( khtml::RenderPart *frame, const QString &url, const QString &frameName, 01498 const QStringList &args = QStringList(), bool isIFrame = false ); 01499 01507 QString requestFrameName(); 01508 01509 bool requestObject( khtml::RenderPart *frame, const QString &url, const QString &serviceType, 01510 const QStringList &args = QStringList() ); 01511 01512 bool requestObject( khtml::ChildFrame *child, const KURL &url, const KParts::URLArgs &args = KParts::URLArgs() ); 01513 01514 DOM::EventListener *createHTMLEventListener( QString code, QString name ); 01515 01516 DOM::HTMLDocumentImpl *docImpl() const; 01517 DOM::DocumentImpl *xmlDocImpl() const; 01518 khtml::ChildFrame *frame( const QObject *obj ); 01519 01520 khtml::ChildFrame *recursiveFrameRequest( KHTMLPart *callingHtmlPart, const KURL &url, const KParts::URLArgs &args, bool callParent = true ); 01521 01522 bool checkLinkSecurity( const KURL &linkURL,const QString &message = QString::null, const QString &button = QString::null ); 01523 QVariant executeScript( const QString& filename, int baseLine, const DOM::Node &n, const QString& script ); 01524 01525 KJSProxy *jScript(); 01526 01527 KHTMLPart *opener(); 01528 long cacheId() const; 01529 void setOpener( KHTMLPart *_opener ); 01530 bool openedByJS(); 01531 void setOpenedByJS( bool _openedByJS ); 01532 01533 void checkEmitLoadEvent(); 01534 void emitLoadEvent(); 01535 01536 bool initFindNode( bool selection, bool reverse, bool fromCursor ); 01537 01538 void extendSelection( DOM::NodeImpl* node, long offset, DOM::Node& selectionNode, long& selectionOffset, bool right, bool paragraph ); 01548 void extendSelectionTo(int x, int y, int absX, int absY, const DOM::Node &innerNode); 01552 bool isExtendingSelection() const; 01553 khtml::Decoder *createDecoder(); 01554 01558 void zoomIn(const int stepping[], int count); 01562 void zoomOut(const int stepping[], int count); 01563 01564 void emitCaretPositionChanged(const DOM::Node &node, long offset); 01565 01566 void setDebugScript( bool enable ); 01567 01568 KHTMLPartPrivate *d; 01569 friend class KHTMLPartPrivate; 01570 }; 01571 01572 01573 #endif
KDE Logo
This file is part of the documentation for khtml Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Sep 29 09:42:27 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003