# A.3. kscribble.h

       1 /***************************************************************************
       2                           kscribble.h  -  description
       3                              -------------------
       4     begin                : Mon Jan 31 11:05:05 CET 2000
       5     copyright            : (C) 2000 by Ralf Nolden
       6     email                : Ralf.Nolden@post.rwth-aachen.de
       7  ***************************************************************************/
       8
       9 /***************************************************************************
      10  *                                                                         *
      11  *   This program is free software; you can redistribute it and/or modify  *
      12  *   it under the terms of the GNU General Public License as published by  *
      13  *   the Free Software Foundation; either version 2 of the License, or     *
      14  *   (at your option) any later version.                                   *
      15  *                                                                         *
      16  ***************************************************************************/
      17
      18 #ifndef KSCRIBBLE_H
      19 #define KSCRIBBLE_H
      20
      21
      22 #ifdef HAVE_CONFIG_H
      23 #include <config.h>
      24 #endif
      25
      26 // include files for Qt
      27 #include <qstrlist.h>
      28 #include <qworkspace.h>
      29
      30 // include files for KDE
      31 #include <kapp.h>
      32 #include <ktmainwindow.h>
      33 #include <kaccel.h>
      34 #include <kimgio.h>
      35
      36 // forward declaration of the KScribble classes
      37 class KScribbleDoc;
      38 class KScribbleView;
      39
      40 /**
      41   * The base class for KScribble application windows. It sets up the main
      42   * window and reads the config file as well as providing a menubar, toolbar
      43   * and statusbar. In initView(), your main view is created as the MDI child window manager.
      44   * Child windows are created in createClient(), which gets a document instance as it's document to
      45   * display whereby one document can have several views.The MDI child is an instance of KScribbleView,
      46   * the document an instance of KScribbleDoc.
      47   * KScribbleApp reimplements the methods that KTMainWindow provides for main window handling and supports
      48   * full session management as well as keyboard accelerator configuration by using KAccel.
      49   * @see KTMainWindow
      50   * @see KApplication
      51   * @see KConfig
      52   * @see KAccel
      53   *
      54   * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team.
      55   * @version KDevelop version 1.1 code generation
      56   */
      57 class KScribbleApp : public KTMainWindow
      58 {
      59   Q_OBJECT
      60
      61   public:
      62     /** construtor of KScribbleApp, calls all init functions to create the application.
      63      *  @see initMenuBar initToolBar
      64      */
      65     KScribbleApp();
      66     ~KScribbleApp();
      67     /** enables menuentries/toolbar items
      68      */
      69     void enableCommand(int id_);
      70     /** disables menuentries/toolbar items
      71      */
      72     void disableCommand(int id_);
      73     /** opens a file specified by commandline option
      74      */
      75     void openDocumentFile(const char *file=0);
      76
      77   protected:
      78     /** queryClose is called by KTMainWindow on each closeEvent of a window. Against the
      79      *  default implementation (only returns true), this overridden function retrieves all modified documents
      80      *  from the open document list and asks the user to select which files to save before exiting the application.
      81      *  @see KTMainWindow#queryClose
      82      *  @see KTMainWindow#closeEvent
      83      */
      84     virtual bool queryClose();
      85     /** queryExit is called by KTMainWindow when the last window of the application is going to be closed
      86      *  during the closeEvent().
      87      *  Against the default implementation that just returns true, this calls saveOptions() to save the
      88      *  settings of the last window's properties.
      89      *  @see KTMainWindow#queryExit
      90      *  @see KTMainWindow#closeEvent
      91      */
      92     virtual bool queryExit();
      93     /** saves the window properties for each open window during session end to the session config file,
      94      *  including saving the currently opened file by a temporary filename provided by KApplication.
      95      *  @see KTMainWindow#saveProperties
      96      */
      97     virtual void saveProperties(KConfig *_cfg);
      98     /** reads the session config file and restores the application's state including the last
      99      *  opened files and documents by reading the temporary files saved by saveProperties()
     100      *  @see KTMainWindow#readProperties
     101      */
     102     virtual void readProperties(KConfig *_cfg);
     103     /** event filter to catch close events for MDI child windows and is installed in createClient() on every
     104       * child window. Closing a window calls the eventFilter first which removes the view from the connected
     105       * documents' view list. If the last view is going to be closed, the eventFilter() tests if the document
     106       * is modified; if yes, it asks the user to save the document. If the document title contains "Untitled",
     107       * slotFileSaveAs() gets called to get a save name and path.
     108       */
     109     virtual bool eventFilter(QObject* object, QEvent* event);
     110     /** creates a new child window. The document that will be connected to it
     111      *  has to be created before and the instances filled, with e.g. openDocument().
     112      *  Then call createClient() to get a new MDI child window.
     113      *  @see KScribbleDoc#addView
     114      *  @see KScribbleDoc#openDocument
     115      *  @param doc pointer to the document instance that the view will
     116      *  be connected to.
     117      */
     118     void createClient(KScribbleDoc* doc);
     119     /** accepts drag events for images */
     120     virtual void dragEnterEvent( QDragEnterEvent* );
     121     /** accepts drops and opens a new document
     122      *  for each drop */
     123     virtual void dropEvent( QDropEvent* );
     124
     125   private slots:
     126     /** sets the main application window title each time the active MDI child window changes. */
     127     void setWndTitle(QWidget*);
     128     /** switch argument for slot selection by menu or toolbar ID */
     129     void commandCallback(int id_);
     130     /** switch argument for Statusbar help entries on slot selection. Add your ID's help
     131      *  here for toolbars and menubar entries. */
     132     void statusCallback(int id_);
     133     /** add a opened file to the recent file list and update recent file menu*/
     134     void addRecentFile(const QString &&;file);
     135     /** clears the document in the actual view to reuse it as the new document */
     136     void slotFileNew();
     137     /** open a file and load it into the document*/
     138     void slotFileOpen();
     139     /** opens a file from the recent files menu */
     140     void slotFileOpenRecent(int id_);
     141     /** save a document */
     142     void slotFileSave();
     143     /** save a document by a new filename*/
     144     void slotFileSaveAs();
     145     /** asks for saving if the file is modified, then closes the actual file and window*/
     146     void slotFileClose();
     147     /** print the actual file */
     148     void slotFilePrint();
     149     /** closes all documents and quits the application.*/
     150     void slotFileQuit();
     151     /** reverts the last user action for the active window */
     152     void slotEditUndo();
     153     /** put the marked text/object into the clipboard and remove
     154      *  it from the document
     155      */
     156     void slotEditCut();
     157     /** put the marked text/object into the clipboard
     158      */
     159     void slotEditCopy();
     160     /** paste the clipboard into the document
     161      */
     162     void slotEditPaste();
     163     /** clears the current document */
     164     void slotEditClearAll();
     165     /** sets the pen width */
     166     void slotPenBrush();
     167     /** sets the pen color */
     168     void slotPenColor();
     169     /** toggles the toolbar
     170      */
     171     void slotViewToolBar();
     172     /** toggles the statusbar
     173      */
     174     void slotViewStatusBar();
     175     /** creates a new view for the document in the active child window and adds the new view to the
     176      * list of views the document maintains.
     177      */
     178     void slotWindowNewWindow();
     179     /** changes the statusbar contents for the standard label permanently, used to indicate current actions.
     180      * @param text the text that is displayed in the statusbar
     181      */
     182     void slotStatusMsg(const QString &&;text);
     183     /** changes the status message of the whole statusbar for two seconds, then restores the last status.
     184      * This is used to display statusbar messages that give information about actions for
     185      * toolbar icons and menuentries.
     186      * @param text the text that is displayed in the statusbar
     187      */
     188     void slotStatusHelpMsg(const QString &&;text);
     189     /** gets called when the window menu is activated; recreates the window menu with all opened window titles. */
     190     void windowMenuAboutToShow();
     191     /** activates the MDI child widget when it gets selected from the window menu. */
     192     void windowMenuActivated( int id );
     193
     194   private:
     195     /** save general Options like all bar positions and status as well as the geometry and
     196      * the recent file list to the configuration file
     197      */
     198     void saveOptions();
     199     /** read general Options again and initialize all variables like the recent file list
     200      */
     201     void readOptions();
     202     /** initKeyAccel creates the keyboard accelerator items for the available slots and changes the menu accelerators.
     203      * @see KAccel
     204      */
     205     void initKeyAccel();
     206     /** initMenuBar creates the menubar and inserts the menupopups as well as creating the helpMenu.
     207      */
     208     void initMenuBar();
     209     /** this creates the toolbars.
     210      */
     211     void initToolBar();
     212     /** sets up the statusbar for the main window by initialzing a statuslabel.
     213      */
     214     void initStatusBar();
     215
     216     /** Creates the main view of the KTMainWindow instance and initializes the MDI view area including any needed
     217      *  connections.
     218      */
     219     void initView();
     220
     221     /** contains the recently used filenames */
     222     QStrList recentFiles;
     223
     224     /** the configuration object of the application */
     225     KConfig *config;
     226     /** the key accelerator container */
     227     KAccel *keyAccel;
     228     /** the recent file menu containing the last five opened files */
     229     QPopupMenu *pRecentFileMenu;
     230     /** the file menu */
     231     QPopupMenu* pFileMenu;
     232     /** the edit menu */
     233     QPopupMenu* pEditMenu;
     234     /** the pen menu */
     235     QPopupMenu* pPenMenu;
     236     /** the view menu */
     237     QPopupMenu* pViewMenu;
     238     /** the window menu */
     239     QPopupMenu *pWindowMenu;
     240     /** pWorkspace is the MDI frame widget that handles MDI child widgets. Inititalized in
     241      * initView()
     242      */
     243     QWorkspace *pWorkspace;
     244     /** the printer instance */
     245     QPrinter *printer;
     246     /** a counter that gets increased each time the user creates a new document with "File"->"New" */
     247     int untitledCount;
     248     /** a list of all open documents. If the last window of a document gets closed, the installed eventFilter
     249      * removes this document from the list. The document list is checked for modified documents when the user
     250      * is about to close the application. */
     251     QList<KScribbleDoc> *pDocList;
     252
     253 };
     254
     255 #endif // KSCRIBBLE_H