Salome HOME
GUI callback: add MEDPresentation
authorCédric Aguerre <cedric.aguerre@edf.fr>
Tue, 4 Aug 2015 16:50:15 +0000 (18:50 +0200)
committerCédric Aguerre <cedric.aguerre@edf.fr>
Tue, 4 Aug 2015 16:50:15 +0000 (18:50 +0200)
14 files changed:
idl/MEDEventListener.idl
idl/MEDPresentationManager.idl
src/MEDCalc/cmp/MEDFactoryClient.cxx
src/MEDCalc/cmp/MEDFactoryClient.hxx
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/DatasourceController.cxx
src/MEDCalc/gui/DatasourceController.hxx
src/MEDCalc/gui/MEDEventListener_i.cxx
src/MEDCalc/gui/WorkspaceController.cxx
src/MEDCalc/tui/medevents.py
src/MEDCalc/tui/medpresentation.py

index fd6fc6d33bfc7d2de881a3dec879aaf59fea3c66..5d4df921144f774aab9be6d041387e48b72dd102 100644 (file)
@@ -33,12 +33,13 @@ module MEDCALC
     EVENT_UPDATE_FIELD,
     EVENT_CLEAN_WORKSPACE,
     EVENT_ADD_DATASOURCE,
+    EVENT_ADD_PRESENTATION,
     EVENT_UNKNOWN
   };
 
   struct MedEvent {
     MedEventType  type;
-    long          fieldid;
+    long          dataId;
     string        filename;
   };
 
index 83a05392e03e61fa2555c94bdc59093b296f6cfa..2d744bbceb80247a327f8c9f873b7cae66c3a930 100644 (file)
@@ -42,7 +42,8 @@ module MEDCALC
 
     long makeScalarMap(in ScalarMapParameters params);
     void setPresentationProperty(in long presId, in string propName, in string propValue);
-    
+    string getPresentationProperty(in long presId, in string propName);
+
   };
 
 };
index d417e593636567831fa7e7c05aefce272fdc7e63..2066cead98af4c2eccca94901495dbb24b233f9b 100644 (file)
@@ -58,4 +58,16 @@ namespace MEDFactoryClient {
     }
     return calculator;
   }
+
+  /*!
+   * This returns a singleton (static) instance of the MED presentation manager.
+   */
+  MEDCALC::MEDPresentationManager_ptr getPresentationManager() {
+    static MEDCALC::MEDPresentationManager_ptr presentationManager;
+    if(CORBA::is_nil(presentationManager)){
+      presentationManager = getFactory()->getPresentationManager();
+    }
+    return presentationManager;
+  }
+
 }
index 054f869bed23aa5280d3d66bbd962e7f523624f9..84c97eef3f66ba7d0e66c0dc067312d0e5a7a804 100644 (file)
@@ -39,6 +39,7 @@ namespace MEDFactoryClient {
   MEDCALC_EXPORT MEDCALC::MEDFactory_ptr getFactory();
   MEDCALC_EXPORT MEDCALC::MEDDataManager_ptr getDataManager();
   MEDCALC_EXPORT MEDCALC::MEDCalculator_ptr getCalculator();
+  MEDCALC_EXPORT MEDCALC::MEDPresentationManager_ptr getPresentationManager();
 }
 
 #endif // _MEDFACTORY_CLIENT_HXX_
index 3c1956cb5b4ef04a1f287f9c6d05413e047f57cb..7c129c23c2034f13fb634605b17eca4f60501d1d 100644 (file)
@@ -37,12 +37,27 @@ void MEDPresentation::pushInternal(PyObject * obj, PyObject * disp)
   _display.push_back(disp);
 }
 
-void MEDPresentation::setProperty(const char * propName, const char * propValue)
+void MEDPresentation::setProperty(const std::string& propName, const std::string& propValue)
 {
   // LIMITED!!! For now switch the first display element to Wireframe
-
+  /*
   PyLockWrapper lock;
   PyObject_CallMethod(_display[0], (char*)"SetRepresentationType", (char*)"(s)", "Wireframe");
+  */
+
+  _properties[propName] = propValue;
+}
+
+const std::string
+MEDPresentation::getProperty(const std::string& propName)
+{
+  if (_properties.find(propName) != _properties.end()) {
+    return _properties[propName];
+  }
+  else {
+    std::cerr << "getProperty(): no property named " << propName << std::endl;
+    return std::string();
+  }
 }
 
 PyObject * MEDPresentation::getPythonObjectFromMain(const char * python_var)
index d7754fd7d3964e656acca5a4e97d0dd55b839cae..ef1bdf7910b1db8edf0daac6d9d10abacf72148e 100644 (file)
 #include CORBA_SERVER_HEADER(MEDPresentationManager)
 
 #include <vector>
+#include <map>
 #include <string>
 
 class MEDCALC_EXPORT MEDPresentation
 {
-public:
   friend class MEDPresentationManager_i;
 
-  MEDPresentation(MEDCALC::FieldHandler* fieldHdl):
-    _fieldHandler(fieldHdl), _pipeline(0), _display(0)
-  {}
+public:
+
   virtual ~MEDPresentation() {}
 
-  void setProperty(const char * propName, const char * propValue);
+  void setProperty(const std::string& propName, const std::string& propValue);
+  const std::string getProperty(const std::string& propName);
   std::string getFieldTypeString();
 
 protected:
 
+  MEDPresentation(MEDCALC::FieldHandler* fieldHdl):
+    _fieldHandler(fieldHdl), _pipeline(0), _display(0), _properties()
+  {}
+
   void generatePipeline();
   virtual void internalGeneratePipeline() = 0;
   PyObject * getPythonObjectFromMain(const char * var);
@@ -61,6 +65,9 @@ protected:
 
   ///! Corresponding display object, if any:
   std::vector< PyObject * > _display;
+
+  ///! Presentation properties <key,value>
+  std::map<std::string, std::string> _properties;
 };
 
 class MEDCALC_EXPORT MEDPresentationScalarMap :  public MEDPresentation
index 47cca67da0cd6293c7c092f93c4dcd897446b94c..a268f47f84e3a569be08c8707ff991f52b7d984e 100644 (file)
@@ -56,7 +56,7 @@ TypeID MEDPresentationManager_i::GenerateID()
 #include <iostream>
 
 void
-MEDPresentationManager_i::setPresentationProperty(TypeID presentationID, const char * propName, const char *  propValue)
+MEDPresentationManager_i::setPresentationProperty(TypeID presentationID, const char * propName, const char * propValue)
 {
   if (_presentations.find(presentationID) != _presentations.end())
     {
@@ -69,6 +69,19 @@ MEDPresentationManager_i::setPresentationProperty(TypeID presentationID, const c
     }
 }
 
+char*
+MEDPresentationManager_i::getPresentationProperty(TypeID presentationID, const char* propName)
+{
+  if (_presentations.find(presentationID) != _presentations.end()) {
+    MEDPresentation* pres = _presentations[presentationID];
+    return (char*) pres->getProperty(propName).c_str();
+  }
+  else {
+    std::cerr << "getPresentationProperty(): presentation not found!!" << std::endl;
+    return (char*) "";
+  }
+}
+
 TypeID
 MEDPresentationManager_i::makeScalarMap(const MEDCALC::ScalarMapParameters& params)
 {
index fca4267eab31515341011b2e8d766f89e0b5b3da..1263f88743caedf0ba8d79abe176838a3040533c 100644 (file)
@@ -29,6 +29,7 @@
 #include "MEDCALC.hxx"
 
 #include <vector>
+#include <string>
 
 typedef ::CORBA::Long TypeID;
 
@@ -42,7 +43,8 @@ class MEDCALC_EXPORT MEDPresentationManager_i: public POA_MEDCALC::MEDPresentati
   static MEDPresentationManager_i* getInstance();
 
   TypeID makeScalarMap(const MEDCALC::ScalarMapParameters&);
-  void setPresentationProperty(TypeID presentationID, const char * propName, const char *  propValue);
+  void setPresentationProperty(TypeID presentationID, const char * propName, const char * propValue);
+  char* getPresentationProperty(TypeID presentationID, const char* propName);
 
  private:
   MEDPresentationManager_i();
index 0cde0a66b6f261aa4a9e5ef4df62b805eaa6fe5d..4d7bc8b8e27ce7bbacad5bbb903b10a386c43503 100644 (file)
@@ -179,10 +179,25 @@ DatasourceController::updateTreeViewWithNewDatasource(const MEDCALC::DatasourceH
       _studyEditor->setIcon(soFieldseries,tr("ICO_DATASOURCE_FIELD").toStdString().c_str());
       _studyEditor->setParameterInt(soFieldseries,OBJECT_ID,fieldseriesHandler.id);
       _studyEditor->setParameterBool(soFieldseries,OBJECT_IS_IN_WORKSPACE,false);
+      //std::cout << "soFieldseries.GetIOR(): " << soFieldseries._retn()->GetIOR() << std::endl;
+      //std::cout << _studyEditor->findObject(soFieldseries._retn()->GetIOR())->GetIOR() << std::endl;
+      std::cout << "soFieldseries.GetName(): " << soFieldseries._retn()->GetName() << std::endl;
+
     }
   }
 }
 
+void
+DatasourceController::updateTreeViewWithNewPresentation(long presentationId)
+{
+  if (presentationId < 0) {
+    return;
+  }
+
+  std::string name = MEDFactoryClient::getPresentationManager()->getPresentationProperty(presentationId, "name");
+
+}
+
 void DatasourceController::OnAddDatasource()
 {
   // Dialog to get the filename where the input data are read from
@@ -568,4 +583,8 @@ DatasourceController::processWorkspaceEvent(const MEDCALC::MedEvent* event)
     this->updateTreeViewWithNewDatasource(datasourceHandler);
     _salomeModule->updateObjBrowser(true);
   }
+  else if ( event->type == MEDCALC::EVENT_ADD_PRESENTATION ) {
+    this->updateTreeViewWithNewPresentation(event->dataId);
+    _salomeModule->updateObjBrowser(true);
+  }
 }
index a1f0b6fdf2866da383588b368bcc65c9fbbc061f..09ecdc140c80e164131e65698bbc526f4441f953 100644 (file)
@@ -27,6 +27,7 @@
 #include CORBA_CLIENT_HEADER(MEDDataManager)
 #include <StandardApp_Module.hxx>
 #include <SALOME_AppStudyEditor.hxx>
+#include <MEDPresentation.hxx>
 
 #include <map>
 
@@ -57,7 +58,8 @@ typedef struct {
     EVENT_VIEW_OBJECT_SCALAR_MAP,
     // these ones forward actions to workspace (and then to python console)
     EVENT_ADD_DATASOURCE,
-    EVENT_ADD_IMAGE_AS_DATASOURCE
+    EVENT_ADD_IMAGE_AS_DATASOURCE,
+    EVENT_ADD_PRESENTATION
   };
   int eventtype;
   XmedDataObject * objectdata;
@@ -100,6 +102,7 @@ private:
   void visualize(DatasourceEvent::EventType);
   void addDatasource(const char* filename);
   void updateTreeViewWithNewDatasource(const MEDCALC::DatasourceHandler*);
+  void updateTreeViewWithNewPresentation(long presentationId);
 
 private:
   StandardApp_Module * _salomeModule;
index ae9291e04cc1ddf26c8233d127193ecdf8ed0a06..a95d6d365dba3ad784fc10785e367d52aa6c7ed3 100644 (file)
@@ -47,7 +47,7 @@ MEDEventListener_i::~MEDEventListener_i()
 }
 
 void MEDEventListener_i::processMedEvent(const MEDCALC::MedEvent & event) {
-  LOG("Start processing event for field id="<<event.fieldid);
+  LOG("Start processing event for field id="<<event.dataId);
 
   // This function must be executed as fast as possible because the
   // CORBA request is a synchronous call. Then we just emit a Qt
index 153a30785b7e81ea4bbd8d36b4bfacd267b4c6a6..c7d281002520951dd0e440aec893bb3d2dd6784f 100644 (file)
@@ -253,7 +253,7 @@ void WorkspaceController::_importFieldIntoConsole(MEDCALC::FieldHandler * fieldH
  */
 void WorkspaceController::processMedEvent(const MEDCALC::MedEvent * event) {
   STDLOG("WorkspaceController::processMedEvent");
-  STDLOG("fieldid  :"<<event->fieldid);
+  STDLOG("dataId  :"<<event->dataId);
 
   XmedDataModel * dataModel = (XmedDataModel *)this->getDataModel();
   if ( dataModel == NULL ) {
@@ -267,7 +267,7 @@ void WorkspaceController::processMedEvent(const MEDCALC::MedEvent * event) {
   else if ( event->type == MEDCALC::EVENT_PUT_IN_WORKSPACE ) {
     STDLOG("add new field");
     MEDCALC::FieldHandler * fieldHandler =
-      MEDFactoryClient::getDataManager()->getFieldHandler(event->fieldid);
+      MEDFactoryClient::getDataManager()->getFieldHandler(event->dataId);
 
     XmedDataObject * dataObject = (XmedDataObject *)dataModel->newDataObject();
     dataObject->setFieldHandler(*fieldHandler);
@@ -278,7 +278,7 @@ void WorkspaceController::processMedEvent(const MEDCALC::MedEvent * event) {
     std::map<string, DataObject *>::iterator itr = dataModel->begin();
     for ( ; itr != dataModel->end(); ++itr) {
       XmedDataObject* obj = dynamic_cast<XmedDataObject*>(itr->second);
-      if (obj->getFieldHandler()->id == event->fieldid) {
+      if (obj->getFieldHandler()->id == event->dataId) {
         std::string itemNameId = obj->getNameId();
         this->getDataTreeModel()->removeData(obj);
         dataModel->removeDataObject(itemNameId);
@@ -299,6 +299,9 @@ void WorkspaceController::processMedEvent(const MEDCALC::MedEvent * event) {
   else if ( event->type == MEDCALC::EVENT_ADD_DATASOURCE ) {
     emit workspaceSignal(event); // forward to DatasourceController
   }
+  else if ( event->type == MEDCALC::EVENT_ADD_PRESENTATION ) {
+    emit workspaceSignal(event); // forward to DatasourceController
+  }
 
 }
 
index d5e0f212c829cc4042c9be5efdb9bcde784c6f45..2feb1645d3f7aa388579badd44fe53dbcf909e06 100644 (file)
@@ -83,8 +83,8 @@ connectEventListener()
 # that they could be used in another context than the FieldProxy instances
 import MEDCALC
 
-def __notifyGui(type, fieldId=-1, filename=""):
-  medEvent = MEDCALC.MedEvent(type, fieldId, filename)
+def __notifyGui(eventType, dataId=-1, filename=""):
+  medEvent = MEDCALC.MedEvent(eventType, dataId, filename)
   if not eventListenerIsRunning(): return
 
   # Notify the GUI of the update event
@@ -112,3 +112,6 @@ def notifyGui_cleanWorkspace():
 def notifyGui_addDatasource(filename):
   __notifyGui(MEDCALC.EVENT_ADD_DATASOURCE, -1, filename)
 #
+def notifyGui_addPresentation(presentation_id):
+  __notifyGui(MEDCALC.EVENT_ADD_PRESENTATION, presentation_id)
+#
index c0a158e9d86361de1b51b381145190281f7ed96b..fad2d9680eba58c39e90721b0cbf545d6abdff0a 100644 (file)
@@ -19,6 +19,7 @@
 
 import medcalc
 import MEDCALC
+from medcalc.medevents import notifyGui_addPresentation
 
 __manager = medcalc.medcorba.factory.getPresentationManager()
 
@@ -31,8 +32,8 @@ def MakeScalarMap(proxy, viewMode=MEDCALC.VIEW_MODE_REPLACE):
   print "viewMode:", viewMode, " [", type(viewMode), "]"
 
   params = MEDCALC.ScalarMapParameters(proxy.id, viewMode)
-  __manager.makeScalarMap(params)
-
+  presentation_id = __manager.makeScalarMap(params)
+  notifyGui_addPresentation(presentation_id)
 #
 
 def MakeIsoSurface():