]> SALOME platform Git repositories - modules/med.git/commitdiff
Salome HOME
[MEDCalc] selecting a presentation activates the proper view.
authorabn <adrien.bruneton@cea.fr>
Thu, 7 Jul 2016 09:24:22 +0000 (11:24 +0200)
committerabn <adrien.bruneton@cea.fr>
Wed, 27 Jul 2016 09:43:46 +0000 (11:43 +0200)
idl/MEDPresentationManager.idl
src/MEDCalc/cmp/MEDPresentation.cxx
src/MEDCalc/cmp/MEDPresentation.hxx
src/MEDCalc/cmp/MEDPresentationManager_i.cxx
src/MEDCalc/cmp/MEDPresentationManager_i.hxx
src/MEDCalc/gui/MEDModule.cxx
src/MEDCalc/gui/MEDModule.hxx

index c797e4036b2bfdf0c0fc27e824662328fc99f96f..86bc0b21f99399260891c2462eea05107f1d44d7 100644 (file)
@@ -140,7 +140,9 @@ module MEDCALC
     void updatePointSprite(in long presId, in PointSpriteParameters params);
 
     boolean removePresentation(in long presId);
-
+    
+    // Helper functions to keep GUI sync
+    boolean activateView(in long presentationId);
   };
 
 };
index 2fd8ff90d8637bf75f5037447daabd9189d067e8..48305be826ccb315fcda4adcfdbef4c0c288bc16 100644 (file)
@@ -186,3 +186,13 @@ MEDPresentation::GeneratePythonId()
   static int INIT_ID = 0;
   return INIT_ID++;
 }
+
+void
+MEDPresentation::activateView() const
+{
+  PyLockWrapper lock;
+  std::ostringstream oss;
+  oss << "pvs.SetActiveView(__view" << _renderViewPyId << ");";
+  std::cerr << oss.str() << std::endl;
+  PyRun_SimpleString(oss.str().c_str());
+}
index c407be15846e423cbcd6ebef82e26a6a7d7ad7b2..d6458d2f671fa0df122161e2cf8d926327026c8c 100644 (file)
@@ -46,6 +46,8 @@ public:
   void setProperty(const std::string& propName, const std::string& propValue);
   const std::string getProperty(const std::string& propName) const;
 
+  void activateView() const;
+
 protected:
   typedef std::pair<int, PyObject *> PyObjectId;
 
@@ -60,6 +62,7 @@ protected:
   void pushAndExecPyLine(const std::string & lin);
 
   MEDPresentation::TypeID getID() const { return _fieldHandlerId; }
+  long getPyViewID() const { return _renderViewPyId; }
 
   static int GeneratePythonId();
 
index a2e3cfb0925649157def5f5f9dc42e781cf19f27..563979e1686ca94275cdea9f42ae200f5a38798e 100644 (file)
@@ -182,6 +182,20 @@ MEDPresentationManager_i::removePresentation(MEDPresentation::TypeID presentatio
   return true;
 }
 
+CORBA::Boolean
+MEDPresentationManager_i::activateView(MEDPresentation::TypeID presentationID)
+{
+  std::map<MEDPresentation::TypeID, MEDPresentation*>::const_iterator citr = _presentations.find(presentationID);
+  if (citr == _presentations.end()) {
+    std::cerr << "getPresentationPyViewId(): presentation not found!!" << std::endl;
+    return false;
+  }
+  MEDPresentation* presentation = (*citr).second;
+
+  presentation->activateView();
+  return true;
+}
+
 MEDPresentation::TypeID
 MEDPresentationManager_i::_getActivePresentationId() const
 {
index e7ec9677cf22ed0ca7dec49f018e5c4b684d2d7c..0b073ebd57acd65a61dc236fd7f691bc7e9fc237 100644 (file)
@@ -58,6 +58,8 @@ class MEDPresentationManager_i: public POA_MEDCALC::MEDPresentationManager,
 
   MEDCALC_EXPORT CORBA::Boolean removePresentation(MEDPresentation::TypeID presentationID);
 
+  MEDCALC_EXPORT CORBA::Boolean activateView(MEDPresentation::TypeID presentationID);
+
  private:
   MEDPresentationManager_i();
   virtual ~MEDPresentationManager_i();
index 83443ad7ee56d26f0ca18c8380800914c89bfaf2..8662acdf00d97415a8a32fd97e49337bc1f10170 100644 (file)
@@ -45,6 +45,9 @@
 #include "PVViewer_GUIElements.h"
 #endif
 
+#include "MEDFactoryClient.hxx"
+#include "MEDPresentationManager_i.hxx"
+
 #include <sstream>
 
 #include <pqAnimationManager.h>
@@ -52,7 +55,9 @@
 
 
 //! The only instance of the reference to engine
-MED_ORB::MED_Gen_var MEDModule::myEngine;
+MED_ORB::MED_Gen_var MEDModule::_MED_engine;
+//! The only instance of the MEDPresentationManager
+MEDCALC::MEDPresentationManager_ptr MEDModule::_presManager;
 
 MEDModule::MEDModule() :
   SalomeApp_Module("MED"), _studyEditor(0),
@@ -83,18 +88,23 @@ MED_ORB::MED_Gen_var
 MEDModule::engine()
 {
   init(); // initialize engine, if necessary
-  return myEngine;
+  return _MED_engine;
 }
 
 void
 MEDModule::init()
 {
   // initialize MED module engine (load, if necessary)
-  if ( CORBA::is_nil( myEngine ) ) {
+  if ( CORBA::is_nil( _MED_engine ) ) {
     Engines::EngineComponent_var comp =
       SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "MED" );
-    myEngine = MED_ORB::MED_Gen::_narrow( comp );
+    _MED_engine = MED_ORB::MED_Gen::_narrow( comp );
   }
+
+  // Retrieve MEDFactory to get MEDPresentationManager (sometimes
+  if ( ! _presManager ) {
+      _presManager = MEDFactoryClient::getFactory()->getPresentationManager();
+    }
 }
 
 void
@@ -119,7 +129,7 @@ QString
 MEDModule::engineIOR() const
 {
   init(); // initialize engine, if necessary
-  CORBA::String_var anIOR = getApp()->orb()->object_to_string( myEngine.in() );
+  CORBA::String_var anIOR = getApp()->orb()->object_to_string( _MED_engine.in() );
   return QString( anIOR.in() );
 }
 
@@ -171,7 +181,7 @@ MEDModule::createPreferences()
 bool
 MEDModule::activateModule( SUIT_Study* theStudy )
 {
-  if ( CORBA::is_nil( myEngine ) )
+  if ( CORBA::is_nil( _MED_engine ) )
     return false;
 
   // call parent implementation
@@ -381,15 +391,13 @@ MEDModule::onClick(const QModelIndex & index)
   if (!itemClickGeneric(index, name, fieldId, presId))
     return;
 
-  STDLOG("Presentation selection (should activate view): NOT IMPLEMENTED YET");
-  STDLOG("  Presention infos:");
+  STDLOG("Presentation selection (activate view)");
   std::ostringstream oss;
   oss << fieldId << " / " << presId;
   STDLOG("    - Field id / pres id:   " + oss.str());
   STDLOG("    - Presentation name: " + name);
 
-  // TODO: activate corresponding view
-
+  _presManager->activateView(presId);
 }
 
 void
index 38c624e885985941fb28111533115203956d9bd3..4c783a6bc06ce9c05428915d0437cc91cbb3a923 100644 (file)
@@ -41,6 +41,7 @@
 
 class SalomeApp_Application;
 class PVViewer_GUIElements;
+class MEDPresentationManager_i;
 
 /*!
  * This class defines the gui of the MED module.
@@ -106,8 +107,12 @@ private:
   XmedDataModel* _xmedDataModel;
   PresentationController* _presentationController;
   ProcessingController* _processingController;
-  static MED_ORB::MED_Gen_var myEngine;
   PVViewer_GUIElements*   _pvGuiElements;
+
+  static MED_ORB::MED_Gen_var _MED_engine;
+
+  // GUI needs to talk directly to the pres manager to activate a view, get some params, etc ...:
+  static MEDCALC::MEDPresentationManager_ptr _presManager;
 };
 
 #endif