Salome HOME
Sources of the application adopted to RHEL6 x64. The newest version of Eclipse IDE...
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetSelector.cpp
index df7b431fbabc2b71000692c297d7bffcca9766dc..5e0cd3e9837fce05a1d1cca2d2c49c42cc2bb396 100644 (file)
@@ -5,12 +5,14 @@
 
 #include "ModuleBase_WidgetSelector.h"
 #include "ModuleBase_IWorkshop.h"
+#include "ModuleBase_Tools.h"
 
 #include <Events_Loop.h>
-#include <Model_Events.h>
+#include <ModelAPI_Events.h>
 
 #include <ModelAPI_Data.h>
 #include <ModelAPI_Object.h>
+#include <ModelAPI_Result.h>
 #include <ModelAPI_AttributeReference.h>
 #include <Config_WidgetAPI.h>
 
@@ -28,6 +30,8 @@
 #include <QEvent>
 #include <QDockWidget>
 
+#include <stdexcept>
+
 
 typedef QMap<QString, TopAbs_ShapeEnum> ShapeTypes;
 static ShapeTypes MyShapeTypes;
@@ -97,28 +101,28 @@ ModuleBase_WidgetSelector::~ModuleBase_WidgetSelector()
 }
 
 //********************************************************************
-bool ModuleBase_WidgetSelector::storeValue(FeaturePtr theFeature) const
+bool ModuleBase_WidgetSelector::storeValue(ObjectPtr theObject) const
 {
-  DataPtr aData = theFeature->data();
+  DataPtr aData = theObject->data();
   boost::shared_ptr<ModelAPI_AttributeReference> aRef = 
     boost::dynamic_pointer_cast<ModelAPI_AttributeReference>(aData->attribute(attributeID()));
 
-  FeaturePtr aFeature = aRef->value();
-  if (!(aFeature && aFeature->isSame(mySelectedFeature))) {
-    aRef->setValue(mySelectedFeature);
-    Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_FEATURE_UPDATED));
+  ObjectPtr aObject = aRef->value();
+  if (!(aObject && aObject->isSame(mySelectedObject))) {
+    aRef->setValue(mySelectedObject);
+    Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
   }
   return true;
 }
 
 //********************************************************************
-bool ModuleBase_WidgetSelector::restoreValue(FeaturePtr theFeature)
+bool ModuleBase_WidgetSelector::restoreValue(ObjectPtr theObject)
 {
-  DataPtr aData = theFeature->data();
+  DataPtr aData = theObject->data();
   boost::shared_ptr<ModelAPI_AttributeReference> aRef = aData->reference(attributeID());
 
   bool isBlocked = this->blockSignals(true);
-  mySelectedFeature = aRef->value();
+  mySelectedObject = aRef->value();
   updateSelectionName(); 
 
   this->blockSignals(isBlocked);
@@ -138,19 +142,19 @@ QList<QWidget*> ModuleBase_WidgetSelector::getControls() const
 //********************************************************************
 void ModuleBase_WidgetSelector::onSelectionChanged()
 {
-  QList<FeaturePtr> aFeatures = myWorkshop->selectedFeatures();
-  if (aFeatures.size() > 0) {
-    FeaturePtr aFeature = aFeatures.first();
-    if ((!mySelectedFeature) && (!aFeature))
+  QList<ObjectPtr> aObjects = myWorkshop->selectedObjects();
+  if (aObjects.size() > 0) {
+    ObjectPtr aObject = aObjects.first();
+    if ((!mySelectedObject) && (!aObject))
       return;
-    if (mySelectedFeature && aFeature && mySelectedFeature->isSame(aFeature))
+    if (mySelectedObject && aObject && mySelectedObject->isSame(aObject))
       return;
 
     // Check that the selection corresponds to selection type
-    if (!isAccepted(aFeature)) return;
+    if (!isAccepted(aObject)) return;
 
-    mySelectedFeature = aFeature;
-    if (mySelectedFeature) {
+    mySelectedObject = aObject;
+    if (mySelectedObject) {
       updateSelectionName();
       activateSelection(false);
       raisePanel();
@@ -162,9 +166,10 @@ void ModuleBase_WidgetSelector::onSelectionChanged()
 }
 
 //********************************************************************
-bool ModuleBase_WidgetSelector::isAccepted(const FeaturePtr theFeature) const
+bool ModuleBase_WidgetSelector::isAccepted(const ObjectPtr theResult) const
 {
-  boost::shared_ptr<GeomAPI_Shape> aShapePtr = theFeature->data()->shape();
+  ResultPtr aResult = boost::dynamic_pointer_cast<ModelAPI_Result>(theResult);
+  boost::shared_ptr<GeomAPI_Shape> aShapePtr = ModuleBase_Tools::shape(aResult);
   if (!aShapePtr) return false;
   TopoDS_Shape aShape = aShapePtr->impl<TopoDS_Shape>();
   if (aShape.IsNull()) return false;
@@ -188,12 +193,8 @@ bool ModuleBase_WidgetSelector::isAccepted(const FeaturePtr theFeature) const
 //********************************************************************
 void ModuleBase_WidgetSelector::updateSelectionName()
 {
-  if (mySelectedFeature) {
-    std::string aName;
-    if (mySelectedFeature->data())
-      aName = mySelectedFeature->data()->getName();
-    else 
-      aName = boost::dynamic_pointer_cast<ModelAPI_Object>(mySelectedFeature)->getName();
+  if (mySelectedObject) {
+    std::string aName = mySelectedObject->data()->name();
  
     myTextLine->setText(QString::fromStdString(aName));
   } else 
@@ -251,4 +252,4 @@ void ModuleBase_WidgetSelector::raisePanel() const
     QDockWidget* aTabWgt = (QDockWidget*) aParent;
     aTabWgt->raise();
   }
-}
\ No newline at end of file
+}