/*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * copyright (C) 2002-2006 * * Umbrello UML Modeller Authors * ***************************************************************************/ #ifndef UML_H #define UML_H #ifdef HAVE_CONFIG_H #include #endif #include "umlnamespace.h" #include #include #include #include #include // forward declaration of the UML classes class AlignToolBar; class CodeDocument; class CodeGenerator; class CodeGenerationPolicy; class CodeGenPolicyExt; class DocWindow; class UMLClassifier; class UMLDoc; class UMLListView; class UMLView; class WorkToolBar; class SettingsDlg; class UMLViewImageExporterAll; class RefactoringAssistant; class KPlayerPopupSliderAction; class XhtmlGenerator; // KDE forward declarations class TDEActionMenu; class TDERecentFilesAction; class KStatusBarLabel; class TDEToggleAction; class KDockWidget; class KTabWidget; class TDEToolBarButton; class TDEPopupMenu; // TQt forward declarations class TQWidgetStack; class TQMenuData; class TQClipboard; class TQToolButton; class TQCustomEvent; /** * The base class for UML application windows. It sets up the main * window and reads the config file as well as providing a menubar, toolbar * and statusbar. An instance of UMLView creates your center view, which is connected * to the window's Doc object. * UMLApp reimplements the methods that TDEMainWindow provides for main window handling and supports * full session management as well as using TDEActions. * @see TDEMainWindow * @see TDEApplication * @see TDEConfig * * @author Paul Hensgen * Bugs and comments to uml-devel@lists.sf.net or http://bugs.kde.org */ class UMLApp : public KDockMainWindow { Q_OBJECT public: /** * Constructor. Calls all init functions to create the application. */ UMLApp(TQWidget* parent=0, const char* name=0); /** * Standard deconstructor. */ ~UMLApp(); static UMLApp* app(); /** * Opens a file specified by commandline option. */ void openDocumentFile(const KURL& url=KURL()); /** * Calls the UMLDoc method to create a new Document. */ void newDocument(); /** * Returns a pointer to the current document connected to the * TDEMainWindow instance. * Used by the View class to access the document object's methods. */ UMLDoc *getDocument() const; /** * Returns a pointer to the list view. * * @return The listview being used. */ UMLListView* getListView(); /** * Returns the toolbar being used. * * @return The toolbar being used. */ WorkToolBar* getWorkToolBar(); /** * Sets whether the program has been modified. * This will change how the program saves/exits. * * @param _m true - modified. */ void setModified(bool _m); /** * Set whether to allow printing. * It will enable/disable the menu/toolbar options. * * @param enable Set whether to allow printing. */ void enablePrint(bool enable); /** * Set whether to allow printing. * It will enable/disable the menu/toolbar options. * * @param enable Set whether to allow printing. */ void enableUndo(bool enable); /** * Set whether to allow printing. * It will enable/disable the menu/toolbar options. * * @param enable Set whether to allow printing. */ void enableRedo(bool enable); /** * Returns a pointer to the documentation window. * * @return Pointer to the DocWindow. */ DocWindow * getDocWindow() { return m_pDocWindow; } /** * Returns the undo state. * * @return True if Undo is enabled. */ bool getUndoEnabled(); /** * Returns the redo state. * * @return True if Redo is enabled. */ bool getRedoEnabled(); /** * Returns the paste state. * * @return True if Paste is enabled. */ bool getPasteState(); /** * Returns the state on Cut/Copy. * * @return True if Cut/Copy is enabled. */ bool getCutCopyState(); /** * Gets the appropriate CodeGenerator. * * @return Pointer to the CodeGenerator. */ CodeGenerator* getGenerator(); /** * Set the current generator for this app. * If giveWarning is true, then a popup box warning that the * code generation library is out-of-date will show if you * attempt to set the generator to NULL. * * @param gen Pointer to the CodeGenerator to set. * @param giveWarning True to enable out-of-date warning. */ void setGenerator(CodeGenerator* gen, bool giveWarning = true); /** * Creates a new code generator for the given active language. * * @return Pointer to the CodeGenerator created. */ CodeGenerator* createGenerator(); /** * Auxiliary function for UMLDoc::loadExtensionsFromXMI(): * Return the code generator of the given language if it already * exists; if it does not yet exist then create it and return * the newly created generator. It is the caller's responsibility * to load XMI into the newly created generator. */ CodeGenerator *setGenerator(Uml::Programming_Language pl); /** * Call the refactoring assistant on a classifier. * * @param classifier Pointer to the classifier to refactor. */ void refactor(UMLClassifier* classifier); /** * Call the code viewing assistant on a given UMLClassifier. * * @param classifier Pointer to the classifier to view. */ void viewCodeDocument(UMLClassifier* classifier); /** * Sets the state of the view properties menu item. * * @param bState Boolean, true to enable the view properties item. */ void setDiagramMenuItemsState(bool bState); /** * Returns the widget used as the parent for UMLViews. * @return The main view widget. */ TQWidget* getMainViewWidget(); /** * Puts this view to the top of the viewStack, i.e. makes it * visible to the user. * * @param view Pointer to the UMLView to push. */ void setCurrentView(UMLView* view); /** * Get the current view. * This may return a null pointer (when no view was previously * specified.) * */ UMLView* getCurrentView(); /** * Sets the default mime type for all diagrams that are exported as * images. * * @param mimeType The MIME type to set as the default. */ void setImageMimeType(TQString const & mimeType){m_imageMimeType=mimeType;}; /** * Gets the default mime type for all diagrams that are exported as * images. * * @return The default MIME type for images. */ TQString const & getImageMimeType()const{return m_imageMimeType;}; /** * Carries out the cut/copy command with different action performed * depending on if from view or list view. * Cut/Copy are the same. It is up to the caller to delete/cut the selection.. * * If the operation is successful, the signal sigCutSuccessful() is emitted. * * Callers should connect to this signal to know what to do next. */ bool editCutCopy( bool bFromView ); /** * Return the tab widget. */ KTabWidget *tabWidget(); /** * Returns the current text in the status bar. * * @return The text in the status bar. */ TQString getStatusBarMsg(); /** * Returns the default code generation policy. */ CodeGenerationPolicy *getCommonPolicy(); /** * Sets the CodeGenPolicyExt object. */ void setPolicyExt(CodeGenPolicyExt *policy); /** * Returns the CodeGenPolicyExt object. */ CodeGenPolicyExt *getPolicyExt(); protected: virtual void keyPressEvent(TQKeyEvent* e); virtual void keyReleaseEvent(TQKeyEvent* e); /** * Event handler to receive custom events. * It handles events such as exporting all views from command line (in * that case, it executes the exportAllViews method in the event). */ virtual void customEvent(TQCustomEvent* e); /** * Helper method for handling cursor key release events (refactoring). */ void handleCursorKeyReleaseEvent(TQKeyEvent* e); /** * Save general Options like all bar positions and status * as well as the geometry and the recent file list to * the configuration file. */ void saveOptions(); /** * Read general Options again and initialize all variables * like the recent file list. */ void readOptions(); /** * Initializes the TDEActions of the application. */ void initActions(); /** * Sets up the statusbar for the main window by * initialzing a statuslabel. */ void initStatusBar(); /** * Creates the centerwidget of the TDEMainWindow instance and * sets it as the view. */ void initView(); /** * queryClose is called by TDEMainWindow on each closeEvent of a * window. Counter to the default implementation (which only * returns true), this calls saveModified() on the document object * to ask if the document shall be saved if Modified; on cancel * the closeEvent is rejected. * @see TDEMainWindow#queryClose * @see TDEMainWindow#closeEvent * * @return True if window may be closed. */ virtual bool queryClose(); /** * queryExit is called by TDEMainWindow when the last * window of the application is going to be closed during * the closeEvent(). In contrast to the default * implementation that just returns true, this calls * saveOptions() to save the settings of the last * window's properties. * @see TDEMainWindow#queryExit * @see TDEMainWindow#closeEvent * * @return True if window may be closed. */ virtual bool queryExit(); /** * Saves the window properties for each open window * during session end to the session config file, * including saving the currently opened file by a * temporary filename provided by TDEApplication. * @see TDEMainWindow#saveProperties */ virtual void saveProperties(TDEConfig *_cfg); /** * Reads the session config file and restores the * application's state including the last opened files and * documents by reading the temporary files saved by * saveProperties() * @see TDEMainWindow#readProperties */ virtual void readProperties(TDEConfig *_cfg); CodeGenerationPolicy * m_commoncodegenpolicy; /** * Updates the Menu for language selection and sets the * active lanugage. If no active lanugage is found or if it is * not one of the registered languages it tries to fall back * to Cpp */ void updateLangSelectMenu(Uml::Programming_Language activeLanguage); protected slots: /** * Show "Tip of the Day" dialog */ void tipOfTheDay(); public slots: /** * Reads the activeLanguage from the TDEConfig and calls updateLangSelectMenu() */ void initGenerator(); /** * Runs the code generation wizard. */ void generationWizard(); /** * Clears the document in the actual view to reuse it as the new * document. */ void slotFileNew(); /** * Open a file and load it into the document. */ void slotFileOpen(); /** * Opens a file from the recent files menu. */ void slotFileOpenRecent(const KURL& url); /** * Save a document. */ void slotFileSave(); /** * Save a document by a new filename. */ bool slotFileSaveAs(); /** * Asks for saving if the file is modified, then closes the current * file and window. */ void slotFileClose(); /** * Print the current file. */ void slotFilePrint(); /** * Closes all open windows by calling close() on each * memberList item until the list is empty, then quits the * application. If queryClose() returns false because the * user canceled the saveModified() dialog, the closing * aborts. */ void slotFileQuit(); /** * Exports the current model to docbook in a subdir of the * current model directory named from the model name. * @todo Let the user chose the destination directory and * name, using network transparency. */ void slotFileExportDocbook(); /** * Exports the current model to XHTML in a subdir of the * current model directory named from the model name. * @todo Let the user chose the destination directory and * name, using network transparency. */ void slotFileExportXhtml(); /** * Put the marked text/object into the clipboard and remove * it from the document. */ void slotEditCut(); /** * Put the marked text/object into the clipboard. */ void slotEditCopy(); /** * Paste the clipboard into the document. */ void slotEditPaste(); /** * Toggles the toolbar. * Deprecated. For compatibility with KDE 3.1, remove if we stop supporting KDE 3.1 */ void slotViewToolBar(); /** * Toggles the statusbar. * Deprecated. For compatibility with KDE 3.1, remove if we stop supporting KDE 3.1 */ void slotViewStatusBar(); /** * Autolayouts the current class diagram */ void slotAutolayout(); /** * Changes the statusbar contents for the standard label * permanently, used to indicate current actions. * @param text The text that is displayed in the statusbar */ void slotStatusMsg(const TQString &text); /** * Create this view. */ void slotClassDiagram(); /** * Create this view. */ void slotSequenceDiagram(); /** * Create this view. */ void slotCollaborationDiagram(); /** * Create this view. */ void slotUseCaseDiagram(); /** * Create this view. */ void slotStateDiagram(); /** * Create this view. */ void slotActivityDiagram(); /** * Create this view. */ void slotComponentDiagram(); /** * Create this view. */ void slotDeploymentDiagram(); /** * Create this view. */ void slotEntityRelationshipDiagram(); /** * Notification of changed clipboard data. */ void slotClipDataChanged(); /** * */ void slotCopyChanged(); /** * Shows the global preferences dialog. */ void slotPrefs(); /** * Commits the changes from the global preferences dialog. */ void slotApplyPrefs(); /** * Register new views (aka diagram) with the GUI so they show up * in the menu. */ void slotUpdateViews(); /** * Generate code for all classes. */ void generateAllCode(); /** * Set the language for which code will be generated. * * @param menuID the ID of the langSelect menu item for * the relevant language. */ void setActiveLanguage(int menuID); /** * Set the language for which code will be generated. * * @param activeLanguage The name of the language to set */ void setActiveLanguage( const TQString &activeLanguage ); /** * Get the language for import and code generation. */ Uml::Programming_Language getActiveLanguage(); /** * Return true if the active language is case sensitive. */ bool activeLanguageIsCaseSensitive(); /** * Return the target language depedent scope separator. */ TQString activeLanguageScopeSeparator(); /** * Return the default code generation language as configured by TDEConfig. * If the activeLanguage is not found in the TDEConfig then use Uml::pl_Cpp * as the default. */ Uml::Programming_Language getDefaultLanguage(); /** * Menu selection for clear current view. */ void slotCurrentViewClearDiagram(); /** * Menu selection for current view snap to grid property. */ void slotCurrentViewToggleSnapToGrid(); /** * Menu selection for current view show grid property. */ void slotCurrentViewToggleShowGrid(); /** * Menu selection for exporting current view as an image. */ void slotCurrentViewExportImage(); /** * Menu selection for exporting all views as images. */ void slotAllViewsExportImage(); /** * Menu selection for current view properties. */ void slotCurrentViewProperties(); /** * Import classes menu selection. */ void slotImportClasses(); /** * Class wizard menu selection. */ void slotClassWizard(); /** * Calls the active code generator to add its default datatypes */ void slotAddDefaultDatatypes(); /** * The displayed diagram has changed. */ void slotCurrentViewChanged(); /** * The snap to grid value has been changed. */ void slotSnapToGridToggled(bool gridOn); /** * The show grid value has been changed. */ void slotShowGridToggled(bool gridOn); /** * Select all widgets on the current diagram. */ void slotSelectAll(); /** * Deletes the selected widget. */ void slotDeleteSelectedWidget(); /** * Deletes the current diagram. */ void slotDeleteDiagram(); /** * Set the zoom factor of the current diagram. * * @param zoom Zoom factor in percentage. */ void setZoom(int zoom); /** * Connected to by the KPlayerSliderAction zoomAction, a value of between 300 * and 2200 is scaled to zoom to between 9% and 525%. * The min and max values of the slider are hard coded in KPlayerSliderAction for now. * @param value Zoom factor before scaleing */ void slotZoomSliderMoved(int value); /** * Set zoom to 100% */ void slotZoom100(); /** * Prepares the zoom menu for display. */ void setupZoomMenu(); /** * Reverts the document back to the state it was prior to the * last action performed by the user. */ void slotEditUndo(); /** * Reverts the document back to the state it was prior to the * last undo. */ void slotEditRedo(); /** * Searches for a menu with the given name * * @param menu The TQPopupMenu or TQMenuBar to search through. * @param name The name of the menu to search for (name, not text) */ TQPopupMenu* findMenu(TQMenuData* menu, const TQString &name); /** * called when the tab has changed */ void slotTabChanged(TQWidget* view); /** * make the tab on the left of the current one the active one */ void slotChangeTabLeft(); /** * make the tab on the right of the current one the active one */ void slotChangeTabRight(); /** * Move the current tab left, not implemented */ void slotMoveTabLeft(); /** * Move the current tab right, not implemented */ void slotMoveTabRight(); TDEConfig *getConfig() { return m_config; } /** * This slot deletes the current XHTML documentation generator as soon as * this one signals that it has finished. */ void slotXhtmlDocGenerationFinished(); private: static UMLApp* s_instance; /** * For selecting the active language. */ TQPopupMenu *m_langSelect; /** * Popup menu for zoom selection. */ TQPopupMenu *m_zoomSelect; /** * Active language. */ Uml::Programming_Language m_activeLanguage; /** * Active code generator. */ CodeGenerator *m_codegen; /** * Active policy extension. * Only used for new code generators ({Cpp,Java,Ruby}CodeGenerator) */ CodeGenPolicyExt *m_policyext; /** * Returns whether we can decode the given mimesource */ static bool canDecode(const TQMimeSource* mimeSource); /** * Reads from the config file the options state. * Not in @ref readOptions as it needs to be read earlier than some * of the other options, before some items are created. */ void readOptionState(); /** * Initialize TQt's global clipboard support for the application. */ void initClip(); /** * Initialize code generators at startup. * Why is this important? Because IF we don't do this, then changes * to the UML may not be synced with the saved code generation params * for those languages which arent currently active. */ void initSavedCodeGenerators(); /** * The configuration object of the application. */ TDEConfig* m_config; /** * View is the main widget which represents your working area. * The View class should handle all events of the view widget. * It is kept empty so you can create your view according to your * application's needs by changing the view class. */ UMLView* m_view; /** * doc represents your actual document and is created only once. * It keeps information such as filename and does the loading and * saving of your files. */ UMLDoc* m_doc; /** * Listview shows the current open file. */ UMLListView* m_listView; /** * The widget which shows the diagrams. */ KDockWidget* m_mainDock; /** * Contains the UMLListView tree view. */ KDockWidget* m_listDock; /** * Contains the documentation DocWindow widget. */ KDockWidget* m_documentationDock; /** * Documentation window. */ DocWindow* m_pDocWindow; /** Refactoring assistant. */ RefactoringAssistant* m_refactoringAssist; //TDEAction pointers to enable/disable actions TDEAction* fileNew; TDEAction* fileOpen; TDERecentFilesAction* fileOpenRecent; TDEAction* fileSave; TDEAction* fileSaveAs; TDEAction* fileClose; TDEAction* filePrint; TDEAction* fileQuit; TDEAction* fileExportDocbook; TDEAction* fileExportXhtml; TDEAction* editCut; TDEAction* editCopy; TDEAction* editPaste; TDEAction* editUndo; TDEAction* editRedo; TDEAction* selectAll; TDEAction* preferences; TDEActionMenu* newDiagram; TDEAction* classDiagram; TDEAction* sequenceDiagram; TDEAction* collaborationDiagram; TDEAction* useCaseDiagram; TDEAction* stateDiagram; TDEAction* activityDiagram; TDEAction* componentDiagram; TDEAction* deploymentDiagram; TDEAction* entityRelationshipDiagram; TDEAction* viewClearDiagram; TDEToggleAction* viewSnapToGrid; TDEToggleAction* viewShowGrid; TDEAction* viewExportImage; TDEAction* viewExportImageAll; TDEAction* viewProperties; TDEAction* zoom100Action; KPlayerPopupSliderAction* zoomAction; TDEAction* genAll; TDEAction* genWizard; TDEAction* importClasses; TDEAction* classWizard; TDEAction* deleteSelectedWidget; TDEAction* deleteDiagram; #ifdef HAVE_DOT TDEAction* autolayout; #endif TDEAction* changeTabLeft; TDEAction* changeTabRight; TDEAction* moveTabLeft; TDEAction* moveTabRight; TDEToolBarButton* m_newSessionButton; TDEPopupMenu* m_diagramMenu; TQToolButton* m_closeDiagramButton; TDEToggleAction* viewToolBar; TDEToggleAction* viewStatusBar; WorkToolBar* toolsbar; TQTimer* m_clipTimer; TQTimer* m_copyTimer; AlignToolBar* m_alignToolBar; KStatusBarLabel* m_statusLabel; /** * True if the application is opening an existing document */ bool m_loading; /** * Shows, and is parent of, all the UMLViews (diagrams) * if tabbed diagrams are not enabled. */ TQWidgetStack* m_viewStack; /** * Shows, and is parent of, all the UMLViews (diagrams) * if tabbed diagrams are enabled. */ KTabWidget* m_tabWidget; /** * Default mime type to use for image export. */ TQString m_imageMimeType; /** * the global UML settings dialog */ SettingsDlg* m_dlg; /** * The UMLViewImageExporterAll used to export all the views. */ UMLViewImageExporterAll* m_imageExporterAll; /** * The running XHTML documentation generator. null when no generation is * running */ XhtmlGenerator* m_xhtmlGenerator; signals: /** * Emitted when a cut operation is successful. */ void sigCutSuccessful(); }; #endif // UML_H