Salome HOME
Do not clear in neutral point correction.
[modules/shaper.git] / src / XGUI / XGUI_WorkshopListener.cpp
index 366336a1f4307ed65b504699ec1c7dfbf52af5bc..dff5b6209b7d8ef933479c1796d8521c9d294fa0 100755 (executable)
@@ -16,6 +16,7 @@
 #endif
 
 #include <ModuleBase_IModule.h>
+#include <ModuleBase_Events.h>
 
 #include <ModelAPI_Object.h>
 #include <ModelAPI_Events.h>
@@ -39,6 +40,7 @@
 #include <ModuleBase_Tools.h>
 #include <ModuleBase_IViewer.h>
 #include <ModuleBase_FilterFactory.h>
+#include <ModuleBase_WidgetSelector.h>
 
 #include <Config_FeatureMessage.h>
 #include <Config_PointerMessage.h>
@@ -83,7 +85,6 @@ void XGUI_WorkshopListener::initializeEventListening()
   //Initialize event listening
   Events_Loop* aLoop = Events_Loop::loop();
   aLoop->registerListener(this, Events_InfoMessage::errorID());  //!< Listening application errors.
-  aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OPERATION_LAUNCHED));
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_CREATED));
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
@@ -94,6 +95,7 @@ void XGUI_WorkshopListener::initializeEventListening()
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_UPDATE_VIEWER_BLOCKED));
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_UPDATE_VIEWER_UNBLOCKED));
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_EMPTY_AIS_PRESENTATION));
+  aLoop->registerListener(this, Events_Loop::eventByName(EVENT_UPDATE_BY_WIDGET_SELECTION));
 }
 
 //******************************************************
@@ -133,7 +135,15 @@ void XGUI_WorkshopListener::processEvent(const std::shared_ptr<Events_Message>&
     std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aUpdMsg =
         std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);
     onFeatureEmptyPresentationMsg(aUpdMsg);
+  } else if (theMessage->eventID() == Events_Loop::eventByName(EVENT_UPDATE_BY_WIDGET_SELECTION)) {
+    ModuleBase_ModelWidget* aWidget = workshop()->propertyPanel()->activeWidget();
+    if (aWidget) {
+      ModuleBase_WidgetSelector* aWidgetSelector = dynamic_cast<ModuleBase_WidgetSelector*>(aWidget);
+      if (aWidgetSelector)
+        myWorkshop->setSelected(aWidgetSelector->getAttributeSelection());
+    }
   }
+
   //Update property panel on corresponding message. If there is no current operation (no
   //property panel), or received message has different feature to the current - do nothing.
   else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED)) {
@@ -147,26 +157,6 @@ void XGUI_WorkshopListener::processEvent(const std::shared_ptr<Events_Message>&
       QApplication::restoreOverrideCursor();
     }
   }
-  //An operation passed by message. Start it, process and commit.
-  else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OPERATION_LAUNCHED)) {
-    std::shared_ptr<Config_PointerMessage> aPartSetMsg =
-        std::dynamic_pointer_cast<Config_PointerMessage>(theMessage);
-    //myPropertyPanel->cleanContent();
-    ModuleBase_Operation* anOperation = (ModuleBase_Operation*) aPartSetMsg->pointer();
-    XGUI_OperationMgr* anOperationMgr = workshop()->operationMgr();
-
-    if (anOperationMgr->startOperation(anOperation)) {
-      ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>(anOperation);
-      if (aFOperation) {
-        workshop()->propertyPanel()->updateContentWidget(aFOperation->feature());
-        workshop()->propertyPanel()->createContentPanel(aFOperation->feature());
-      }
-      if (!anOperation->getDescription()->hasXmlRepresentation()) {
-        if (anOperation->commit())
-          workshop()->updateCommandStatus();
-      }
-    }
-  } 
   else if (theMessage->eventID() == Events_Loop::eventByName(EVENT_SELFILTER_LOADED)) {
     std::shared_ptr<Config_SelectionFilterMessage> aMsg = 
       std::dynamic_pointer_cast<Config_SelectionFilterMessage>(theMessage);