Salome HOME
Issue #3150: Turn On/Off Isos for multi-selection
[modules/shaper.git] / src / XGUI / XGUI_ObjectsBrowser.cpp
index 2781c51f67fd90b73146ddc1790dfa1bacbab7dd..75543ff5c9d92d572f1c6357e80a01c3429c264e 100644 (file)
@@ -31,6 +31,7 @@
 #include <ModuleBase_ITreeNode.h>
 
 #include <XGUI_Workshop.h>
+#include <XGUI_Displayer.h>
 
 #include <QLayout>
 #include <QLineEdit>
@@ -227,75 +228,37 @@ void XGUI_DataTree::processHistoryChange(const QModelIndex& theIndex)
     update(aModel->index(i, 1, aParent));
     update(aModel->index(i, 2, aParent));
   }
+  XGUI_ObjectsBrowser* aObjBrowser = qobject_cast<XGUI_ObjectsBrowser*>(parent());
+  aObjBrowser->workshop()->displayer()->updateViewer();
 }
 
 void XGUI_DataTree::processEyeClick(const QModelIndex& theIndex)
 {
-  static Events_Loop* aLoop = Events_Loop::loop();
-  static Events_ID EVENT_DISP = aLoop->eventByName(EVENT_OBJECT_TO_REDISPLAY);
-  static const ModelAPI_EventCreator* aECreator = ModelAPI_EventCreator::get();
-
+  XGUI_ObjectsBrowser* aObjBrowser = qobject_cast<XGUI_ObjectsBrowser*>(parent());
   XGUI_DataModel* aModel = dataModel();
   ObjectPtr aObj = aModel->object(theIndex);
   if (aObj.get()) {
-    XGUI_ObjectsBrowser* aObjBrowser = qobject_cast<XGUI_ObjectsBrowser*>(parent());
-    ResultFieldPtr aField = std::dynamic_pointer_cast<ModelAPI_ResultField>(aObj);
-    if (aField.get()) {
-      bool toDisplay = !aField->isDisplayed();
-      aField->setDisplayed(toDisplay);
-      if (toDisplay) {
-        for (int i = 0; i < aField->stepsSize(); i++) {
-          aField->step(i)->setDisplayed(false);
-        }
-      }
-      Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
-    }
-    else {
-      FieldStepPtr aStep =
-        std::dynamic_pointer_cast<ModelAPI_ResultField::ModelAPI_FieldStep>(aObj);
-      if (aStep.get()) {
-        // Only one step from a field can be visible at once
-        bool toDisplay = !aStep->isDisplayed();
-        if (toDisplay) {
-          int aId = aStep->id();
-          ModelAPI_ResultField* aField = aStep->field();
-          aField->setDisplayed(false);
-          for (int i = 0; i < aField->stepsSize(); i++) {
-            aField->step(i)->setDisplayed(i == aId);
-          }
-        }
-        else {
-          aStep->setDisplayed(false);
-          aECreator->sendUpdated(aStep, EVENT_DISP);
-        }
-        Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
-      }
-      else {
-        ResultPtr aResObj = std::dynamic_pointer_cast<ModelAPI_Result>(aObj);
-        if (aResObj.get()) {
-          std::set<ObjectPtr> anObjects;
-          anObjects.insert(aResObj);
-
-          bool hasHiddenState = aModel->hasHiddenState(theIndex);
-          if (aObjBrowser && hasHiddenState && !aObjBrowser->workshop()->prepareForDisplay(anObjects))
-            return;
-          if (hasHiddenState) { // #issue 2335(hide all faces then show solid problem)
-            if (aResObj->isDisplayed())
-              aResObj->setDisplayed(false);
-            aResObj->setDisplayed(true);
-          }
-          else
-            aResObj->setDisplayed(!aResObj->isDisplayed());
-          Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
-        }
-      }
+    std::set<ObjectPtr> anObjects;
+    anObjects.insert(aObj);
+
+    bool hasHiddenState = aModel->hasHiddenState(theIndex);
+    if (aObjBrowser && hasHiddenState && !aObjBrowser->workshop()->prepareForDisplay(anObjects))
+      return;
+    if (hasHiddenState) { // #issue 2335(hide all faces then show solid problem)
+      if (aObj->isDisplayed())
+        aObj->setDisplayed(false);
+      aObj->setDisplayed(true);
     }
+    else
+      aObj->setDisplayed(!aObj->isDisplayed());
+
     // Update list of selected objects because this event happens after
     // selection event in object browser
+    Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
+    update(theIndex);
     if (aObjBrowser) {
       aObjBrowser->onSelectionChanged();
     }
-    update(theIndex);
   }
 }