#ifndef __PARTCONTROLLER_H__ #define __PARTCONTROLLER_H__ #include "kdevpartcontroller.h" #include #include #include #include #include #include #include namespace KParts { class Part; class Factory; class PartManager; class ReadOnlyPart; class ReadWritePart; } namespace KTextEditor { class Document; class Editor; } namespace Kate { class Document; } class TQTabWidget; class TQPopupMenu; class KAction; class KToolBarPopupAction; class KRecentFilesAction; class HTMLDocumentationPart; class HistoryEntry; class KDirWatch; /** Part controler implementation. */ class PartController : public KDevPartController { Q_OBJECT public: PartController(TQWidget *toplevel); static void createInstance(TQWidget *parent); static PartController *getInstance(); ///// KDevPartController interface void setEncoding(const TQString &encoding); void editDocument(const KURL &inputUrl, int lineNum=-1, int col=-1); void splitCurrentDocument(const KURL &inputUrl, int lineNum=-1, int col=-1); void scrollToLineColumn(const KURL &url, int lineNum=-1, int col=-1, bool storeHistory = false ); void editDocumentInternal(const KURL &inputUrl, int lineNum=-1, int col=-1, bool activate = true, bool addToCurrentBuffer = false ); void integrateTextEditorPart(KTextEditor::Document* doc); void showDocument(const KURL &url, bool newWin = false); void showPart( KParts::Part* part, const TQString& name, const TQString& shortDescription ); KParts::ReadOnlyPart *partForURL(const KURL &url); KParts::ReadOnlyPart *qtDesignerPart(); KParts::Part * partForWidget( const TQWidget * widget ); void activatePart( KParts::Part * part ); bool closePart( KParts::Part * part ); KURL::List openURLs(); bool querySaveFiles(); bool saveAllFiles(); bool saveFiles( const KURL::List & list); bool saveFile( const KURL & url, bool force = false ); void revertAllFiles(); void revertFiles( const KURL::List & list ); bool closeAllFiles(); bool closeFiles( const KURL::List & list ); DocumentState documentState( KURL const & ); //////////////////////////////////////// bool readyToClose(); bool closeFile( const KURL & ); bool closeAllOthers( const KURL & ); void reloadFile( const KURL & url ); KTextEditor::Editor *openTextDocument( bool activate = true ); KParts::Factory *findPartFactory(const TQString &mimeType, const TQString &partType, const TQString &preferredName = TQString() ); public slots: void slotActivePartChanged( KParts::Part* part ); void slotCloseWindow(); void slotCloseOtherWindows(); void slotCloseAllWindows(); void slotSave(); void slotReload(); protected: ~PartController(); private slots: void slotWaitForFactoryHack(); void slotDocumentUrlChanged(); void slotSaveAllFiles(); void slotRevertAllFiles(); void slotOpenFile(); void slotOpenRecent(const KURL&); void slotBack(); void slotForward(); void slotBackAboutToShow(); void slotForwardAboutToShow(); void slotBackPopupActivated( int id ); void slotForwardPopupActivated( int id ); void slotPartAdded( KParts::Part* ); void slotPartRemoved( KParts::Part* ); void slotUploadFinished(); void updateMenuItems(); void slotDocumentDirty( Kate::Document * doc, bool isModified, unsigned char reason ); void slotDocumentDirtyStepTwo( void * ); void slotNewStatus(); void slotNewDesignerStatus(const TQString &formName, int status); void textChanged(); void gotoLastEditPos(); private: KURL findURLInProject(const KURL& url); KParts::Part* findOpenDocument(const KURL& url); void setupActions(); bool closeFilesDialog( KURL::List const & ignoreList ); bool saveFilesDialog( KURL::List const & ignoreList ); void doEmitState( KURL const & ); KTextEditor::Editor * createEditorPart( bool activate, bool addToCurrentBuffer = false, const KURL &url = KURL() ); void integratePart(KParts::Part *part, const KURL &url, TQWidget* widget = 0, bool isTextEditor=false, bool activate=true, bool addToCurrentBuffer = false ); // returns a list of modified documents KURL::List modifiedDocuments(); void clearModified( KURL::List const & filelist ); bool isDirty( KURL const & url ); bool reactToDirty( KURL const & url, unsigned char reason ); KURL storedURLForPart( KParts::ReadOnlyPart * ); void updatePartURL( KParts::ReadOnlyPart * ); bool partURLHasChanged( KParts::ReadOnlyPart * ); static PartController *s_instance; KAction *m_closeWindowAction, *m_saveAllFilesAction, *m_revertAllFilesAction; KAction *m_closeAllWindowsAction, *m_closeOtherWindowsAction; KRecentFilesAction *m_openRecentAction; TQString m_presetEncoding; KToolBarPopupAction* m_backAction; KToolBarPopupAction* m_forwardAction; KAction * m_gotoLastEditPosAction; bool m_openNextAsText; TQValueList _dirtyDocuments; TQMap< KParts::ReadOnlyPart*, KURL > _partURLMap; // used to note when a URL changes (a file changes name) TQGuardedPtr _editorFactory; struct HistoryEntry { HistoryEntry() {} HistoryEntry( const KURL & url, int line, int col ); KURL url; int line; int col; int id; }; void addHistoryEntry( KParts::ReadOnlyPart * part = 0 ); HistoryEntry createHistoryEntry( KParts::ReadOnlyPart * part = 0 ); void jumpTo( const HistoryEntry & ); TQValueList m_backHistory; TQValueList m_forwardHistory; bool m_isJumping; struct LastEditPos { KURL url; TQPair pos; LastEditPos() : pos( -1, -1) {} }; LastEditPos m_lastEditPos; KParts::Part * m_currentActivePart; bool m_removingActivePart; }; #endif