Salome HOME
Clean Property panel before starting of a new operation.
[modules/shaper.git] / src / XGUI / XGUI_Workshop.cpp
index 1a5d25095749729ae9f06d69327ec457fb867a26..cdf0c42a5cf06512e9937562b8755867ebcaa84d 100644 (file)
@@ -20,6 +20,7 @@
 #include "XGUI_ViewerProxy.h"
 #include "XGUI_PropertyPanel.h"
 #include "XGUI_ContextMenuMgr.h"
+#include "XGUI_ModuleConnector.h"
 
 #include <Model_Events.h>
 #include <ModelAPI_PluginManager.h>
@@ -28,6 +29,8 @@
 #include <ModelAPI_AttributeDocRef.h>
 #include <ModelAPI_Object.h>
 
+#include <PartSetPlugin_Part.h>
+
 #include <Events_Loop.h>
 #include <Events_Error.h>
 #include <ModuleBase_Operation.h>
@@ -91,6 +94,8 @@ XGUI_Workshop::XGUI_Workshop(XGUI_SalomeConnector* theConnector)
           this, SLOT(onContextMenuCommand(const QString&, bool)));
 
   myViewerProxy = new XGUI_ViewerProxy(this);
+  
+  myModuleConnector = new XGUI_ModuleConnector(this);
 
   connect(myOperationMgr, SIGNAL(operationStarted()), SLOT(onOperationStarted()));
   connect(myOperationMgr, SIGNAL(operationResumed()), SLOT(onOperationStarted()));
@@ -225,7 +230,7 @@ void XGUI_Workshop::processEvent(const Events_Message* theMessage)
     bool aHasPart = false;
     for (aIt = aFeatures.begin(); aIt != aFeatures.end(); ++aIt) {
       FeaturePtr aFeature = (*aIt);
-      if (aFeature->getKind() == "Part") {
+      if (aFeature->getKind() == PARTSET_PART_KIND) {
         aHasPart = true;
         break;
       }
@@ -259,6 +264,8 @@ void XGUI_Workshop::processEvent(const Events_Message* theMessage)
   //An operation passed by message. Start it, process and commit.
   const Config_PointerMessage* aPartSetMsg = dynamic_cast<const Config_PointerMessage*>(theMessage);
   if (aPartSetMsg) {
+    // Clear previous content
+    myPropertyPanel->cleanContent();
     ModuleBase_Operation* anOperation =
         (ModuleBase_Operation*)(aPartSetMsg->pointer());
 
@@ -275,9 +282,6 @@ void XGUI_Workshop::processEvent(const Events_Message* theMessage)
   const Events_Error* anAppError = dynamic_cast<const Events_Error*>(theMessage);
   if (anAppError) {
     emit errorOccurred(QString::fromLatin1(anAppError->description()));
-    myErrorDlg->show();
-    myErrorDlg->raise();
-    myErrorDlg->activateWindow();
   }
 
 }
@@ -292,7 +296,7 @@ void XGUI_Workshop::onOperationStarted()
 
     showPropertyPanel();
 
-    ModuleBase_WidgetFactory aFactory = ModuleBase_WidgetFactory(aOperation);
+    ModuleBase_WidgetFactory aFactory = ModuleBase_WidgetFactory(aOperation, myModuleConnector);
     QWidget* aContent = myPropertyPanel->contentWidget();
     qDeleteAll(aContent->children());
     aFactory.createWidget(aContent);
@@ -740,7 +744,7 @@ void XGUI_Workshop::changeCurrentDocument(FeaturePtr thePart)
   PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
   if (thePart) {
     DocumentPtr aFeaDoc;
-    if (thePart->data()) {
+    if (!XGUI_Tools::isModelObject(thePart)) {
       aFeaDoc = thePart->data()->docRef("PartDocument")->value();
     } else {
       ObjectPtr aObject = boost::dynamic_pointer_cast<ModelAPI_Object>(thePart);
@@ -776,6 +780,10 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked)
     activatePart(FeaturePtr());
   else if (theId == "DELETE_CMD")
     deleteFeatures(aFeatures);
+  else if (theId == "SHOW_CMD")
+    showFeatures(aFeatures, true);
+  else if (theId == "HIDE_CMD")
+    showFeatures(aFeatures, false);
 }
 
 //**************************************************************
@@ -805,9 +813,9 @@ void XGUI_Workshop::deleteFeatures(QFeatureList theList)
     PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
     aMgr->rootDocument()->startOperation();
     foreach (FeaturePtr aFeature, theList) {
-      if (aFeature->getKind() == "Part") {
+      if (aFeature->getKind() == PARTSET_PART_KIND) {
         DocumentPtr aDoc;
-        if (aFeature->data()) {
+        if (!XGUI_Tools::isModelObject(aFeature)) {
           aDoc = aFeature->data()->docRef("PartDocument")->value();
         } else {
           ObjectPtr aObject = boost::dynamic_pointer_cast<ModelAPI_Object>(aFeature);
@@ -818,7 +826,7 @@ void XGUI_Workshop::deleteFeatures(QFeatureList theList)
           aDoc->close();
         }
       } else {
-        if (!aFeature->data()) {
+        if (XGUI_Tools::isModelObject(aFeature)) {
           ObjectPtr aObject = boost::dynamic_pointer_cast<ModelAPI_Object>(aFeature);
           aFeature = aObject->featureRef();
         }
@@ -828,3 +836,10 @@ void XGUI_Workshop::deleteFeatures(QFeatureList theList)
     aMgr->rootDocument()->finishOperation();
   }
 }
+
+//**************************************************************
+void XGUI_Workshop::showFeatures(QFeatureList theList, bool isVisible)
+{
+//  foreach (FeaturePtr aFeature, theList) {
+//  }
+}