Salome HOME
307a797e6099a5415a6ba838369099590b801915
[modules/gui.git] / src / SALOME_PYQT / SALOME_PYQT_GUILight / SALOME_PYQT_PyModule.h
1 // Copyright (C) 2007-2022  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   static LightApp_Module*    myInitModule;         //!< Python GUI being initialized (not zero only during the initialization)
58
59   LightApp_Module*           myModule;             //!< GUI module
60   PyObject*                  myPyModule;           //!< Python GUI module
61   PyInterp_Interp*           myInterp;             //!< current Python subinterpreter
62   XmlHandler*                myXmlHandler;         //!< XML resource file parser
63   QMap<int, int>             myWindowsMap;         //!< windows map
64   QStringList                myViewMgrList;        //!< compatible view managers list
65   bool                       myLastActivateStatus; //!< latest module activation status
66
67 public:
68   PyModuleHelper( LightApp_Module* );
69   ~PyModuleHelper();
70
71   static LightApp_Module*    getInitModule();
72   static int                 defaultMenuGroup();
73
74   LightApp_Module*           module() const;
75   PyObject*                  pythonModule() const;
76
77   void                       connectAction( QAction* );
78
79   QMap<int, int>             windows() const;
80   QStringList                viewManagers() const;
81
82 public slots:
83   void                       initialize( CAM_Application* );
84   bool                       activate( SUIT_Study* study );
85   bool                       deactivate( SUIT_Study* study );
86   void                       modelClosed( SUIT_Study* study );
87   void                       preferencesChanged( const QString&, const QString& setting );
88   void                       preferenceChanged( const QString&, const QString&, const QString& setting );
89   void                       studyActivated( SUIT_Study* );
90   void                       actionActivated();
91   void                       selectionUpdated(const QStringList&);
92   void                       contextMenu( const QString&, QMenu* );
93   void                       createPreferences();
94   void                       activeViewChanged( SUIT_ViewWindow* );
95   void                       tryCloseView( SUIT_ViewWindow* );
96   void                       closeView( SUIT_ViewWindow* );
97   void                       cloneView( SUIT_ViewWindow* );
98   void                       save( QStringList&, const QString& );
99   bool                       load( const QStringList&, const QString& );
100   void                       dumpPython( QStringList& files );
101   bool                       isDraggable( const SUIT_DataObject* ) const;
102   bool                       isDropAccepted( const SUIT_DataObject* ) const;
103   void                       dropObjects( const DataObjectList&, SUIT_DataObject*,
104                                           const int, Qt::DropAction );
105   QString                    engineIOR() const;
106
107   void                       onObjectBrowserClicked(SUIT_DataObject*, int);
108
109 private:
110   void                       initInterp();
111   void                       importModule();
112   void                       setWorkSpace();
113
114   void                       internalInitialize( CAM_Application* );
115   void                       internalActivate( SUIT_Study* );
116   void                       internalCustomize( SUIT_Study* );
117   void                       internalDeactivate( SUIT_Study* );
118   void                       internalClosedStudy( SUIT_Study* );
119   void                       internalPreferencesChanged( const QString&, const QString& );
120   void                       internalStudyChanged( SUIT_Study* );
121   void                       internalActionActivated( int );
122   void                       internalSelectionUpdated(const QStringList&);
123   void                       internalContextMenu( const QString&, QMenu* );
124   void                       internalCreatePreferences();
125   void                       internalActiveViewChanged( SUIT_ViewWindow* );
126   void                       internalTryCloseView( SUIT_ViewWindow* );
127   void                       internalCloseView( SUIT_ViewWindow* );
128   void                       internalCloneView( SUIT_ViewWindow* );
129   void                       internalSave( QStringList&, const QString& );
130   void                       internalLoad( const QStringList&, const QString&, bool& );
131   void                       internalDumpPython( QStringList& );
132   bool                       internalIsDraggable( LightApp_DataObject* );
133   bool                       internalIsDropAccepted( LightApp_DataObject* );
134   void                       internalDropObjects( const DataObjectList&, SUIT_DataObject*,
135                                                   const int, Qt::DropAction );
136   QString                    internalEngineIOR() const;
137   void                       internalOBClickedPython( const QString&, int );
138
139   void                       connectView( SUIT_ViewWindow* );
140 };
141
142 #endif // SALOME_PYQT_PYMODULE_H