/* This file is part of the KDE project Copyright (C) 1998, 1999 Torben Weis Copyright (C) 2000-2004 David Faure This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef __ko_main_window_h__ #define __ko_main_window_h__ #include #include #include #include "KoDocument.h" class TQLabel; class KoView; class KoMainWindowPrivate; class KURL; class KRecentFilesAction; class KoFilterManager; class DCOPObject; namespace KParts { class PartManager; } /** * @brief Main window for a KOffice application * * This class is used to represent a main window * of a KOffice component. Each main window contains * a menubar and some toolbars. * * @note This class does NOT need to be subclassed in your application. */ class KOFFICECORE_EXPORT KoMainWindow : public KParts::MainWindow { Q_OBJECT public: /** * Constructor. * * Initializes a KOffice main window (with its basic GUI etc.). */ KoMainWindow( TDEInstance *instance, const char *_name = 0 ); /** * Destructor. */ ~KoMainWindow(); /** * Called when a document is assigned to this mainwindow. * This creates a view for this document, makes it the active part, etc. */ virtual void setRootDocument( KoDocument *doc ); /** * This is used to handle the document used at start up before it actually * added as root document. */ void setDocToOpen( KoDocument *doc ); /** * Update caption from document info - call when document info * (title in the about page) changes. */ virtual void updateCaption(); /** * Retrieves the document that is displayed in the mainwindow. */ virtual KoDocument* rootDocument() const; virtual KoView *rootView() const; virtual KParts::PartManager *partManager(); /** * Prints the document * @param quick whether the print setup dialog is to be displayed **/ void print(bool quick); /** * The application should call this to show or hide a toolbar. * It also takes care of the corresponding action in the settings menu. */ void showToolbar( const char * tbName, bool shown ); /** * @return TRUE if the toolbar @p tbName is visible */ bool toolbarIsVisible(const char *tbName); /** * Get hold of the label in the statusbar, to write messages to it. * You can also insert other items in the status bar by using TQStatusBar::addWidget. */ TQLabel * statusBarLabel(); /** * Sets the maximum number of recent documents entries. */ void setMaxRecentItems(uint _number); /** * The document opened a URL -> store into recent documents list. */ void addRecentURL( const KURL& url ); /** * Load the desired document and show it. * @param url the URL to open * * @return TRUE on success. */ virtual bool openDocument( const KURL & url ); /** * Load the URL into this document (and make it root doc after loading) * * Special method for KoApplication::start, don't use. */ bool openDocument( KoDocument *newdoc, const KURL & url ); virtual DCOPObject * dcopObject(); /** * Reloads the recent documents list. */ void reloadRecentFileList(); /** * Updates the window caption based on the document info and path. */ virtual void updateCaption( const TQString caption, bool mod ); void updateReloadFileAction(KoDocument *doc); void updateVersionsFileAction(KoDocument *doc); signals: /** * This signal is emitted if the document has been saved successfully. */ void documentSaved(); /// This signals is emmitted before the save dialog is shown void saveDialogShown(); public slots: /** * Slot for eMailing the document using KMail * * This is a very simple extension that will allow any document * that is currently being edited to be emailed using KMail. */ void slotEmailFile(); /** * Slot for opening a new document. * * If the current document is empty, the new document replaces it. * If not, a new shell will be opened for showing the document. */ virtual void slotFileNew(); /** * Slot for opening a saved file. * * If the current document is empty, the opened document replaces it. * If not a new shell will be opened for showing the opened file. */ virtual void slotFileOpen(); /** * Slot for opening a file among the recently opened files. * * If the current document is empty, the opened document replaces it. * If not a new shell will be opened for showing the opened file. */ virtual void slotFileOpenRecent( const KURL & ); /** * Saves the current document with the current name. */ virtual void slotFileSave(); /** * Saves the current document with a new name. */ virtual void slotFileSaveAs(); /** * Prints the actual document. */ virtual void slotFilePrint(); /** * Show a print preview */ void slotFilePrintPreview(); // make virtual later /** * Show a dialog with author and document information. */ virtual void slotDocumentInfo(); /** * Closes the document. */ virtual void slotFileClose(); /** * Closes the shell. */ virtual void slotFileQuit(); /** * Configure key bindings. */ virtual void slotConfigureKeys(); /** * Configure toolbars. */ virtual void slotConfigureToolbars(); /** * Post toolbar config. * (Plug action lists back in, etc.) */ virtual void slotNewToolbarConfig(); /** * Shows or hides a toolbar */ virtual void slotToolbarToggled( bool toggle ); /** * View splitting stuff */ virtual void slotSplitView(); virtual void slotRemoveView(); virtual void slotSetOrientation(); /** * Close all views */ virtual void slotCloseAllViews(); /** * Reload file */ void slotReloadFile(); /** * This will call a dialogbox to add version to list of files */ void slotVersionsFile(); /** * File --> Import * * This will call slotFileOpen(). To differentiate this from an ordinary * call to slotFileOpen() call @ref isImporting(). */ void slotImportFile(); /** * File --> Export * * This will call slotFileSaveAs(). To differentiate this from an ordinary * call to slotFileSaveAs() call @ref isExporting(). */ void slotExportFile(); protected: // protected methods are mostly for koshell, it's the only one deriving from KoMainWindow /// Helper method for slotFileNew and slotFileClose void chooseNewDocument( int /*KoDocument::InitDocFlags*/ initDocFlags ); /** * Special method for KOShell, to allow switching the root * document (and its views) among a set of them. */ void setRootDocumentDirect( KoDocument *doc, const TQPtrList & views ); /** * Create a new empty document. */ virtual KoDocument* createDoc() const; /** * Saves the document, asking for a filename if necessary. * * @param saveas if set to TRUE the user is always prompted for a filename * * @param silent if set to TRUE rootDocument()->setTitleModified will not be called. * * @return TRUE on success, false on error or cancel * (don't display anything in this case, the error dialog box is also implemented here * but restore the original URL in slotFileSaveAs) */ virtual bool saveDocument( bool saveas = false, bool silent = false ); virtual void closeEvent( TQCloseEvent * e ); virtual void resizeEvent( TQResizeEvent * e ); /** * Ask user about saving changes to the document upon exit. */ virtual bool queryClose(); virtual bool openDocumentInternal( const KURL & url, KoDocument * newdoc = 0L ); /** * Returns whether or not the current slotFileSave[As]() or saveDocument() * call is actually an export operation (like File --> Export). * * If this is true, you must call KoDocument::export() instead of * KoDocument::save() or KoDocument::saveAs(), in any reimplementation of * saveDocument(). */ bool isExporting() const; /** * Returns whether or not the current slotFileOpen() or openDocument() * call is actually an import operation (like File --> Import). * * If this is true, you must call KoDocument::import() instead of * KoDocument::openURL(), in any reimplementation of openDocument() or * openDocumentInternal(). */ bool isImporting() const; /** * Save the list of recent files. */ void saveRecentFiles(); KRecentFilesAction *recentAction() const { return m_recent; } private: /** * Asks the user if they really want to save the document. * Called only if outputFormat != nativeFormat. * * @return true if the document should be saved */ bool exportConfirmation( const TQCString &outputFormat ); void saveWindowSettings(); KRecentFilesAction *m_recent; protected slots: virtual void slotActivePartChanged( KParts::Part *newPart ); private slots: void slotProgress(int value); void slotLoadCompleted(); void slotLoadCanceled (const TQString &); void slotSaveCompleted(); void slotSaveCanceled(const TQString &); private: KoMainWindowPrivate *d; }; #endif