Salome HOME
Fix sketcher bugs
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetFeature.cpp
index 37ed734c03bc32deea16ecb277ca1e31e696518f..b08058a604c24e3c68ecce8bd6a3f18730ae5c7a 100644 (file)
 
 #include <ModuleBase_WidgetFeature.h>
 
+#include <ModuleBase_WidgetValueFeature.h>
+#include <ModuleBase_WidgetValue.h>
+#include <ModuleBase_ResultValidators.h>
+
 #include <Config_Keywords.h>
 #include <Config_WidgetAPI.h>
 
 #include <Events_Loop.h>
-#include <Model_Events.h>
+#include <ModelAPI_Events.h>
 
 #include <ModelAPI_Feature.h>
 #include <ModelAPI_Data.h>
 #include <ModelAPI_Object.h>
 #include <ModelAPI_AttributeRefAttr.h>
+#include <ModelAPI_Validator.h>
 
 #include <QWidget>
+#include <QLineEdit>
+#include <QHBoxLayout>
+#include <QLabel>
 
 ModuleBase_WidgetFeature::ModuleBase_WidgetFeature(QWidget* theParent,
-                                                   const Config_WidgetAPI* theData)
-: ModuleBase_ModelWidget(theParent, theData)
+                                                   const Config_WidgetAPI* theData, 
+                                                   const std::string& theParentId)
+: ModuleBase_ModelWidget(theParent, theData, theParentId)
 {
-  QString aKinds = QString::fromStdString(theData->getProperty(FEATURE_KEYSEQUENCE));
-  myFeatureKinds = aKinds.split(" ");
+  //QString aKinds = QString::fromStdString(theData->getProperty(FEATURE_KEYSEQUENCE));
+  //myObjectKinds = aKinds.split(" ");
+  //theData->
+
+  myContainer = new QWidget(theParent);
+  QHBoxLayout* aControlLay = new QHBoxLayout(myContainer);
+  aControlLay->setContentsMargins(0, 0, 0, 0);
+
+  QString aLabelText = QString::fromStdString(theData->widgetLabel());
+  myLabel = new QLabel(aLabelText, myContainer);
+  aControlLay->addWidget(myLabel);
+
+  myEditor = new QLineEdit(myContainer);
+  QString anObjName = QString::fromStdString(attributeID());
+  myEditor->setObjectName(anObjName);
+  myEditor->setReadOnly(true);
+  aControlLay->addWidget(myEditor);
+
+  QString aTTip = QString::fromStdString(theData->widgetTooltip());
+  myEditor->setToolTip(aTTip);
+
+  aControlLay->addWidget(myEditor);
+  aControlLay->setStretch(1, 1);
 }
 
 ModuleBase_WidgetFeature::~ModuleBase_WidgetFeature()
 {
 }
 
-bool ModuleBase_WidgetFeature::setFeature(const FeaturePtr& theFeature)
+bool ModuleBase_WidgetFeature::setValue(ModuleBase_WidgetValue* theValue)
 {
-  if (!theFeature && myFeatureKinds.contains(theFeature->getKind().c_str()))
-    return false;
+  bool isDone = false;
+
+  if (theValue) {
+    ModuleBase_WidgetValueFeature* aFeatureValue = 
+                         dynamic_cast<ModuleBase_WidgetValueFeature*>(theValue);
+    if (aFeatureValue)
+      isDone = setObject(aFeatureValue->object());
+  }
+  return isDone;
+}
 
-  //bool isBlocked = this->blockSignals(true);
-  myFeature = theFeature;
-  //this->blockSignals(isBlocked);
+bool ModuleBase_WidgetFeature::setObject(const ObjectPtr& theObject)
+{
+  PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
+  ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
+  const ModelAPI_Validator* aValidator = aFactory->validator(parentID(), attributeID());
+  if (aValidator) {
+    const ModuleBase_ResultValidator* aResValidator = 
+      dynamic_cast<const ModuleBase_ResultValidator*>(aValidator);
+    if (aResValidator) {
+      if (!aResValidator->isValid(theObject))
+        return false;
+    }
+  }
+
+  myObject = theObject;
+  myEditor->setText(theObject ? theObject->data()->name().c_str() : "");
   emit valuesChanged();
   return true;
 }
 
-bool ModuleBase_WidgetFeature::storeValue(FeaturePtr theFeature) const
+bool ModuleBase_WidgetFeature::storeValue(ObjectPtr theObject) const
 {
-  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
+  FeaturePtr aFeature = boost::dynamic_pointer_cast<ModelAPI_Feature>(theObject);
+  if (!aFeature)
+    return false;
+  boost::shared_ptr<ModelAPI_Data> aData = aFeature->data();
   boost::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
           boost::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aData->attribute(attributeID()));
 
   ModuleBase_WidgetFeature* that = (ModuleBase_WidgetFeature*) this;
-  //bool isBlocked = that->blockSignals(true);
-  aRef->setFeature(myFeature);
-  theFeature->execute();
-  Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_FEATURE_UPDATED));
-  //that->blockSignals(isBlocked);
-
+  aRef->setObject(myObject);
+  aFeature->execute();
+  updateObject(theObject);
   return true;
 }
 
-bool ModuleBase_WidgetFeature::restoreValue(FeaturePtr theFeature)
+bool ModuleBase_WidgetFeature::restoreValue(ObjectPtr theObject)
 {
-  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
+  boost::shared_ptr<ModelAPI_Data> aData = theObject->data();
   boost::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
           boost::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aData->attribute(attributeID()));
 
-  //bool isBlocked = this->blockSignals(true);
-  myFeature = aRef->feature();
-  //this->blockSignals(isBlocked);
-  return true;
+  FeaturePtr aFeature = boost::dynamic_pointer_cast<ModelAPI_Feature>(aRef->object());
+  if (aFeature) {
+    myObject = aFeature;
+    myEditor->setText(myObject ? myObject->data()->name().c_str() : "");
+    return true;
+  }
+  return false;
 }
 
 QWidget* ModuleBase_WidgetFeature::getControl() const
 {
-  return 0;
+  return myContainer;
 }
 
 QList<QWidget*> ModuleBase_WidgetFeature::getControls() const
 {
-  QList<QWidget*> aControls;
-  return aControls;
+  QList<QWidget*> aList;
+  aList.append(myLabel);
+  aList.append(myEditor);
+  return aList;
 }