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 |