Salome HOME
Update from BR_V5_DEV 13Feb2009
[modules/gui.git] / src / SALOME_PYQT / SALOME_PYQT_GUI / SALOME_PYQT_Module.h
index 65def75f6289f823e55621a67a1bf4259b9b107a..3283416ad10dbbed4373d0cdd62a07bab5751f53 100644 (file)
-// Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-// 
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either 
-// version 2.1 of the License.
-// 
-// This library is distributed in the hope that it will be useful 
-// but WITHOUT ANY WARRANTY; without even the implied warranty of 
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-// Lesser General Public License for more details.
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-// You should have received a copy of the GNU Lesser General Public  
-// License along with this library; if not, write to the Free Software 
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// File   : SALOME_PYQT_Module.h
+// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
 //
-
 #ifndef SALOME_PYQT_MODULE_H
 #define SALOME_PYQT_MODULE_H
 
 #include "SALOME_PYQT_GUI.h"
+#include "SALOME_PYQT_PyInterp.h" // this include must be first (see PyInterp_Interp.h)!
 
-#include "SALOME_PYQT_PyInterp.h" // this include must be first (see PyInterp_base.h)!
-#include "SalomeApp_Module.h"
-#include <map>
-#include <qaction.h>
-#include <qptrlist.h>
-#include <qstringlist.h>
-#include <qmap.h>
+#include <SalomeApp_Module.h>
+
+#include <QStringList>
+#include <QList>
+#include <QMap>
+#include <QIcon>
 
 #include <SALOMEconfig.h>
 #include CORBA_CLIENT_HEADER(SALOME_Component)
 
-class SALOME_PYQT_XmlHandler;
+class SALOME_PYQT_PyInterp;
+class SUIT_ViewWindow;
+class QAction;
+class QtxActionGroup;
+class QMenu;
 
 class SALOME_PYQT_EXPORT SALOME_PYQT_Module: public SalomeApp_Module
 {
   Q_OBJECT;
 
-  /******************************
-   * Data
-   ******************************/
-
 private:
-  typedef std::map<int, SALOME_PYQT_PyInterp*> InterpMap;
-
-  /* study-to-subinterpreter map */
-  static InterpMap                 myInterpMap;
-  /* current Python subinterpreter */
-  SALOME_PYQT_PyInterp*            myInterp;
-  /* Python GUI module loaded */
-  PyObjWrapper                     myModule;
-  /* Python GUI being initialized (not zero only during the initialization)*/
-  static SALOME_PYQT_Module*       myInitModule;
-
-  /* own menus list */
-  struct MenuId
-  {
-    int  id;
-    bool constantMenu;
-    MenuId() : id( -1 ), constantMenu( false ) {}
-    MenuId( const int _id, const bool _constantMenu )
-      : id( _id ), constantMenu( _constantMenu ) {}
-  };
-  typedef QValueList<MenuId>   MenuIdList;
-  typedef QMap<int,MenuIdList> MenuMap;
-  MenuMap                      myMenus;
-  /* XML resource file parser */
-  SALOME_PYQT_XmlHandler*          myXmlHandler;  
-  /* windows map*/
-  QMap<int, int>                   myWindowsMap;
-  /* compatible view managers list */
-  QStringList                      myViewMgrList;
-
-  /* status of last trying of module activation*/
-  bool                             myLastActivateStatus;
-  
-  /******************************
-   * Construction/destruction
-   ******************************/
+  class XmlHandler;
+
+  //! study to Python subinterpreter map
+  typedef QMap<int, SALOME_PYQT_PyInterp*> InterpMap;
+
+  static InterpMap           myInterpMap;  //!< study to Python subinterpreter map
+  SALOME_PYQT_PyInterp*      myInterp;     //!< current Python subinterpreter
+  PyObjWrapper               myModule;     //!< Python GUI module
+  static SALOME_PYQT_Module* myInitModule; //!< Python GUI being initialized (not zero only during the initialization)
+
+  XmlHandler*                myXmlHandler; //!< XML resource file parser
+  QMap<int, int>             myWindowsMap; //!< windows map
+  QStringList                myViewMgrList;//!< compatible view managers list
+
+  bool                       myLastActivateStatus; //!< latest module activation status
 
 public:
-  /* constructor */
   SALOME_PYQT_Module();
-  /* destructor */
   ~SALOME_PYQT_Module();
 
-  /* get module engine */
-  Engines::Component_var getEngine() const;
-
-  /******************************
-   * Inherited from SalomeApp_Module 
-   ******************************/
-
 public:
-  /* little trick : provide an access to being activated Python module from outside;
-     needed by the SalomePyQt library :(
-  */
   static SALOME_PYQT_Module* getInitModule();
 
-  /* initialization */
-  void            initialize  ( CAM_Application* );
-
-  /* getting windows list */
-  void            windows     ( QMap<int, int>& ) const;
-  /* getting compatible viewer managers list */
-  void            viewManagers( QStringList& ) const;
-
-  /* context popup menu request */
-  void            contextMenuPopup( const QString&, QPopupMenu*, QString& );
-
-  /* create preferences */
-  void            createPreferences();
-
-  /* get module engine IOR */
-  virtual QString engineIOR() const;
-
-  /* called when study desktop is activated */
-  virtual void    studyActivated();
-
-  /* returns default menu group */
-  static int             defaultMenuGroup();
-
-  /* working with toolbars : open protected methods */
-  int                    createTool( const QString& );
-  int                    createTool( const int, const int, const int = -1 );
-  int                    createTool( const int, const QString&, const int = -1 );
-  int                    createTool( QAction*, const int, const int = -1, const int = -1 );
-  int                    createTool( QAction*, const QString&, const int = -1, const int = -1 );
-
-  /* working with menus : open protected methods */
-  int                    createMenu( const QString&, const int, const int = -1, const int = -1, const int = -1, const bool = false );
-  int                    createMenu( const QString&, const QString&, const int = -1, const int = -1, const int = -1, const bool = false );
-  int                    createMenu( const int, const int, const int = -1, const int = -1, const bool = false );
-  int                    createMenu( const int, const QString&, const int = -1, const int = -1, const bool = false );
-  int                    createMenu( QAction*, const int, const int = -1, const int = -1, const int = -1, const bool = false );
-  int                    createMenu( QAction*, const QString&, const int = -1, const int = -1, const int = -1, const bool = false );
-
-  /* clear given menu */
-  bool                   clearMenu( const int = 0, const int = 0, const bool = true );
-
-  /* create separator : open protected method */
-  QAction*               createSeparator();
-
-  /* working with actions : open protected methods */
-  QAction*               action( const int ) const;
-  int                    actionId( const QAction* ) const;
-  QAction*               createAction( const int, const QString&, const QString&, const QString&,
-                                       const QString&, const int, const bool = false );
-  /* load icon from resource file */
-  QIconSet               loadIcon( const QString& fileName );
-
-  /* working with preferences : open protected methods */
-  int                    addGlobalPreference( const QString& );
-  int                    addPreference( const QString& );
-  int                    addPreference( const QString&, const int, const int = -1,
-                                       const QString& = QString::null,
-                                       const QString& = QString::null );
-  QVariant               preferenceProperty( const int, const QString& ) const;
-  void                   setPreferenceProperty( const int, const QString&, const QVariant& );
-
-  /* Show/hide menus/toolbars */
-  void                   setMenuShown( const bool );
-  void                   setToolShown( const bool );
-
-  /* Preferences changing (module) */
-  void                   preferencesChanged( const QString&, const QString& );
+  void                       initialize( CAM_Application* );
+  void                       windows( QMap<int, int>& ) const;
+  void                       viewManagers( QStringList& ) const;
+  void                       contextMenuPopup( const QString&, QMenu*, QString& );
+  void                       createPreferences();
+  QString                    engineIOR() const;
+  void                       studyActivated();
+  void                       preferencesChanged( const QString&, const QString& );
+
+  static int                 defaultMenuGroup();
+
+  int                        createTool( const QString& );
+  int                        createTool( const int, const int, const int = -1 );
+  int                        createTool( const int, const QString&, const int = -1 );
+  int                        createTool( QAction*, const int, 
+                                        const int = -1, const int = -1 );
+  int                        createTool( QAction*, const QString&, 
+                                        const int = -1, const int = -1 );
+
+  int                        createMenu( const QString&, const int, 
+                                        const int = -1, const int = -1, const int = -1 );
+  int                        createMenu( const QString&, const QString&, 
+                                        const int = -1, const int = -1, const int = -1 );
+  int                        createMenu( const int, const int, 
+                                        const int = -1, const int = -1 );
+  int                        createMenu( const int, const QString&, 
+                                        const int = -1, const int = -1 );
+  int                        createMenu( QAction*, const int, 
+                                        const int = -1, const int = -1, const int = -1 );
+  int                        createMenu( QAction*, const QString&, 
+                                        const int = -1, const int = -1, const int = -1 );
+
+  QAction*                   separator();
+
+  QAction*                   action( const int ) const;
+  int                        actionId( const QAction* ) const;
+  QAction*                   createAction( const int, const QString&, const QString&, 
+                                          const QString&, const QString&, const int, 
+                                          const bool = false, QObject* = 0 );
+  QtxActionGroup*            createActionGroup( const int, const bool );
+
+
+  QIcon                      loadIcon( const QString& fileName );
+
+  int                        addGlobalPreference( const QString& );
+  int                        addPreference( const QString& );
+  int                        addPreference( const QString&, const int, const int = LightApp_Preferences::Auto,
+                                           const QString& = QString(),
+                                           const QString& = QString() );
+  QVariant                   preferenceProperty( const int, const QString& ) const;
+  void                       setPreferenceProperty( const int, const QString&, 
+                                                   const QVariant& );
 
 public slots:
-  /* activation */
-  virtual bool    activateModule( SUIT_Study* );
-  /* deactivation */
-  virtual bool    deactivateModule( SUIT_Study* );
-
-  /* Preferences changing (application) */
-  void            preferenceChanged( const QString&, const QString&, const QString& );
+  virtual bool               activateModule( SUIT_Study* );
+  virtual bool               deactivateModule( SUIT_Study* );
+  void                       preferenceChanged( const QString&, 
+                                               const QString&, 
+                                               const QString& );
+  void                       onGUIEvent();
 
-  /******************************
-   * Internal methods
-   ******************************/
-
-public slots:
-  /* GUI action processing slots */
-  void            onGUIEvent();
-  void            onGUIEvent( int );
+  void                       onActiveViewChanged( SUIT_ViewWindow* );
+  void                       onViewClosed( SUIT_ViewWindow* );
+  void                       onViewCloned( SUIT_ViewWindow* );
 
 protected:
-  /* Menu processing */
-  bool            hasMenu( const QString&, const int );
-  void            registerMenu( const int, const int, const bool = false );
-  void            unregisterMenu( const int, const int );
-  bool            registered( const int, const int = 0 );
-  bool            isConstantMenu( const int, const int );
-
-protected slots:
-  void            onMenuHighlighted( int, int );
+  Engines::Component_var     getEngine() const;
 
 private:
-  /* internal initizalition */ 
-  void            init        ( CAM_Application* );
-  /* internal activation */ 
-  void            activate    ( SUIT_Study* );
-
-  /* getting status of last module activation */
-  bool            lastActivationStatus() const;
-
-  /* internal deactivation */ 
-  void            deactivate  ( SUIT_Study* );
-  /* customization */ 
-  void            customize   ( SUIT_Study* );
-  /* study activation */ 
-  void            studyChanged( SUIT_Study* );
-  /* context popup menu processing */
-  void            contextMenu( const QString&, QPopupMenu* );
-  /* GUI event processing */
-  void            guiEvent( const int );
-  /* Menu highlight processing */
-  void            menuHighlight( const int, const int );
-  /* Init preferences */
-  void            initPreferences();
-
-  /* initialize a Python subinterpreter */
-  void            initInterp  ( int );
-  /* import a Python GUI module */
-  void            importModule();
-  /* set workspace to Python GUI module */
-  void            setWorkSpace();
-
-  /* preferences changing */
-  void            prefChanged( const QString&, const QString& );
-
-  friend class SALOME_PYQT_XmlHandler;
+  void                       init( CAM_Application* );
+  void                       activate( SUIT_Study* );
+  void                       deactivate( SUIT_Study* );
+  bool                       lastActivationStatus() const;
+  void                       customize( SUIT_Study* );
+  void                       studyChanged( SUIT_Study* );
+  void                       contextMenu( const QString&, QMenu* );
+  void                       guiEvent( const int );
+  void                       initPreferences();
+  void                       prefChanged( const QString&, const QString& );
+
+  void                       initInterp  ( int );
+  void                       importModule();
+  void                       setWorkSpace();
+  
+  void                       activeViewChanged( const SUIT_ViewWindow* );
+  void                       viewClosed( const SUIT_ViewWindow* );
+  void                       viewCloned( const SUIT_ViewWindow* );
+  void                       connectView( const SUIT_ViewWindow* );
+
+  friend class XmlHandler;
 };
 
 #endif // SALOME_PYQT_MODULE_H