Salome HOME
52e5451163176ff3d0b50b0c7727151924988f00
[modules/gui.git] / src / SUIT / SUIT_Application.h
1 #ifndef SUIT_APPLICATION_H
2 #define SUIT_APPLICATION_H
3
4 #include "SUIT.h"
5 #include "SUIT_Study.h"
6
7 #include <qobject.h>
8 #include <qwidget.h>
9
10 class QAction;
11 class SUIT_Desktop;
12 class SUIT_Convertor;
13 class SUIT_ViewModel;
14 class SUIT_ResourceMgr;
15
16 /*!
17   An <b>Application</b> is a class which defines application configuration and behaviour.
18   For example Application object defines what Viewers are used in this application, what auxilliary windows
19   are present, how user can dial with them. Also Application object defines an sertain type of data structure by 
20   holding of pointer on an instance of SUIT_Study class (which represents Document data structure). In other words
21   Application defines type of sata structure, type of used Viewers, type of main GUI widget (Desktop),
22   and other auxilliary tools.
23 */
24
25 class SUIT_EXPORT SUIT_Application : public QObject
26 {
27   Q_OBJECT
28
29 public:
30   SUIT_Application();
31   virtual ~SUIT_Application();
32
33   //! Returns main widget (Desktop) of the application (if it exists)
34   virtual SUIT_Desktop* desktop();
35
36   /*! Returns FALSE if applic ation can not be closed (because of non saved data for example). 
37       This method called by SUIT_Session whin closing of application was requested. */
38   virtual bool          isPossibleToClose();
39
40   //! Returns active Study. If Application supports wirking with several studies this method should be redefined
41   virtual SUIT_Study*   activeStudy() const;
42
43   //! Returns Name of application. Using is not defined.
44   virtual QString       applicationName() const = 0;
45
46   //! Shows the application's main widget. For non GUI application must be redefined.
47   virtual void          start();
48
49   //! Loads document <theFileName> into active Study. If Study is empty - creates it.
50   virtual void          useFile( const QString& );
51
52   //! Creates new empty Study if active Study = 0
53   virtual void          createEmptyStudy();
54
55   /*! Returns number of Studies. 
56    *  Must be redefined in Applications which support several studies for one Application instance. */
57   virtual int           getNbStudies() const;
58
59   SUIT_ResourceMgr*     resourceMgr() const;
60
61   /*! Returns instance of data object Convertor class according to given Viewer. 
62       If convertation is not supported returns 0. */
63   virtual SUIT_Convertor* getConvertor(const SUIT_ViewModel* theViewer) { return 0; }
64
65   //! Puts the message to the status bar  
66   void putInfo ( const QString&, const int = 0 );
67
68 signals:
69   void                  applicationClosed( SUIT_Application* );
70
71 protected:
72   SUIT_Application*     startApplication( int, char** ) const;
73   SUIT_Application*     startApplication( const QString&, int, char** ) const;
74
75   void                  setDesktop( SUIT_Desktop* );
76
77   //! Creates a new Study instance. Must be redefined in new application according to its Study type.
78   virtual SUIT_Study*   createNewStudy();
79   virtual void          setActiveStudy( SUIT_Study* );
80
81   int                   createTool( const QString& );
82   int                   createTool( const int, const int, const int = -1 );
83   int                   createTool( const int, const QString&, const int = -1 );
84   int                   createTool( QAction*, const int, const int = -1, const int = -1 );
85   int                   createTool( QAction*, const QString&, const int = -1, const int = -1 );
86
87   int                   createMenu( const QString&, const int, const int = -1, const int = -1, const int = -1 );
88   int                   createMenu( const QString&, const QString&, const int = -1, const int = -1, const int = -1 );
89   int                   createMenu( const int, const int, const int = -1, const int = -1 );
90   int                   createMenu( const int, const QString&, const int = -1, const int = -1 );
91   int                   createMenu( QAction*, const int, const int = -1, const int = -1, const int = -1 );
92   int                   createMenu( QAction*, const QString&, const int = -1, const int = -1, const int = -1 );
93
94   void                  setMenuShown( QAction*, const bool );
95   void                  setMenuShown( const int, const bool );
96   void                  setToolShown( QAction*, const bool );
97   void                  setToolShown( const int, const bool );
98
99   static QAction*       separator();
100   QAction*              action( const int ) const;
101   int                   actionId( const QAction* ) const;
102   void                  registerAction( const int, QAction* );
103   QAction*              createAction( const int, const QString&, const QIconSet&, const QString&,
104                                       const QString&, const int, QObject* = 0,
105                                       const bool = false, QObject* = 0, const char* = 0 );
106
107 private:
108   SUIT_Study*           myStudy;
109   SUIT_Desktop*         myDesktop;
110 };
111
112 //! This function must return a new application instance.
113 extern "C"
114 {
115   typedef SUIT_Application* (*APP_CREATE_FUNC)( int, char** );
116 }
117
118 #define APP_CREATE_NAME "createApplication"
119
120 #endif