Salome HOME
Issue #559: Control doesn't have variable if its text is empty
[modules/shaper.git] / src / ModuleBase / ModuleBase_IModule.cpp
index 4aa92c55381718720efd46df55f3a1cacac31ac0..1f759feb5b70a88fd16ccb21f74633a50c27ca23 100644 (file)
@@ -1,3 +1,5 @@
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
 
 #include "ModuleBase_IModule.h"
 #include "ModuleBase_IViewer.h"
@@ -10,6 +12,7 @@
 
 #include <ModelAPI_Events.h>
 #include <ModelAPI_CompositeFeature.h>
+#include <ModelAPI_Session.h>
 
 #include <Config_PointerMessage.h>
 #include <Config_WidgetReader.h>
 ModuleBase_IModule::ModuleBase_IModule(ModuleBase_IWorkshop* theParent)
   : QObject(theParent), myWorkshop(theParent) 
 {
-  connect(myWorkshop, SIGNAL(operationStarted(ModuleBase_Operation*)), 
-          SLOT(onOperationStarted(ModuleBase_Operation*)));
-
-  connect(myWorkshop, SIGNAL(operationStopped(ModuleBase_Operation*)), 
-          SLOT(onOperationStopped(ModuleBase_Operation*)));
-
-  connect(myWorkshop, SIGNAL(operationResumed(ModuleBase_Operation*)), 
-          SLOT(onOperationResumed(ModuleBase_Operation*)));
-
-  connect(myWorkshop, SIGNAL(operationComitted(ModuleBase_Operation*)), 
-          SLOT(onOperationComitted(ModuleBase_Operation*)));
-
-  connect(myWorkshop, SIGNAL(operationAborted(ModuleBase_Operation*)), 
-          SLOT(onOperationAborted(ModuleBase_Operation*)));
-
   connect(myWorkshop, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()));
 
 
@@ -87,9 +75,11 @@ ModuleBase_Operation* ModuleBase_IModule::createOperation(const std::string& the
   ModuleBase_Operation* aCurOperation = myWorkshop->currentOperation();
   if (aCurOperation) {
     FeaturePtr aFeature = aCurOperation->feature();
-    CompositeFeaturePtr aCompFea = std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(aFeature);
-    if (aCompFea)
-      anOperation->setParentFeature(aCompFea);
+    CompositeFeaturePtr aCompFeature =
+        std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(aFeature);
+    if (aCompFeature) {
+      anOperation->setParentFeature(aCompFeature);
+    }
   }
 
   std::string aPluginFileName = myFeaturesInFiles[theFeatureId];
@@ -107,6 +97,8 @@ ModuleBase_Operation* ModuleBase_IModule::createOperation(const std::string& the
 void ModuleBase_IModule::createFeatures()
 {
   registerValidators();
+  registerFilters();
+  registerProperties();
 
   Config_ModuleReader aXMLReader = Config_ModuleReader();
   aXMLReader.readAll();
@@ -119,6 +111,22 @@ void ModuleBase_IModule::actionCreated(QAction* theFeature)
   connect(theFeature, SIGNAL(triggered(bool)), this, SLOT(onFeatureTriggered()));
 }
 
+bool ModuleBase_IModule::canDisplayObject(const ObjectPtr& theObject) const
+{
+  return true;
+}
+
+bool ModuleBase_IModule::canUndo() const
+{
+  SessionPtr aMgr = ModelAPI_Session::get();
+  return aMgr->hasModuleDocument() && aMgr->canUndo() && !aMgr->isOperation();
+}
+
+bool ModuleBase_IModule::canRedo() const
+{
+  SessionPtr aMgr = ModelAPI_Session::get();
+  return aMgr->hasModuleDocument() && aMgr->canRedo() && !aMgr->isOperation();
+}
 
 void ModuleBase_IModule::onFeatureTriggered()
 {
@@ -132,7 +140,11 @@ void ModuleBase_IModule::onFeatureTriggered()
 
 void ModuleBase_IModule::editFeature(FeaturePtr theFeature)
 {
-  ModuleBase_Operation* anOperation = createOperation(theFeature->getKind());
+  std::string aFeatureId = theFeature->getKind();
+  if (!myWorkshop->canStartOperation(aFeatureId.c_str()))
+    return;
+
+  ModuleBase_Operation* anOperation = createOperation(aFeatureId);
   anOperation->setFeature(theFeature);
   sendOperation(anOperation);
-}
\ No newline at end of file
+}