Salome HOME
Synchronize adm files
[modules/gui.git] / src / SALOME_PYQT / SALOME_PYQT_GUILight / SALOME_PYQT_PyModule.h
1 // Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 // File   : SALOME_PYQT_PyModule.h
21 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
22 //
23
24 #ifndef SALOME_PYQT_PYMODULE_H
25 #define SALOME_PYQT_PYMODULE_H
26
27 #include "SALOME_PYQT_GUILight.h"
28
29 #include "PyInterp_Interp.h" // !!! WARNING !!! THIS INCLUDE MUST BE THE VERY FIRST !!!
30
31 #include <QIcon>
32 #include <QList>
33 #include <QMap>
34 #include <QObject>
35 #include <QStringList>
36
37 class CAM_Application;
38 class LightApp_DataObject;
39 class LightApp_Module;
40 class PyInterp_Interp;
41 class QAction;
42 class QMenu;
43 class SUIT_DataObject;
44 class SUIT_Study;
45 class SUIT_ViewWindow;
46
47 typedef QList<SUIT_DataObject*> DataObjectList;
48
49 class SALOME_PYQT_LIGHT_EXPORT PyModuleHelper : public QObject
50 {
51   Q_OBJECT
52
53 private:
54   class XmlHandler;
55   class InitLocker;
56
57   typedef QMap<int, PyInterp_Interp*> InterpMap;
58
59   static InterpMap           myInterpMap;          //!< study to Python subinterpreter map
60   static LightApp_Module*    myInitModule;         //!< Python GUI being initialized (not zero only during the initialization)
61
62   LightApp_Module*           myModule;             //!< GUI module
63   PyObject*                  myPyModule;           //!< Python GUI module
64   PyInterp_Interp*           myInterp;             //!< current Python subinterpreter
65   XmlHandler*                myXmlHandler;         //!< XML resource file parser
66   QMap<int, int>             myWindowsMap;         //!< windows map
67   QStringList                myViewMgrList;        //!< compatible view managers list
68   bool                       myLastActivateStatus; //!< latest module activation status
69
70 public:
71   PyModuleHelper( LightApp_Module* );
72   ~PyModuleHelper();
73
74   static LightApp_Module*    getInitModule();
75   static int                 defaultMenuGroup();
76
77   LightApp_Module*           module() const;
78   PyObject*                  pythonModule() const;
79
80   void                       connectAction( QAction* );
81
82   QMap<int, int>             windows() const;
83   QStringList                viewManagers() const;
84
85 public slots:
86   void                       initialize( CAM_Application* );
87   bool                       activate( SUIT_Study* study );
88   bool                       deactivate( SUIT_Study* study );
89   void                       modelClosed( SUIT_Study* study );
90   void                       preferencesChanged( const QString&, const QString& setting );
91   void                       preferenceChanged( const QString&, const QString&, const QString& setting );
92   void                       studyActivated( SUIT_Study* );
93   void                       actionActivated();
94   void                       contextMenu( const QString&, QMenu* );
95   void                       createPreferences();
96   void                       activeViewChanged( SUIT_ViewWindow* );
97   void                       tryCloseView( SUIT_ViewWindow* );
98   void                       closeView( SUIT_ViewWindow* );
99   void                       cloneView( SUIT_ViewWindow* );
100   void                       save( QStringList& );
101   bool                       load( const QStringList& );
102   void                       dumpPython( QStringList& files );
103   bool                       isDraggable( const SUIT_DataObject* ) const;
104   bool                       isDropAccepted( const SUIT_DataObject* ) const;
105   void                       dropObjects( const DataObjectList&, SUIT_DataObject*,
106                                           const int, Qt::DropAction );
107   QString                    engineIOR() const;
108
109   void                       onObjectBrowserClicked(SUIT_DataObject*, int);
110
111 private:
112   void                       initInterp( int );
113   void                       importModule();
114   void                       setWorkSpace();
115
116   void                       internalInitialize( CAM_Application* );
117   void                       internalActivate( SUIT_Study* );
118   void                       internalCustomize( SUIT_Study* );
119   void                       internalDeactivate( SUIT_Study* );
120   void                       internalClosedStudy( SUIT_Study* );
121   void                       internalPreferencesChanged( const QString&, const QString& );
122   void                       internalStudyChanged( SUIT_Study* );
123   void                       internalActionActivated( int );
124   void                       internalContextMenu( const QString&, QMenu* );
125   void                       internalCreatePreferences();
126   void                       internalActiveViewChanged( SUIT_ViewWindow* );
127   void                       internalTryCloseView( SUIT_ViewWindow* );
128   void                       internalCloseView( SUIT_ViewWindow* );
129   void                       internalCloneView( SUIT_ViewWindow* );
130   void                       internalSave( QStringList& );
131   void                       internalLoad( const QStringList&, bool& );
132   void                       internalDumpPython( QStringList& );
133   bool                       internalIsDraggable( LightApp_DataObject* );
134   bool                       internalIsDropAccepted( LightApp_DataObject* );
135   void                       internalDropObjects( const DataObjectList&, SUIT_DataObject*,
136                                                   const int, Qt::DropAction );
137   QString                    internalEngineIOR() const;
138   void                       internalOBClickedPython( const QString&, int );
139
140   void                       connectView( SUIT_ViewWindow* );
141 };
142
143 #endif // SALOME_PYQT_PYMODULE_H