Salome HOME
Merge relevant changes from V8_0_0_BR branch
[modules/gui.git] / src / SUIT / SUIT_Application.h
1 // Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 #ifndef SUIT_APPLICATION_H
24 #define SUIT_APPLICATION_H
25
26 #include "SUIT.h"
27
28 #include <QObject>
29 #include <QMap>
30
31 class QIcon;
32 class QLabel;
33 class QString;
34 class QAction;
35 class QWidget;
36
37 class SUIT_Desktop;
38 class SUIT_ViewManager;
39 class SUIT_ResourceMgr;
40 class SUIT_ShortcutMgr;
41 class SUIT_Study;
42
43 #ifdef WIN32
44 #pragma warning ( disable:4251 )
45 #endif
46
47 /*! \class QObject
48  * \brief For more information see <a href="http://doc.trolltech.com">QT documentation</a>.
49  */
50 /*!
51   An <b>Application</b> is a class which defines application configuration and behaviour.
52   For example Application object defines what Viewers are used in this application, what auxilliary windows
53   are present, how user can dial with them. Also Application object defines an sertain type of data structure by 
54   holding of pointer on an instance of SUIT_Study class (which represents Document data structure). In other words
55   Application defines type of sata structure, type of used Viewers, type of main GUI widget (Desktop),
56   and other auxilliary tools.
57 */
58
59 class SUIT_EXPORT SUIT_Application : public QObject
60 {
61   Q_OBJECT
62
63 public:
64   SUIT_Application();
65   virtual ~SUIT_Application();
66
67   //! Returns main widget (Desktop) of the application (if it exists)
68   virtual SUIT_Desktop* desktop();
69
70   /*! Returns \c false if application can not be closed (because of non saved data for example). 
71       This method called by SUIT_Session whin closing of application was requested. */
72   virtual bool          isPossibleToClose( bool& );
73
74   /*! Performs some finalization of life cycle of this application.
75       For instance, the application can force its documents(s) to close. */
76   virtual void          closeApplication();
77
78   //! Returns active Study. If Application supports wirking with several studies this method should be redefined
79   virtual SUIT_Study*   activeStudy() const;
80
81   //! Returns Name of application. Using is not defined.
82   virtual QString       applicationName() const = 0;
83
84   virtual QString       applicationVersion() const;
85
86   //! Shows the application's main widget. For non GUI application must be redefined.
87   virtual void          start();
88
89   //! Opens document <theFileName> into active Study. If Study is empty - creates it.
90   virtual bool          useFile( const QString& theFileName);
91
92   //! Creates new empty Study if active Study = 0
93   virtual void          createEmptyStudy();
94
95   /*! Returns number of Studies. 
96    *  Must be redefined in Applications which support several studies for one Application instance. */
97   virtual int           getNbStudies() const;
98
99   SUIT_ResourceMgr*     resourceMgr() const;
100
101   SUIT_ShortcutMgr*     shortcutMgr() const;
102
103   //! Puts the message to the status bar  
104   void                  putInfo ( const QString&, const int = 0 );
105
106   //! Invokes application-specific "Open/Save File" dialog and returns the selected file name.
107   virtual QString       getFileName( bool open, const QString& initial, const QString& filters, 
108                                      const QString& caption, QWidget* parent ) = 0;
109
110   //! Invokes application-specific "Select Directory" dialog and returns the selected directory name.
111   virtual QString       getDirectory( const QString& initial, const QString& caption, QWidget* parent ) = 0;
112
113
114   virtual int           viewManagerId ( const SUIT_ViewManager* ) const = 0;
115   virtual void          viewManagers( const QString&, QList<SUIT_ViewManager*>& ) const = 0;
116   QAction*              action( const int ) const;
117
118 signals:
119   void                  applicationClosed( SUIT_Application* );
120   void                  activated( SUIT_Application* );
121 //  void                  moving();
122   void                  infoChanged( QString );
123
124 public slots:
125   virtual void          updateCommandsStatus();
126   virtual void          onHelpContextModule( const QString&, const QString&, const QString& = QString() );
127
128 private slots:
129   void                  onInfoClear();
130
131 protected:
132   SUIT_Application*     startApplication( int, char** ) const;
133   SUIT_Application*     startApplication( const QString&, int, char** ) const;
134
135   virtual void          setDesktop( SUIT_Desktop* );
136
137   //! Creates a new Study instance. Must be redefined in new application according to its Study type.
138   virtual SUIT_Study*   createNewStudy();
139   virtual void          setActiveStudy( SUIT_Study* );
140   
141   /** @name Create tool functions*/ //@{
142   int                   createTool( const QString&, const QString& = QString() );
143   int                   createTool( const int, const int, const int = -1 );
144   int                   createTool( const int, const QString&, const int = -1 );
145   int                   createTool( QAction*, const int, const int = -1, const int = -1 );
146   int                   createTool( QAction*, const QString&, const int = -1, const int = -1 );//@}
147
148   /** @name Create menu functions*/ //@{
149   int                   createMenu( const QString&, const int, const int = -1, const int = -1, const int = -1 );
150   int                   createMenu( const QString&, const QString&, const int = -1, const int = -1, const int = -1 );
151   int                   createMenu( const int, const int, const int = -1, const int = -1 );
152   int                   createMenu( const int, const QString&, const int = -1, const int = -1 );
153   int                   createMenu( QAction*, const int, const int = -1, const int = -1, const int = -1 );
154   int                   createMenu( QAction*, const QString&, const int = -1, const int = -1, const int = -1 );//@}
155
156   /** @name Set menu shown functions*/ //@{
157   void                  setMenuShown( QAction*, const bool );
158   void                  setMenuShown( const int, const bool );//@}
159   /** @name Set tool shown functions*/ //@{
160   void                  setToolShown( QAction*, const bool );
161   void                  setToolShown( const int, const bool );//@}
162
163   void                  setActionShown( QAction*, const bool );
164   void                  setActionShown( const int, const bool );
165
166   static QAction*       separator();
167   int                   actionId( const QAction* ) const;
168
169   QList<QAction*>       actions() const;
170   QList<int>            actionIds() const;
171
172   int                   registerAction( const int, QAction* );
173   QAction*              createAction( const int, const QString&, const QIcon&, const QString&,
174                                       const QString&, const int, QObject* = 0,
175                                       const bool = false, QObject* = 0, const char* = 0,
176                                       const QString& = QString() );
177
178 protected slots:
179   virtual void          onDesktopActivated();
180 //  void                  onDesktopMoved();
181
182 private:
183   SUIT_Study*           myStudy;
184   SUIT_Desktop*         myDesktop;
185   QMap<int, QAction*>   myActionMap;
186   SUIT_ShortcutMgr*     myShortcutMgr;
187
188   QLabel*               myStatusLabel;
189 };
190
191 //! This function must return a new application instance.
192 extern "C"
193 {
194   //jfa 22.06.2005:typedef SUIT_Application* (*APP_CREATE_FUNC)( int, char** );
195   typedef SUIT_Application* (*APP_CREATE_FUNC)();
196 }
197
198 #define APP_CREATE_NAME "createApplication"
199
200 #ifdef WIN32
201 #pragma warning ( default:4251 )
202 #endif
203
204 #endif