Salome HOME
minor corrections for correct compilation
[modules/gui.git] / src / SalomeApp / SalomeApp_Module.cxx
index 9123d76f7084fc236ec2a537d46b4fadfa58db4d..721090edf8d9b36093f80cc2d9d37f9ed50aa736 100644 (file)
@@ -8,19 +8,20 @@
 #include "SalomeApp_Study.h"
 #include "SalomeApp_DataModel.h"
 #include "SalomeApp_Application.h"
-
-#include "LightApp_Preferences.h"
+#include "SalomeApp_Preferences.h"
 #include "SalomeApp_UpdateFlags.h"
 #include "SalomeApp_Operation.h"
 #include "SalomeApp_SwitchOp.h"
+#include "SalomeApp_ShowHideOp.h"
+
+#include <OB_Browser.h>
 
-#include "SUIT_Operation.h"
-#include "CAM_DataModel.h"
+#include <CAM_Study.h>
 
-#include "OB_Browser.h"
+#include <SUIT_MessageBox.h>
+#include <SUIT_ResourceMgr.h>
 
-#include <qstring.h>
-#include <qmap.h>
+#include <QtxPopupMgr.h>
 
 #include <SVTK_ViewWindow.h>
 #include <OCCViewer_ViewWindow.h>
 #include <GLViewer_ViewFrame.h>
 #include <GLViewer_ViewPort.h>
 #include <Plot2d_ViewWindow.h>
+#include <Plot2d_ViewFrame.h>
 
 /*!Constructor.*/
 SalomeApp_Module::SalomeApp_Module( const QString& name )
-: LightApp_Module( name ),
-mySwitchOp( 0 )
+: CAM_Module( name ),
+myPopupMgr( 0 ),
+mySwitchOp( 0 ),
+myDisplay( -1 ),
+myErase( -1 ),
+myDisplayOnly( -1 )
 {
 }
 
@@ -43,32 +49,132 @@ SalomeApp_Module::~SalomeApp_Module()
     delete mySwitchOp;
 }
 
-/*!Gets application.*/
-SalomeApp_Application* SalomeApp_Module::getApp() const
+/*!Initialize module.*/
+void SalomeApp_Module::initialize( CAM_Application* app )
 {
-  return (SalomeApp_Application*)application();
+  CAM_Module::initialize( app );
+
+  SUIT_ResourceMgr* resMgr = app ? app->resourceMgr() : 0;
+  if ( resMgr )
+    resMgr->raiseTranslators( name() );
 }
 
 /*!Activate module.*/
 bool SalomeApp_Module::activateModule( SUIT_Study* study )
 {
-  bool res = LightApp_Module::activateModule( study );
+  bool res = CAM_Module::activateModule( study );
+
+  if ( res && application() && application()->resourceMgr() )
+    application()->resourceMgr()->raiseTranslators( name() );
 
   if ( mySwitchOp == 0 )
     mySwitchOp = new SalomeApp_SwitchOp( this );
-
+    
   return res;
 }
 
 /*!Deactivate module.*/
-bool SalomeApp_Module::deactivateModule( SUIT_Study* study )
+bool SalomeApp_Module::deactivateModule( SUIT_Study* )
 {
-  bool res = LightApp_Module::deactivateModule( study );
-
   delete mySwitchOp;
   mySwitchOp = 0;
+  
+  return true;
+}
 
-  return res;
+/*!NOT IMPLEMENTED*/
+void SalomeApp_Module::selectionChanged()
+{
+}
+
+/*!NOT IMPLEMENTED*/
+void SalomeApp_Module::MenuItem()
+{
+}
+
+/*!NOT IMPLEMENTED*/
+void SalomeApp_Module::windows( QMap<int, int>& ) const
+{
+}
+
+/*!NOT IMPLEMENTED*/
+void SalomeApp_Module::viewManagers( QStringList& ) const
+{
+}
+
+/*!NOT IMPLEMENTED*/
+void SalomeApp_Module::createPreferences()
+{
+}
+
+/*!NOT IMPLEMENTED*/
+void SalomeApp_Module::preferencesChanged( const QString&, const QString& )
+{
+}
+
+/*!Gets application.*/
+SalomeApp_Application* SalomeApp_Module::getApp() const
+{
+  return (SalomeApp_Application*)application();
+}
+
+/*!NOT IMPLEMENTED*/
+void SalomeApp_Module::onModelOpened()
+{
+}
+
+/*!NOT IMPLEMENTED*/
+void SalomeApp_Module::onModelSaved()
+{
+}
+
+/*!NOT IMPLEMENTED*/
+void SalomeApp_Module::onModelClosed()
+{
+}
+
+/*!Gets popup manager.(create if not exist)*/
+QtxPopupMgr* SalomeApp_Module::popupMgr()
+{
+  if ( !myPopupMgr )
+  {
+    myPopupMgr = new QtxPopupMgr( 0, this );
+
+    QPixmap p;
+    SUIT_Desktop* d = application()->desktop();
+    
+    QAction 
+      *disp = createAction( -1, tr( "TOP_DISPLAY" ), p, tr( "MEN_DISPLAY" ), tr( "STB_DISPLAY" ),
+                           0, d, false, this, SLOT( onShowHide() ) ),
+      *erase = createAction( -1, tr( "TOP_ERASE" ), p, tr( "MEN_ERASE" ), tr( "STB_ERASE" ),
+                            0, d, false, this, SLOT( onShowHide() ) ),
+      *dispOnly = createAction( -1, tr( "TOP_DISPLAY_ONLY" ), p, tr( "MEN_DISPLAY_ONLY" ), tr( "STB_DISPLAY_ONLY" ),
+                               0, d, false, this, SLOT( onShowHide() ) );
+    myDisplay     = actionId( disp );
+    myErase       = actionId( erase );
+    myDisplayOnly = actionId( dispOnly );
+
+    myPopupMgr->insert( disp, -1, 0 ); 
+    myPopupMgr->insert( erase, -1, 0 );
+    myPopupMgr->insert( dispOnly, -1, 0 );
+    myPopupMgr->insert( separator(), -1, 0 );
+
+    QString uniform = "( count( $component ) = 1 ) and ( component != activeModule ) and ( activeModule = '%1' )";
+    uniform = uniform.arg( name() );
+    myPopupMgr->setRule( disp, QString( "( not isVisible ) and " ) + uniform, true );
+    myPopupMgr->setRule( erase, QString( "( isVisible ) and " ) + uniform, true );
+    myPopupMgr->setRule( dispOnly, uniform, true );
+  }
+  return myPopupMgr;
+}
+
+/*!Gets preferences.*/
+SalomeApp_Preferences* SalomeApp_Module::preferences() const
+{
+  SalomeApp_Preferences* pref = 0;
+  if ( getApp() )
+    pref = getApp()->preferences();
+  return pref;
 }
 
 /*!Create new instance of data model and return it.*/
@@ -77,6 +183,75 @@ CAM_DataModel* SalomeApp_Module::createDataModel()
   return new SalomeApp_DataModel(this);
 }
 
+/*!Update object browser.*/
+void SalomeApp_Module::updateObjBrowser( bool updateDataModel, SUIT_DataObject* root )
+{
+  if( updateDataModel )
+    if( CAM_DataModel* aDataModel = dataModel() )
+      if( SalomeApp_DataModel* aModel = dynamic_cast<SalomeApp_DataModel*>( aDataModel ) )
+        aModel->update( 0, dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
+  getApp()->objectBrowser()->updateTree( root );
+}
+
+/*!Context menu popup.*/
+void SalomeApp_Module::contextMenuPopup( const QString& client, QPopupMenu* menu, QString& /*title*/ )
+{
+  SalomeApp_Selection* sel = createSelection();
+  sel->init( client, getApp()->selectionMgr() );
+  popupMgr()->updatePopup( menu, sel );
+  delete sel;
+}
+
+/*!Create and return instance of SalomeApp_Selection.*/
+SalomeApp_Selection* SalomeApp_Module::createSelection() const
+{
+  return new SalomeApp_Selection();
+}
+
+/*!Add preference to preferences.*/
+int SalomeApp_Module::addPreference( const QString& label )
+{
+  SalomeApp_Preferences* pref = preferences();
+  if ( !pref )
+    return -1;
+
+  int catId = pref->addPreference( moduleName(), -1 );
+  if ( catId == -1 )
+    return -1;
+                             
+  return pref->addPreference( label, catId );
+}
+
+/*!Add preference to preferences.*/
+int SalomeApp_Module::addPreference( const QString& label, const int pId, const int type,
+                                    const QString& section, const QString& param )
+{
+  SalomeApp_Preferences* pref = preferences();
+  if ( !pref )
+    return -1;
+
+  return pref->addPreference( moduleName(), label, pId, type, section, param );
+}
+
+/*!Gets property of preferences.*/
+QVariant SalomeApp_Module::preferenceProperty( const int id, const QString& prop ) const
+{
+  QVariant var;
+  SalomeApp_Preferences* pref = preferences();
+  if ( pref )
+    var = pref->itemProperty( id, prop );
+  return var;
+}
+
+
+/*!Set property of preferences.*/
+void SalomeApp_Module::setPreferenceProperty( const int id, const QString& prop, const QVariant& var )
+{
+  SalomeApp_Preferences* pref = preferences();
+  if ( pref )
+    pref->setItemProperty( id, prop, var );
+}
+
 /*!
  * \brief Update something in accordance with update flags
   * \param theFlags - update flags
@@ -90,11 +265,8 @@ void SalomeApp_Module::update( const int theFlags )
   if ( theFlags & UF_Model )
   {
     if( CAM_DataModel* aDataModel = dataModel() )
-      if( SalomeApp_DataModel* aModel = dynamic_cast<SalomeApp_DataModel*>( aDataModel ) ) {
-        SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() );
-        if (aStudy)
-          aModel->update( 0, aStudy );
-      }
+      if( SalomeApp_DataModel* aModel = dynamic_cast<SalomeApp_DataModel*>( aDataModel ) )
+        aModel->update( 0, dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
   }
   if ( theFlags & UF_ObjBrowser )
     getApp()->objectBrowser()->updateTree( 0 );
@@ -165,9 +337,19 @@ void SalomeApp_Module::startOperation( const int id )
 * automatically from startOperation. You may redefine this method in concrete module to
 * create operations. 
 */
-SalomeApp_Operation* SalomeApp_Module::createOperation( const int /*id*/ ) const
+SalomeApp_Operation* SalomeApp_Module::createOperation( const int id ) const
 {
-  return 0;
+  if( id==-1 )
+    return 0;
+
+  if( id==myDisplay )
+    return new SalomeApp_ShowHideOp( SalomeApp_ShowHideOp::DISPLAY );
+  else if( id==myErase )
+    return new SalomeApp_ShowHideOp( SalomeApp_ShowHideOp::ERASE );
+  else if( id==myDisplayOnly )
+    return new SalomeApp_ShowHideOp( SalomeApp_ShowHideOp::DISPLAY_ONLY );
+  else
+    return 0;
 }
 
 /*!
@@ -205,3 +387,19 @@ void SalomeApp_Module::onOperationDestroyed()
       }
   }
 }
+
+SalomeApp_Displayer* SalomeApp_Module::displayer()
+{
+  return 0;
+}
+
+void SalomeApp_Module::onShowHide()
+{
+  if( !sender()->inherits( "QAction" ) || !popupMgr() )
+    return;
+
+  QAction* act = ( QAction* )sender();
+  int id = actionId( act );
+  if( id!=-1 )
+    startOperation( id );
+}