1 // SALOME SALOMEGUI : implementation of desktop and GUI kernel
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : QAD_Desktop.h
25 // Author : Nicolas REJNERI
33 #include "QAD_ResourceMgr.h"
34 #include "QAD_Application.h"
35 #include "QAD_OperatorMenus.h"
36 #include "QAD_Menus.h"
37 #include "QAD_HelpWindow.h"
38 #include "QAD_Action.h"
40 #include "SALOME_NamingService.hxx"
41 #include "SALOME_LifeCycleCORBA.hxx"
44 #include <SALOMEconfig.h>
45 #include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog)
46 #include CORBA_CLIENT_HEADER(SALOME_Component)
47 #include CORBA_SERVER_HEADER(SALOMEDS)
54 #include <qcombobox.h>
55 #include <qstatusbar.h>
56 #include <qpopupmenu.h>
57 #include "qworkspaceP.h"
58 #include <qmainwindow.h>
59 #include <qfiledialog.h>
60 #include <qtoolbutton.h>
62 // Open CASCADE Includes
63 #include <OSD_SharedLibrary.hxx>
67 class QAD_EXPORT QAD_Desktop : public QMainWindow
72 enum ComponentType {GEOM, MESH, SOLVER, DATA, VISU, OTHER} ;
74 enum { FileNewId = 0, FileOpenId, FileLoadId, FileCloseId, FileSaveId, FileSaveAsId, FilePropsId, FileExitId,
76 SelectionPointId, SelectionEdgeId, SelectionCellId, SelectionActorId,
77 PrefViewerOCCId, PrefViewerVTKId, PrefGraphSupervisorId, PrefViewerPlot2dId,
78 //VRV: T2.5 - add default viewer
79 DefaultViewerOCCId, DefaultViewerVTKId, DefaultGraphSupervisorId, DefaultPlot2dId,
80 //VRV: T2.5 - add default viewer
81 PrefViewerTrihedronId, PrefConsoleFontId, PrefObjectBrowserEntryId,
82 PrefObjectBrowserIAPPId, PrefObjectBrowserValueId, PrefObjectBrowserCHRONO_SORTId,
83 PrefDirsId, PrefMultiFileSave, PrefASCIISave, PrefSaveId,
85 WindowNew3dId, ViewOCCId, ViewVTKId, ViewPlot2dId,
87 WindowCascadeId, WindowTileId,
88 HelpContentsId, HelpSearchId, HelpWhatsThisId, HelpAboutId };
89 enum UpdateCommand { ActivateApp, DeactivateApp };
91 /* Desktop can be created only by application */
92 friend bool QAD_Application::createDesktop( SALOME_NamingService* name_service );
93 QAD_Desktop( SALOME_NamingService* name_service );
98 /* global event filter for qapplication */
99 bool eventFilter( QObject* o, QEvent* e );
102 static QAD_ResourceMgr* getResourceManager();
103 static QAD_ResourceMgr* createResourceManager();
106 static QPalette* getPalette();
107 static QPalette* createPalette();
109 /* activeStudyChanged */
110 void onActiveStudyChanged();
113 void definePopup(QString & theContext,
115 QString & theObject );
117 void createPopup(QPopupMenu* popupFather, QPopupMenu* popup,
118 QString text, int popupID, bool separator = false);
119 void createPopup(QPopupMenu* popup, const QString & theContext,
120 const QString & theParent, const QString & theObject );
121 void customPopup(QPopupMenu* popup, const QString & theContext,
122 const QString & theParent, const QString & theObject);
125 void SetSelectionMode(int mode, bool activeCompOnly = false);
129 void closeDesktop( bool forceClose = false );
130 void putInfo ( const QString& );
131 void putInfo ( const QString&, int );
132 QToolBar* getStdToolBar() const;
133 QMenuBar* getMainMenuBar() const;
136 void addApplication(QAD_Application* app);
139 const QString& getDefaultTitle() const;
140 const QPixmap& getDefaultIcon() const;
141 const QString& getDefaultStudyName() const;
142 QAD_Application* getActiveApp() const;
143 QAD_Study* getActiveStudy() const;
144 QWorkspaceP* getMainFrame() const;
145 QString getNewStudyName();
146 QAD_Study* findStudy( SALOMEDS::Study_ptr theStudy );
149 virtual void helpAbout();
150 virtual void helpSearch();
151 virtual void helpContents();
152 virtual void helpContext(const QString& path, const QString& dir = QString::null);
154 bool loadComponent(QString);
155 void activateComponent(const QString& theName, bool isLoadData = true);
160 SALOME_ModuleCatalog::ModuleCatalog_var getCatalogue();
162 QAD_Menus* getActiveMenus() {return myActiveMenus;}
163 QAD_OperatorMenus* getOperatorMenus() {return myOperatorMenus;}
164 const OSD_SharedLibrary& getHandle() const {return mySharedLibrary;}// never return sych objects "by value"
165 const QString& getActiveComponent() const;
166 SALOME_NamingService* getNameService() {return myNameService;}
168 Engines::Component_var getEngine(const char *containerName,
169 const char *componentName);
171 QAD_HelpWindow* getHelpWindow();
173 void onMouseMove(QMouseEvent*);
174 bool onMousePress(QMouseEvent*);
175 void onKeyPress(QKeyEvent*);
177 virtual QAD_Study* loadStudy(QString theStudyName);
180 bool closeAllStudies( QAD_Application* );
181 void closeEvent( QCloseEvent* );
182 void resizeEvent( QResizeEvent* );
184 virtual QString selectFileName ( bool open );
186 virtual void updateDesktop( UpdateCommand );
187 virtual void updateStatusBar( UpdateCommand );
188 virtual void updateToolBars( UpdateCommand );
189 virtual void updateCaption( UpdateCommand );
190 virtual void updateMenu( UpdateCommand );
192 bool loadComponentData( const QString& );
195 virtual void onNewStudy();
196 virtual void onNewStudy(QAD_Application* app);
197 virtual void onLoadStudy();
198 virtual void onOpenStudy();
199 virtual bool onSaveStudy();
200 virtual bool onSaveStudy(QAD_Study* doc);
201 virtual bool onSaveAsStudy();
202 virtual bool onSaveAsStudy(QAD_Study* doc);
203 virtual bool onCloseStudy();
204 virtual bool onCloseStudy(QAD_Study* doc);
205 //ask user to remove study from study manager permanently
206 virtual bool onCloseStudy(QAD_Study* doc, bool ask);
208 virtual void onStudyProperties();
210 virtual void onViewStatusBar();
211 virtual void onToolBarPopupAboutToShow();
213 virtual void onExit();
215 virtual void onWindowPopupAboutToShow();
216 void onWindowsPopupActivated( int id );
217 void onWindowsPopupStatusText( int id );
219 void onSelectionMode();
225 void onGraphSupervisor();
227 void onConsoleFontAction();
228 //VRV: T2.5 - add default viewer
229 void onDefaultViewer( QActionP * theAction);
230 //VRV: T2.5 - add default viewer
232 void onViewerTrihedron();
233 void onObjectBrowser();
234 void onMultiFileSave();
237 void onActivateApp(QAD_Application* app);
238 void onDeactivateApp(QAD_Application* app);
240 void onHelpContents();
244 void onNewWindow3d();
248 void onDispatchTools(int id);
249 void onDispatch(int id);
252 void onButtonActiveComponent();
253 void onComboActiveComponent( const QString & );
254 void onComboActiveComponent( const QString & , bool isLoadData);
257 void onHelpWindowClosed();
260 QMenuBar* myMainMenu; /* the main menu bar */
261 int myMainMenuPos; /* index after which application inserts its items */
262 QPopupMenu myFilePopup;
264 QPopupMenu myEditPopup;
266 QPopupMenu myViewPopup;
268 QPopupMenu myHelpPopup;
271 //VRV: T2.5 - add default viewer
272 QPopupMenu myDefaultViewer;
273 //VRV: T2.5 - add default viewer
274 QPopupMenu myObjBrowserPopup;
275 QPopupMenu myViewerPopup;
277 QPopupMenu myNewViewPopup;
279 QPopupMenu myToolsPopup;
280 QPopupMenu myPrefPopup;
281 QPopupMenu mySelectionModePopup;
282 QPopupMenu myWindowPopup; /* not customized by an application */
284 ActionMap myStdActions; /* default actions */
285 QToolBar* myStdToolBar; /* standard toolbar */
286 QStatusBar* myStatusBar; /* the only status bar */
288 QList<ToggleAction> myToolBarAction;
289 QPopupMenu myToolBarsPopup;
291 QList<QAD_Application> myApps; /* running applications */
292 QAD_Application* myActiveApp; /* the active application */
293 QAD_Study* myActiveStudy; /* the active document */
295 int myCntUntitled; /* number of untitled docs */
296 QWorkspaceP* myWorkspace; /* workspace */
298 QPixmap myDefaultIcon; /* if no application is active */
299 QString myDefaultTitle; /* desktop will use them */
301 QAD_OperatorMenus* myOperatorMenus;
302 QList<QAD_Menus> myMenusList;
303 QAD_Menus* myActiveMenus;
305 QAD_HelpWindow* myHelpWindow;
307 QList<QToolButton> myComponentButton;
310 static QAD_ResourceMgr* resourceMgr;
311 static QPalette* palette;
312 void createActions();
313 void updateActions();
314 OSD_SharedLibrary mySharedLibrary;
315 QAD_XmlHandler* myXmlHandler;
316 QString myActiveComp;
317 SALOME_NamingService* myNameService;
318 SALOME_ModuleCatalog::ModuleCatalog_var myCatalogue;
319 SALOME_LifeCycleCORBA * myEnginesLifeCycle;
324 /********************************************************************
325 ** Class: AppSelectionDlg
326 ** Descr: Dialog for the selection of the application when several
327 ** applications exist in the desktop and new document creation
328 ** is activated by user.
330 *********************************************************************/
331 class Desktop_AppSelectionDlg : public QDialog
336 Desktop_AppSelectionDlg( QAD_Desktop*, QList<QAD_Application>& );
337 ~Desktop_AppSelectionDlg();
340 QAD_Application* selectedApp() const;
343 void resizeEvent( QResizeEvent* );
346 void onAppSelected(int);
351 QList<QAD_Application>& myApps;