00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef __tdehtml_part_h__
00027 #define __tdehtml_part_h__
00028
00029 #include "dom/html_document.h"
00030 #include "dom/dom2_range.h"
00031
00032 #include <tdeparts/part.h>
00033 #include <tdeparts/browserextension.h>
00034 #include <kdemacros.h>
00035 #include <kfinddialog.h>
00036
00037 #include <tqregexp.h>
00038
00039 class TDEHTMLPartPrivate;
00040 class TDEHTMLPartBrowserExtension;
00041 class KJSProxy;
00042 class TDEHTMLView;
00043 class TDEHTMLSettings;
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 tdehtml
00072 {
00073 class DocLoader;
00074 class RenderPart;
00075 class RenderPartObject;
00076 class 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 TDEWallet
00110 {
00111 class Wallet;
00112 }
00113
00184 class TDEHTML_EXPORT TDEHTMLPart : public KParts::ReadOnlyPart
00185 {
00186 Q_OBJECT
00187 friend class TDEHTMLView;
00188 friend class DOM::HTMLTitleElementImpl;
00189 friend class DOM::HTMLFrameElementImpl;
00190 friend class DOM::HTMLIFrameElementImpl;
00191 friend class DOM::HTMLObjectElementImpl;
00192 friend class DOM::HTMLAnchorElementImpl;
00193 friend class DOM::HTMLMetaElementImpl;
00194 friend class DOM::NodeImpl;
00195 friend class TDEHTMLRun;
00196 friend class DOM::HTMLFormElementImpl;
00197 friend class tdehtml::RenderPartObject;
00198 friend class KJS::Window;
00199 friend class KJS::ScheduledAction;
00200 friend class KJS::JSNodeFilter;
00201 friend class KJS::WindowFunc;
00202 friend class KJS::ExternalFunc;
00203 friend class KJS::JSEventListener;
00204 friend class KJS::JSLazyEventListener;
00205 friend class KJS::DOMDocument;
00206 friend class KJS::SourceFile;
00207 friend class KJSProxy;
00208 friend class TDEHTMLPartBrowserExtension;
00209 friend class DOM::DocumentImpl;
00210 friend class DOM::HTMLDocumentImpl;
00211 friend class TDEHTMLPartBrowserHostExtension;
00212 friend class tdehtml::HTMLTokenizer;
00213 friend class tdehtml::XMLTokenizer;
00214 friend class tdehtml::RenderWidget;
00215 friend class tdehtml::CSSStyleSelector;
00216 friend class TDEHTMLPartIface;
00217 friend class TDEHTMLPartFunction;
00218 friend class TDEHTMLPopupGUIClient;
00219
00220 TQ_PROPERTY( bool javaScriptEnabled READ jScriptEnabled WRITE setJScriptEnabled )
00221 TQ_PROPERTY( bool javaEnabled READ javaEnabled WRITE setJavaEnabled )
00222 TQ_PROPERTY( bool autoloadImages READ autoloadImages WRITE setAutoloadImages )
00223 TQ_PROPERTY( bool dndEnabled READ dndEnabled WRITE setDNDEnabled )
00224 TQ_PROPERTY( bool pluginsEnabled READ pluginsEnabled WRITE setPluginsEnabled )
00225
00226
00227
00228
00229
00230
00231 TQ_PROPERTY( TQCString dcopObjectId READ dcopObjectId )
00232 TQ_PROPERTY( bool modified READ isModified )
00233
00234 public:
00235 enum GUIProfile { DefaultGUI, BrowserViewGUI };
00236
00249 TDEHTMLPart( TQWidget *parentWidget = 0, const char *widgetname = 0,
00250 TQObject *parent = 0, const char *name = 0, GUIProfile prof = DefaultGUI );
00251
00252 TDEHTMLPart( TDEHTMLView *view, TQObject *parent = 0, const char *name = 0, GUIProfile prof = DefaultGUI );
00253
00257 virtual ~TDEHTMLPart();
00258
00264 virtual bool openURL( const KURL &url );
00265
00269 virtual bool closeURL();
00270
00277 virtual void showError( TDEIO::Job* job );
00278
00282 DOM::HTMLDocument htmlDocument() const;
00283
00287 DOM::Document document() const;
00288
00293 TQString documentSource() const;
00294
00298 DOM::Node activeNode() const;
00299
00303 KParts::BrowserExtension *browserExtension() const;
00304 KParts::LiveConnectExtension *liveConnectExtension( const tdehtml::RenderPart *) const;
00305 KParts::BrowserHostExtension *browserHostExtension() const;
00306
00310 TDEHTMLView *view() const;
00311
00318 void setJScriptEnabled( bool enable );
00319
00324 bool jScriptEnabled() const;
00325
00343 KJS::Interpreter *jScriptInterpreter();
00344
00356 void setStatusMessagesEnabled( bool enable );
00357
00361 bool statusMessagesEnabled() const;
00362
00366 void setMetaRefreshEnabled( bool enable );
00367
00371 bool metaRefreshEnabled() const;
00372
00377 TQVariant executeScript( const DOM::Node &n, const TQString &script );
00378
00383 void setDNDEnabled( bool b );
00384
00388 bool dndEnabled() const;
00389
00396 void setJavaEnabled( bool enable );
00397
00401 bool javaEnabled() const;
00402
00406 KJavaAppletContext *javaContext();
00407
00412 KJavaAppletContext *createJavaContext();
00413
00417 void setPluginsEnabled( bool enable );
00418
00422 bool pluginsEnabled() const;
00423
00430 void setAutoloadImages( bool enable );
00437 bool autoloadImages() const;
00438
00455 void setOnlyLocalReferences( bool enable );
00456
00461 bool onlyLocalReferences() const;
00462
00466 bool isCaretMode() const;
00467
00472 bool isEditable() const;
00473
00487 void setCaretPosition(DOM::Node node, long offset, bool extendSelection = false);
00488
00496 enum CaretDisplayPolicy {
00497 CaretVisible, CaretInvisible, CaretBlink
00498 };
00499
00504 CaretDisplayPolicy caretDisplayPolicyNonFocused() const;
00505
00516 void setCaretDisplayPolicyNonFocused(CaretDisplayPolicy policy);
00517
00518 #ifndef KDE_NO_COMPAT
00519 void enableJScript( bool e ) { setJScriptEnabled(e); }
00520 void enableJava( bool e ) { setJavaEnabled(e); }
00521 void enablePlugins( bool e ) { setPluginsEnabled(e); }
00522 void autoloadImages( bool e ) { setAutoloadImages(e); }
00523 void enableMetaRefresh( bool e ) { setMetaRefreshEnabled(e); }
00524 bool setCharset( const TQString &, bool ) { return true; }
00525
00526 KURL baseURL() const;
00527 TQString baseTarget() const;
00528 #endif
00529
00533 KURL backgroundURL() const;
00534
00538 void scheduleRedirection( int delay, const TQString &url, bool lockHistory = true );
00539
00562 virtual void begin( const KURL &url = KURL(), int xOffset = 0, int yOffset = 0 );
00563
00584 virtual void write( const char *str, int len = -1 );
00585
00593 virtual void write( const TQString &str );
00594
00598 virtual void end();
00599
00600
00601
00602
00603
00604
00605
00606
00610 void paint( TQPainter *, const TQRect &, int = 0, bool * = 0 );
00611
00618 bool setEncoding( const TQString &name, bool override = false );
00619
00625 TQString encoding() const;
00626
00636 void setUserStyleSheet( const KURL &url );
00637
00647 void setUserStyleSheet( const TQString &styleSheet );
00648
00649 public:
00650
00656 void setStandardFont( const TQString &name );
00657
00664 void setFixedFont( const TQString &name );
00665
00673 bool gotoAnchor( const TQString &name );
00674
00681 bool nextAnchor();
00682
00687 bool prevAnchor();
00688
00692 void setURLCursor( const TQCursor &c );
00693
00697 TQCursor urlCursor() const;
00698
00703 enum FindOptions
00704 {
00705 FindLinksOnly = 1 * KFindDialog::MinimumUserOption,
00706 FindNoPopups = 2 * KFindDialog::MinimumUserOption
00707
00708 };
00709
00715 void findText();
00716
00725 void findText( const TQString &str, long options, TQWidget *parent = 0,
00726 KFindDialog *findDialog = 0 );
00727
00731 void findTextBegin();
00732
00738 bool findTextNext( const TQString &str, bool forward, bool caseSensitive, bool isRegExp );
00739
00745 bool findTextNext();
00746
00753
00754 bool findTextNext( bool reverse );
00755
00766 void setZoomFactor(int percent);
00767
00771 int zoomFactor() const;
00772
00776 virtual TQString selectedText() const;
00777
00786 TQString selectedTextAsHTML() const;
00787
00791 DOM::Range selection() const;
00792
00804 void selection(DOM::Node &startNode, long &startOffset,
00805 DOM::Node &endNode, long &endOffset) const;
00806
00810 void setSelection( const DOM::Range & );
00811
00820 bool hasSelection() const;
00821
00825 void selectAll();
00826
00832 void show();
00833
00839 void hide();
00840
00845 KParts::PartManager *partManager();
00846
00854 virtual void saveState( TQDataStream &stream );
00864 virtual void restoreState( TQDataStream &stream );
00865
00872 DOM::Node nodeUnderMouse() const;
00873
00882 DOM::Node nonSharedNodeUnderMouse() const;
00883
00887 const TDEHTMLSettings *settings() const;
00888
00895 TDEHTMLPart *parentPart();
00896
00902 TQStringList frameNames() const;
00903
00904 TQPtrList<KParts::ReadOnlyPart> frames() const;
00905
00909 TDEHTMLPart *findFrame( const TQString &f );
00910
00919 TDEHTMLPart *findFrameParent( KParts::ReadOnlyPart *callingPart, const TQString &f, tdehtml::ChildFrame **childFrame=0 );
00920
00926 KParts::ReadOnlyPart *currentFrame() const;
00927
00934 bool frameExists( const TQString &frameName );
00935
00939 KJSProxy *framejScript(KParts::ReadOnlyPart *framePart);
00940
00944 KParts::ReadOnlyPart *findFramePart( const TQString &f );
00950 void setJSStatusBarText( const TQString &text );
00951
00957 void setJSDefaultStatusBarText( const TQString &text );
00958
00964 TQString jsStatusBarText() const;
00965
00971 TQString jsDefaultStatusBarText() const;
00972
00976 TQString referrer() const;
00977
00981 TQString pageReferrer() const;
00982
00986 TQString lastModified() const;
00987
00991 void preloadStyleSheet( const TQString &url, const TQString &stylesheet );
00992
00996 void preloadScript( const TQString &url, const TQString &script );
00997
01001 bool restored() const;
01002
01003
01004 enum FormNotification { NoNotification = 0, Before, Only, Unused=255 };
01011 void setFormNotification(FormNotification fn);
01012
01019 FormNotification formNotification() const;
01020
01028 KURL toplevelURL();
01029
01036 bool isModified() const;
01037
01043 void setSuppressedPopupIndicator( bool enable );
01044
01049 void setSuppressedPopupIndicator( bool enable, TDEHTMLPart *originPart );
01050
01055 bool inProgress() const;
01056
01057 signals:
01061 void onURL( const TQString &url );
01062
01066 void popupMenu( const TQString &url, const TQPoint &point );
01067
01071 void selectionChanged();
01072
01080 void nodeActivated( const DOM::Node & );
01081
01084 void docCreated();
01085
01097 void caretPositionChanged(const DOM::Node &node, long offset);
01098
01099
01106 void formSubmitNotification(const char *action, const TQString& url,
01107 const TQByteArray& formData, const TQString& target,
01108 const TQString& contentType, const TQString& boundary);
01109
01110
01111 protected:
01112
01117 KURL completeURL( const TQString &url );
01118
01125 void htmlError( int errorCode, const TQString& text, const KURL& reqUrl );
01126
01127 virtual void customEvent( TQCustomEvent *event );
01128
01132 virtual void tdehtmlMousePressEvent( tdehtml::MousePressEvent *event );
01136 virtual void tdehtmlMouseDoubleClickEvent( tdehtml::MouseDoubleClickEvent * );
01140 virtual void tdehtmlMouseMoveEvent( tdehtml::MouseMoveEvent *event );
01144 virtual void tdehtmlMouseReleaseEvent( tdehtml::MouseReleaseEvent *event );
01148 virtual void tdehtmlDrawContentsEvent( tdehtml::DrawContentsEvent * );
01149
01153 virtual void guiActivateEvent( KParts::GUIActivateEvent *event );
01154
01158 virtual bool openFile();
01159
01160 virtual void urlSelected( const TQString &url, int button, int state,
01161 const TQString &_target, KParts::URLArgs args = KParts::URLArgs());
01162
01171 virtual KParts::ReadOnlyPart *createPart( TQWidget *parentWidget, const char *widgetName,
01172 TQObject *parent, const char *name,
01173 const TQString &mimetype, TQString &serviceName,
01174 TQStringList &serviceTypes, const TQStringList ¶ms);
01175
01176
01177
01178 bool pluginPageQuestionAsked( const TQString& mimetype ) const;
01179 void setPluginPageQuestionAsked( const TQString& mimetype );
01180
01181 enum PageSecurity { NotCrypted, Encrypted, Mixed };
01182 void setPageSecurity( PageSecurity sec );
01183
01187 virtual bool doOpenStream( const TQString& mimeType );
01188
01192 virtual bool doWriteStream( const TQByteArray& data );
01193
01197 virtual bool doCloseStream();
01198
01199 public slots:
01200
01210 void setActiveNode( const DOM::Node &node );
01211
01215 void stopAnimations();
01216
01217 TQCString dcopObjectId() const;
01218
01226 TQVariant executeScript( const TQString &script );
01227
01238 void setCaretMode(bool enable);
01239
01251 void setEditable(bool enable);
01252
01269 void setCaretVisible(bool show);
01270
01271
01272
01273
01274
01275 void submitFormProxy( const char *action, const TQString &url,
01276 const TQByteArray &formData,
01277 const TQString &target,
01278 const TQString& contentType = TQString::null,
01279 const TQString& boundary = TQString::null );
01280
01281 private slots:
01282
01286 void reparseConfiguration();
01287
01291 void slotData( TDEIO::Job*, const TQByteArray &data );
01295 void slotInfoMessage( TDEIO::Job*, const TQString& msg );
01299 void slotRestoreData( const TQByteArray &data );
01303 void slotFinished( TDEIO::Job* );
01307 void slotFinishedParsing();
01311 void slotRedirect();
01315 void slotRedirection( TDEIO::Job*, const KURL& );
01319 void slotDebugScript();
01323 void slotDebugDOMTree();
01327 void slotDebugRenderTree();
01331 void slotStopAnimations();
01335 virtual void slotViewDocumentSource();
01339 virtual void slotViewFrameSource();
01343 void slotViewPageInfo();
01347 virtual void slotSaveBackground();
01351 virtual void slotSaveDocument();
01355 virtual void slotSaveFrame();
01359 virtual void slotSecurity();
01363 virtual void slotSetEncoding();
01364
01368 virtual void slotUseStylesheet();
01369
01370 virtual void slotFind();
01371 virtual void slotFindDone();
01372 virtual void slotFindDialogDestroyed();
01373 void slotFindNext();
01374 void slotFindPrev();
01375 void slotFindAheadText();
01376 void slotFindAheadLink();
01377
01378 void slotIncZoom();
01379 void slotDecZoom();
01380 void slotIncZoomFast();
01381 void slotDecZoomFast();
01382
01383 void slotLoadImages();
01384 void slotWalletClosed();
01385 void launchWalletManager();
01386 void walletMenu();
01387
01391 void submitFormAgain();
01392
01396 void updateActions();
01400 void slotPartRemoved( KParts::Part *part );
01404 void slotActiveFrameChanged( KParts::Part *part );
01408 void slotChildStarted( TDEIO::Job *job );
01412 void slotChildCompleted();
01416 void slotChildCompleted( bool );
01420 void slotParentCompleted();
01424 void slotChildURLRequest( const KURL &url, const KParts::URLArgs &args );
01428 void slotChildDocCreated();
01432 void slotRequestFocus( KParts::ReadOnlyPart * );
01433 void slotLoaderRequestStarted( tdehtml::DocLoader*, tdehtml::CachedObject* obj);
01434 void slotLoaderRequestDone( tdehtml::DocLoader*, tdehtml::CachedObject *obj );
01435 void checkCompleted();
01436
01440 void slotAutoScroll();
01441
01442 void slotPrintFrame();
01443
01444 void slotSelectAll();
01445
01449 void slotProgressUpdate();
01450
01451
01452
01453
01454 void slotJobPercent( TDEIO::Job*, unsigned long );
01455
01456
01457
01458
01459 void slotJobDone( TDEIO::Job* );
01460
01461
01462
01463
01464 void slotUserSheetStatDone( TDEIO::Job* );
01465
01466
01467
01468
01469 void slotJobSpeed( TDEIO::Job*, unsigned long );
01470
01474 void slotClearSelection();
01475
01479 void slotZoomView( int );
01480
01484 void slotHighlight( const TQString &, int index, int length );
01485
01489 void slotAutomaticDetectionLanguage( int _id );
01490
01494 void slotToggleCaretMode();
01495
01499 void suppressedPopupMenu();
01500
01504 void togglePopupPassivePopup();
01505
01509 void showSuppressedPopups();
01510
01514 void launchJSConfigDialog();
01515
01519 void launchJSErrorDialog();
01520
01524 void removeJSErrorExtension();
01525
01529 void disableJSErrorExtension();
01530
01534 void jsErrorDialogContextMenu();
01535
01541 void restoreScrollPosition();
01542
01543 void walletOpened(TDEWallet::Wallet*);
01544
01545 private:
01546
01547 KJSErrorDlg *jsErrorExtension();
01548
01549 enum StatusBarPriority { BarDefaultText, BarHoverText, BarOverrideText };
01550 void setStatusBarText( const TQString& text, StatusBarPriority p);
01551
01552 bool restoreURL( const KURL &url );
01553 void resetFromScript();
01554 void emitSelectionChanged();
01555
01556 bool checkFrameAccess(TDEHTMLPart *callingHtmlPart);
01557 bool openURLInFrame( const KURL &url, const KParts::URLArgs &urlArgs );
01558 bool urlSelectedIntern( const TQString &url, int button, int state,
01559 const TQString &_target, KParts::URLArgs args = KParts::URLArgs());
01560 void startAutoScroll();
01561 void stopAutoScroll();
01562 void overURL( const TQString &url, const TQString &target, bool shiftPressed = false );
01563 void resetHoverText();
01564
01565 bool processObjectRequest( tdehtml::ChildFrame *child, const KURL &url, const TQString &mimetype );
01566
01567 TDEWallet::Wallet* wallet();
01568
01569 void openWallet(DOM::HTMLFormElementImpl*);
01570 void saveToWallet(const TQString& key, const TQMap<TQString,TQString>& data);
01571 void dequeueWallet(DOM::HTMLFormElementImpl*);
01572
01573 void enableFindAheadActions(bool);
01574
01578
01579
01580
01581
01582
01583
01584
01585 void submitForm( const char *action, const TQString &url, const TQByteArray &formData,
01586 const TQString &target, const TQString& contentType = TQString::null,
01587 const TQString& boundary = TQString::null );
01588
01589 void popupMenu( const TQString &url );
01590
01591 void init( TDEHTMLView *view, GUIProfile prof );
01592
01593
01594 void clear();
01595
01596 bool scheduleScript( const DOM::Node &n, const TQString& script);
01597
01598 TQVariant crossFrameExecuteScript(const TQString& target, const TQString& script);
01599 TQVariant executeScheduledScript();
01600
01601 bool requestFrame( tdehtml::RenderPart *frame, const TQString &url, const TQString &frameName,
01602 const TQStringList &args = TQStringList(), bool isIFrame = false );
01603
01611 TQString requestFrameName();
01612
01613 bool requestObject( tdehtml::RenderPart *frame, const TQString &url, const TQString &serviceType,
01614 const TQStringList &args = TQStringList() );
01615
01616 bool requestObject( tdehtml::ChildFrame *child, const KURL &url, const KParts::URLArgs &args = KParts::URLArgs() );
01617
01618 DOM::EventListener *createHTMLEventListener( TQString code, TQString name, DOM::NodeImpl *node );
01619
01620 DOM::HTMLDocumentImpl *docImpl() const;
01621 DOM::DocumentImpl *xmlDocImpl() const;
01622 tdehtml::ChildFrame *frame( const TQObject *obj );
01623
01624 tdehtml::ChildFrame *recursiveFrameRequest( TDEHTMLPart *callingHtmlPart, const KURL &url, const KParts::URLArgs &args, bool callParent = true );
01625
01626 bool checkLinkSecurity( const KURL &linkURL,const TQString &message = TQString::null, const TQString &button = TQString::null );
01627 TQVariant executeScript( const TQString& filename, int baseLine, const DOM::Node &n, const TQString& script );
01628
01629 KJSProxy *jScript();
01630
01631 TDEHTMLPart *opener();
01632 long cacheId() const;
01633 void setOpener( TDEHTMLPart *_opener );
01634 bool openedByJS();
01635 void setOpenedByJS( bool _openedByJS );
01636
01637 void checkEmitLoadEvent();
01638 void emitLoadEvent();
01639
01640 bool initFindNode( bool selection, bool reverse, bool fromCursor );
01641
01642 void extendSelection( DOM::NodeImpl* node, long offset, DOM::Node& selectionNode, long& selectionOffset, bool right, bool paragraph );
01652 void extendSelectionTo(int x, int y, int absX, int absY, const DOM::Node &innerNode);
01656 bool isExtendingSelection() const;
01657 tdehtml::Decoder *createDecoder();
01658 TQString defaultEncoding() const;
01659
01661 TQString defaultExtension() const;
01662
01666 void zoomIn(const int stepping[], int count);
01670 void zoomOut(const int stepping[], int count);
01671
01672 void emitCaretPositionChanged(const DOM::Node &node, long offset);
01673
01674 void setDebugScript( bool enable );
01675
01676 void runAdFilter();
01677
01678 TDEHTMLPartPrivate *d;
01679 friend class TDEHTMLPartPrivate;
01680 };
01681
01682
01683 #endif