Salome HOME
Issue #2159 Hide all incomplete behavior
[modules/shaper.git] / src / XGUI / XGUI_Workshop.cpp
index baa7594cb21d38702667a093818af4ab721a140b..f332c4aad16f9df7ae45c715d8eaa112bdcb6854 100755 (executable)
@@ -47,6 +47,7 @@
 #include <ModelAPI_ResultConstruction.h>
 #include <ModelAPI_ResultGroup.h>
 #include <ModelAPI_ResultParameter.h>
+#include <ModelAPI_ResultField.h>
 #include <ModelAPI_Session.h>
 #include <ModelAPI_Validator.h>
 #include <ModelAPI_ResultCompSolid.h>
@@ -81,6 +82,8 @@
 #include <Config_PropManager.h>
 #include <Config_DataModelReader.h>
 #include <Config_Translator.h>
+#include <Config_WidgetAPI.h>
+#include <Config_Keywords.h>
 
 #include <SUIT_ResourceMgr.h>
 
@@ -233,16 +236,8 @@ XGUI_Workshop::XGUI_Workshop(XGUI_SalomeConnector* theConnector)
                                    ModelAPI_ResultConstruction::DEFAULT_COLOR());
   Config_PropManager::registerProp("Visualization", "result_part_color", "Part color",
                                    Config_Prop::Color, ModelAPI_ResultPart::DEFAULT_COLOR());
-
-  Config_PropManager::registerProp("Visualization", "body_deflection",
-                                   "Body deflection coefficient",
-                                   Config_Prop::Double,
-                                   ModelAPI_ResultBody::DEFAULT_DEFLECTION());
-
-  Config_PropManager::registerProp("Visualization", "construction_deflection",
-                                   "Construction deflection coefficient",
-                                   Config_Prop::Double,
-                                   ModelAPI_ResultConstruction::DEFAULT_DEFLECTION());
+  Config_PropManager::registerProp("Visualization", "result_field_color", "Field color",
+                                   Config_Prop::Color, ModelAPI_ResultField::DEFAULT_COLOR());
 
   if (ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "face-selection", true))
     myViewerSelMode.append(TopAbs_FACE);
@@ -591,14 +586,25 @@ void XGUI_Workshop::fillPropertyPanel(ModuleBase_Operation* theOperation)
   ModuleBase_Tools::flushUpdated(aFeature);
 
   // update visible state of Preview button
+  std::shared_ptr<Config_FeatureMessage> aFeatureInfo;
 #ifdef HAVE_SALOME
-  bool anIsAutoPreview =
-    mySalomeConnector->featureInfo(aFeatureKind.c_str())->isAutoPreview();
+  aFeatureInfo = mySalomeConnector->featureInfo(aFeatureKind.c_str());
 #else
   AppElements_MainMenu* aMenuBar = mainWindow()->menuObject();
   AppElements_Command* aCommand = aMenuBar->feature(aFeatureKind.c_str());
-  bool anIsAutoPreview = aCommand && aCommand->featureMessage()->isAutoPreview();
+  if (aCommand)
+    aFeatureInfo = aCommand->featureMessage();
 #endif
+  bool anIsAutoPreview = true;
+  if (aFeatureInfo.get())
+    anIsAutoPreview = aFeatureInfo->isAutoPreview();
+  else {
+    std::string aXmlCfg, aDescription;
+    module()->getXMLRepresentation(aFeatureKind, aXmlCfg, aDescription);
+    ModuleBase_WidgetFactory aFactory(aXmlCfg, moduleConnector());
+    anIsAutoPreview = aFactory.widgetAPI()->getBooleanAttribute(FEATURE_AUTO_PREVIEW, true);
+  }
+
   if (!anIsAutoPreview) {
     myPropertyPanel->findButton(PROP_PANEL_PREVIEW)->setVisible(true);
     // send signal about preview should not be computed automatically, click on preview
@@ -1352,12 +1358,17 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked)
   else if (theId == "WIREFRAME_CMD")
     setDisplayMode(aObjects, XGUI_Displayer::Wireframe);
   else if (theId == "HIDEALL_CMD") {
+#ifdef HAVE_SALOME
+    //issue #2159 Hide all incomplete behavior
+    viewer()->eraseAll();
+#else
     QObjectPtrList aList = myDisplayer->displayedObjects();
     foreach (ObjectPtr aObj, aList) {
       if (module()->canEraseObject(aObj))
         aObj->setDisplayed(false);
     }
     Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
+#endif
     updateCommandStatus();
   } else if (theId == "SELECT_VERTEX_CMD") {
     setViewerSelectionMode(TopAbs_VERTEX);
@@ -1399,7 +1410,10 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked)
         #endif
         aParameters.Append(MyVCallBack);
 
+        MyTCommunicator->registerPlugin("SMBrowser"); // custom plugin to view ModelAPI
+
         MyTCommunicator->init(aParameters);
+        MyTCommunicator->Activate("SMBrowser"); // to have button in TInspector
         MyTCommunicator->Activate("TKVInspector"); // to have filled callback by model
         MyTCommunicator->Activate("TKDFBrowser");
       }
@@ -1451,7 +1465,9 @@ void XGUI_Workshop::deleteObjects()
   bool hasFeature = false;
   bool hasParameter = false;
   bool hasCompositeOwner = false;
-  ModuleBase_Tools::checkObjects(anObjects, hasResult, hasFeature, hasParameter, hasCompositeOwner);
+  bool hasResultInHistory = false;
+  ModuleBase_Tools::checkObjects(anObjects, hasResult, hasFeature, hasParameter, hasCompositeOwner,
+                                 hasResultInHistory);
   if (!(hasFeature || hasParameter))
     return;
 
@@ -2151,12 +2167,16 @@ void XGUI_Workshop::setStatusBarMessage(const QString& theMessage)
 void XGUI_Workshop::synchronizeViewer()
 {
   SessionPtr aMgr = ModelAPI_Session::get();
-  DocumentPtr aDoc = aMgr->activeDocument();
+  QList<DocumentPtr> aDocs;
+  aDocs.append(aMgr->activeDocument());
+  aDocs.append(aMgr->moduleDocument());
 
-  synchronizeGroupInViewer(aDoc, ModelAPI_ResultConstruction::group(), false);
-  synchronizeGroupInViewer(aDoc, ModelAPI_ResultBody::group(), false);
-  synchronizeGroupInViewer(aDoc, ModelAPI_ResultPart::group(), false);
-  synchronizeGroupInViewer(aDoc, ModelAPI_ResultGroup::group(), false);
+  foreach(DocumentPtr aDoc, aDocs) {
+    synchronizeGroupInViewer(aDoc, ModelAPI_ResultConstruction::group(), false);
+    synchronizeGroupInViewer(aDoc, ModelAPI_ResultBody::group(), false);
+    synchronizeGroupInViewer(aDoc, ModelAPI_ResultPart::group(), false);
+    synchronizeGroupInViewer(aDoc, ModelAPI_ResultGroup::group(), false);
+  }
 }
 
 void XGUI_Workshop::synchronizeGroupInViewer(const DocumentPtr& theDoc,