]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Move the functionality of setting a DISPLAY option from XGUI to ModuleBase module...
authorazv <azv@opencascade.com>
Fri, 10 Dec 2021 07:40:56 +0000 (10:40 +0300)
committerazv <azv@opencascade.com>
Fri, 10 Dec 2021 07:40:56 +0000 (10:40 +0300)
src/ModuleBase/ModuleBase_Tools.cpp
src/ModuleBase/ModuleBase_Tools.h
src/PartSet/PartSet_MenuMgr.cpp
src/XGUI/XGUI_Tools.cpp
src/XGUI/XGUI_Tools.h
src/XGUI/XGUI_Workshop.cpp
src/XGUI/XGUI_WorkshopListener.cpp

index b014d60deff7189df0f53bbd2d824ffcc4dd917c..1b5bfc9a30f6b00541daaff55073eff1d0cce123 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <ModuleBase_ParamIntSpinBox.h>
 #include <ModuleBase_ParamSpinBox.h>
+#include <ModuleBase_Preferences.h>
 #include <ModuleBase_WidgetFactory.h>
 #include <ModuleBase_IWorkshop.h>
 #include <ModuleBase_IModule.h>
@@ -36,6 +37,7 @@
 #include <ModelAPI_AttributeSelectionList.h>
 #include <ModelAPI_AttributeRefList.h>
 #include <ModelAPI_AttributeRefAttrList.h>
+#include <ModelAPI_ResultGroup.h>
 #include <ModelAPI_ResultPart.h>
 #include <ModelAPI_ResultConstruction.h>
 #include <ModelAPI_AttributeString.h>
 
 #include <ModelGeomAlgo_Point2D.h>
 
+#ifdef HAVE_SALOME
+#include <SUIT_Application.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
+#endif
+
 #include <StdSelect_BRepOwner.hxx>
 #include <TopoDS_Iterator.hxx>
 #include <AIS_InteractiveContext.hxx>
@@ -108,6 +116,51 @@ namespace ModuleBase_Tools {
 
 //******************************************************************
 
+  //! Waits for REDISPLAY message and set the Visible flag to the entities
+  //! according to Preferences choice.
+  class ModuleBase_RedisplayListener : public Events_Listener
+  {
+  public:
+    static std::shared_ptr<ModuleBase_RedisplayListener> instance()
+    {
+      static std::shared_ptr<ModuleBase_RedisplayListener>
+          anInstance(new ModuleBase_RedisplayListener);
+      return anInstance;
+    }
+
+    void processEvent(const std::shared_ptr<Events_Message>& theMessage)
+    {
+      if (theMessage->eventID() == Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY))
+      {
+#if HAVE_SALOME
+        // If the python script is being loaded now, the preferences should be used
+        // to display the required object
+        SUIT_Application * app = SUIT_Session::session()->activeApplication();
+        QVariant aVar = app->property("IsLoadedScript");
+        if (!aVar.isNull() && aVar.toBool()) {
+          DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
+          int aSize = aRootDoc->size(ModelAPI_ResultPart::group());
+          if (aSize > 0) {
+            ObjectPtr anPartObject = aRootDoc->object(ModelAPI_ResultPart::group(), aSize - 1);
+            ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(anPartObject);
+            ModuleBase_Tools::setDisplaying(aPart, true);
+          }
+        }
+#endif
+      }
+    }
+
+  private:
+    ModuleBase_RedisplayListener()
+    {
+      Events_Loop::loop()->registerListener(this,
+          Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
+    }
+  };
+
+  static std::shared_ptr<ModuleBase_RedisplayListener>
+      RL = ModuleBase_RedisplayListener::instance();
+
 //******************************************************************
 
 void adjustMargins(QWidget* theWidget)
@@ -1342,6 +1395,46 @@ qreal currentPixelRatio()
 }
 
 
+// Set displaying status to every element on group
+static void setDisplayingByLoop(DocumentPtr theDoc, int theSize,
+  std::string theGroup, bool theDisplayFromScript)
+{
+  int aDisplayingId = -1;
+  if (theDisplayFromScript) {
+    aDisplayingId = ModuleBase_Preferences::resourceMgr()->integerValue("General",
+      "part_visualization_script", -1);
+    // Increase ID to prevert using "As stored in HDF"
+    ++aDisplayingId;
+  }
+  else {
+    aDisplayingId = ModuleBase_Preferences::resourceMgr()->integerValue("General",
+      "part_visualization_study", -1);
+
+    // if chosen "As stored in HDF" then don't change displaying
+    if (aDisplayingId == 0)
+      return;
+  }
+
+  for (int anIndex = theSize - 1; anIndex >= 0; --anIndex) {
+    ObjectPtr anObject = theDoc->object(theGroup, anIndex);
+    anObject->setDisplayed((aDisplayingId == 1 && anIndex == theSize - 1) || aDisplayingId == 2);
+  }
+}
+
+void setDisplaying(ResultPartPtr thePart, bool theDisplayFromScript)
+{
+  DocumentPtr aDoc = thePart->partDoc();
+  int aConstructionSize = aDoc->size(ModelAPI_ResultConstruction::group());
+  int aGroupSize = aDoc->size(ModelAPI_ResultGroup::group());
+  int aFieldSize = aDoc->size(ModelAPI_ResultField::group());
+  int aResultSize = aDoc->size(ModelAPI_ResultBody::group());
+  setDisplayingByLoop(aDoc, aConstructionSize,
+    ModelAPI_ResultConstruction::group(), theDisplayFromScript);
+  setDisplayingByLoop(aDoc, aGroupSize, ModelAPI_ResultGroup::group(), theDisplayFromScript);
+  setDisplayingByLoop(aDoc, aFieldSize, ModelAPI_ResultField::group(), theDisplayFromScript);
+  setDisplayingByLoop(aDoc, aResultSize, ModelAPI_ResultBody::group(), theDisplayFromScript);
+}
+
 } // namespace ModuleBase_Tools
 
 
index a68f2ee9e7f645360400b15ad5a2c7cb545b1135..cae27a1d92115896c1f223a498b840234e95a1fa 100644 (file)
@@ -406,6 +406,11 @@ std::wstring MODULEBASE_EXPORT generateName(const AttributePtr& theAttribute,
 
 /// Returns pixel ratio of a screen where main window is displayed
 qreal MODULEBASE_EXPORT currentPixelRatio();
+
+/// Set displaying status for elements from part depending on the settings
+/// \param thePart a pointer of part
+void MODULEBASE_EXPORT setDisplaying(std::shared_ptr<ModelAPI_ResultPart> thePart,
+                                     bool theDisplayFromScript = false);
 }
 
 #endif
index d9e7aa8bea61b8cea264159b9468e5b1b4ca3d3a..b0cf3a6dc6369eb8dd15b4ed6b5ee3fe171dc09e 100644 (file)
@@ -501,7 +501,7 @@ void PartSet_MenuMgr::activatePart(ResultPartPtr thePart) const
   if (isFirstLoad) {
     XGUI_Workshop* aWorkshop = myModule->getWorkshop();
     XGUI_ObjectsBrowser* aObjBrowser = aWorkshop->objectBrowser();
-    XGUI_Tools::setDisplaying(thePart);
+    ModuleBase_Tools::setDisplaying(thePart);
     Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
     aObjBrowser->onSelectionChanged();
     DocumentPtr aDoc = thePart->partDoc();
index 3314814f141008621c92c5f0c4a6b9af6e976367..6ff19daae3e6324a989ff8e6f1e2ce069c5614d3 100644 (file)
@@ -24,7 +24,6 @@
 
 #include "ModuleBase_IWorkshop.h"
 #include "ModuleBase_Tools.h"
-#include "ModuleBase_Preferences.h"
 
 #include <TopoDS_Shape.hxx>
 #include <ModelAPI_Object.h>
 #include <ModelAPI_CompositeFeature.h>
 #include <ModelAPI_Tools.h>
 #include <ModelAPI_ResultConstruction.h>
-#include <ModelAPI_ResultGroup.h>
 #include <ModelAPI_ResultBody.h>
-#include <ModelAPI_ResultField.h>
 #include <Events_InfoMessage.h>
 
-#include <SUIT_ResourceMgr.h>
-
 #include <GeomAPI_Shape.h>
 #include <GeomAlgoAPI_CompoundBuilder.h>
 
@@ -406,44 +401,4 @@ void removeTemporaryFiles(const std::string& theDirectory,
   }
 }
 
-// Set displaying status to every element on group
-static void setDisplayingByLoop(DocumentPtr theDoc, int theSize,
-  std::string theGroup, bool theDisplayFromScript)
-{
-  int aDisplayingId = -1;
-  if (theDisplayFromScript) {
-    aDisplayingId = ModuleBase_Preferences::resourceMgr()->integerValue("General",
-      "part_visualization_script", -1);
-    // Increase ID to prevert using "As stored in HDF"
-    ++aDisplayingId;
-  }
-  else {
-    aDisplayingId = ModuleBase_Preferences::resourceMgr()->integerValue("General",
-      "part_visualization_study", -1);
-
-    // if chosen "As stored in HDF" then don't change displaying
-    if (aDisplayingId == 0)
-      return;
-  }
-
-  for (int anIndex = theSize - 1; anIndex >= 0; --anIndex) {
-    ObjectPtr anObject = theDoc->object(theGroup, anIndex);
-    anObject->setDisplayed((aDisplayingId == 1 && anIndex == theSize - 1) || aDisplayingId == 2);
-  }
-}
-
-void setDisplaying(ResultPartPtr thePart, bool theDisplayFromScript)
-{
-  DocumentPtr aDoc = thePart->partDoc();
-  int aConstructionSize = aDoc->size(ModelAPI_ResultConstruction::group());
-  int aGroupSize = aDoc->size(ModelAPI_ResultGroup::group());
-  int aFieldSize = aDoc->size(ModelAPI_ResultField::group());
-  int aResultSize = aDoc->size(ModelAPI_ResultBody::group());
-  setDisplayingByLoop(aDoc, aConstructionSize,
-                      ModelAPI_ResultConstruction::group(), theDisplayFromScript);
-  setDisplayingByLoop(aDoc, aGroupSize, ModelAPI_ResultGroup::group(), theDisplayFromScript);
-  setDisplayingByLoop(aDoc, aFieldSize, ModelAPI_ResultField::group(), theDisplayFromScript);
-  setDisplayingByLoop(aDoc, aResultSize, ModelAPI_ResultBody::group(), theDisplayFromScript);
-}
-
 }
index 65d0f424d7be83011ddf931863ed26886499eaae..478857fb302a8b5d64c6f00d09f744da72e81673 100644 (file)
@@ -25,7 +25,6 @@
 #include <QRect>
 
 #include <ModelAPI_Feature.h>
-#include <ModelAPI_ResultPart.h>
 #include <ModuleBase_ViewerPrs.h>
 
 #include <ModuleBase_Definitions.h>
@@ -136,10 +135,6 @@ std::string getTmpDirByEnv( const char* thePathEnv);
 /// Removes files and directory where they are located
 void removeTemporaryFiles(const std::string& theDirectory,
   const std::list<std::string>& theFiles);
-
-/// Set displaying status for elements from part depending on the settings
-/// \param thePart a pointer of part
-XGUI_EXPORT void setDisplaying(ResultPartPtr thePart, bool theDisplayFromScript = false);
 };
 
 #endif
index 0336029ba2f44329f417ae0bdb2c03ae3a88bc6b..f95053cbdbb8ae9961f31c07d4303b22433c2432 100644 (file)
@@ -1076,7 +1076,7 @@ void XGUI_Workshop::openFile(const QString& theDirectory)
     ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(anObject);
     if (aPart.get()) {
       aPart->activate();
-      XGUI_Tools::setDisplaying(aPart);
+      ModuleBase_Tools::setDisplaying(aPart);
     }
   }
   else if (anActivationId == 1) {
@@ -1085,7 +1085,7 @@ void XGUI_Workshop::openFile(const QString& theDirectory)
       ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(anObject);
       if (aPart.get()) {
         aPart->activate();
-        XGUI_Tools::setDisplaying(aPart);
+        ModuleBase_Tools::setDisplaying(aPart);
 
         if (anIndex < aSize - 1) {
           SessionPtr aMgr = ModelAPI_Session::get();
index 7dc112a93c8b021f9207e3aa48cccfa13db60def..34b87d99a97e4603d1f51e05ce7e9634158eb341 100644 (file)
@@ -65,7 +65,6 @@
 #include "XGUI_QtEvents.h"
 #include "XGUI_SalomeConnector.h"
 #include "XGUI_SelectionMgr.h"
-#include "XGUI_Tools.h"
 #include "XGUI_Workshop.h"
 
 #include <QAction>
@@ -379,20 +378,6 @@ void XGUI_WorkshopListener::
     }
   }
 
-  // If the python script is being loaded now, the preferences should be used
-  // to display the required object
-  SUIT_Application * app = SUIT_Session::session()->activeApplication();
-  QVariant aVar = app->property("IsLoadedScript");
-  if (!aVar.isNull() && aVar.toBool()) {
-    DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
-    int aSize = aRootDoc->size(ModelAPI_ResultPart::group());
-    if (aSize > 0) {
-      ObjectPtr anPartObject = aRootDoc->object(ModelAPI_ResultPart::group(), aSize - 1);
-      ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(anPartObject);
-      XGUI_Tools::setDisplaying(aPart, true);
-    }
-  }
-
   // this processing should be moved in another place in order to do not cause problems in
   // flush messages chain
   //if (aHiddenObjects.size() > 0)