Salome HOME
Issue #1472: Do not duplicate features in table and process all parameters as float...
[modules/shaper.git] / src / ParametersPlugin / ParametersPlugin_WidgetParamsMgr.cpp
index d511c66364123eefb79d04d5e0d04ba66bb6cdd7..526850d6326bf71cde31d668cee2de89a248b408 100644 (file)
@@ -282,6 +282,8 @@ void ParametersPlugin_WidgetParamsMgr::updateFeaturesPart()
 void ParametersPlugin_WidgetParamsMgr::updateParametersPart()
 {
   updateItem(myParameters, parametersItems(myParametersList));
+  bool aIsValid = checkIsValid();
+  enableButtons(aIsValid);
 }
 
 
@@ -290,6 +292,7 @@ QList<QStringList> ParametersPlugin_WidgetParamsMgr::
 {
   QList<QStringList> aItemsList;
   ResultParameterPtr aParam;
+  QList<FeaturePtr> aFeatures;
   foreach(FeaturePtr aParameter, theFeatures) {
     aParam = std::dynamic_pointer_cast<ModelAPI_ResultParameter>(aParameter->firstResult());
     const std::set<std::shared_ptr<ModelAPI_Attribute>>& aRefs = aParam->data()->refsToMe();
@@ -305,21 +308,24 @@ QList<QStringList> ParametersPlugin_WidgetParamsMgr::
           QList<QStringList> aItems = featuresItems(aList);
           aItemsList.append(aItems);
         } else {
-          QStringList aValNames;
-          aValNames << aReferenced->data()->name().c_str();
-
-          AttributeDoublePtr aDouble = std::dynamic_pointer_cast<ModelAPI_AttributeDouble>(aAttr);
-          if (aDouble.get()) {
-            aValNames << aDouble->text().c_str();
-            aValNames << QString::number(aDouble->value());
-          } else {
-            AttributeIntegerPtr aInt = std::dynamic_pointer_cast<ModelAPI_AttributeInteger>(aAttr);
-            if (aInt.get()) {
-              aValNames << aInt->text().c_str();
-              aValNames << QString::number(aInt->value());
+          if (!aFeatures.contains(aReferenced)) {
+            QStringList aValNames;
+            aValNames << aReferenced->data()->name().c_str();
+
+            AttributeDoublePtr aDouble = std::dynamic_pointer_cast<ModelAPI_AttributeDouble>(aAttr);
+            if (aDouble.get()) {
+              aValNames << aDouble->text().c_str();
+              aValNames << QString::number(aDouble->value());
+            } else {
+              AttributeIntegerPtr aInt = std::dynamic_pointer_cast<ModelAPI_AttributeInteger>(aAttr);
+              if (aInt.get()) {
+                aValNames << aInt->text().c_str();
+                aValNames << QString::number(aInt->value());
+              }
             }
+            aItemsList.append(aValNames);
+            aFeatures.append(aReferenced);
           }
-          aItemsList.append(aValNames);
         }
       }
     }
@@ -339,15 +345,15 @@ QList<QStringList> ParametersPlugin_WidgetParamsMgr::
     QStringList aValues;
 
     std::string aName = aParameter->string(ParametersPlugin_Parameter::VARIABLE_ID())->value();
-    if (aName.empty())
+    if (aName.empty()) {
       aValues << NoName;
-    else
+    else
       aValues << aName.c_str();
 
     std::string aExpr = aParameter->string(ParametersPlugin_Parameter::EXPRESSION_ID())->value();
-    if (aName.empty())
+    if (aName.empty()) {
       aValues << NoValue;
-    else
+    else
       aValues << aExpr.c_str();
 
     std::string aErr = aParameter->data()->string(ParametersPlugin_Parameter::EXPRESSION_ERROR_ID())->value();
@@ -495,6 +501,8 @@ void ParametersPlugin_WidgetParamsMgr::onAdd()
   myTable->scrollToItem(aItem);
   myTable->setCurrentItem(aItem);
   myTable->editItem(aItem);
+
+  enableButtons(false);
 }
 
 QTreeWidgetItem* ParametersPlugin_WidgetParamsMgr::selectedItem() const
@@ -666,17 +674,52 @@ void ParametersPlugin_WidgetParamsMgr::sendWarning()
 
 void ParametersPlugin_WidgetParamsMgr::onSelectionChanged()
 {
-  QList<QTreeWidgetItem*> aItemsList = myTable->selectedItems();
-  bool isParameter = false;
-  foreach(QTreeWidgetItem* aItem, aItemsList) {
-    if (aItem->parent() == myParameters) {
-      isParameter = true;
+  bool isValid = checkIsValid();
+  if (isValid) {
+    QList<QTreeWidgetItem*> aItemsList = myTable->selectedItems();
+    bool isParameter = false;
+    foreach(QTreeWidgetItem* aItem, aItemsList) {
+      if (aItem->parent() == myParameters) {
+        isParameter = true;
+        break;
+      }
+    }
+    myInsertBtn->setEnabled(isParameter);
+    myRemoveBtn->setEnabled(isParameter);
+    myUpBtn->setEnabled(isParameter);
+    myDownBtn->setEnabled(isParameter);
+  } else {
+    myInsertBtn->setEnabled(false);
+    myRemoveBtn->setEnabled(false);
+    myUpBtn->setEnabled(false);
+    myDownBtn->setEnabled(false);
+  }
+}
+
+void ParametersPlugin_WidgetParamsMgr::enableButtons(bool theEnable)
+{
+  myAddBtn->setEnabled(theEnable);
+  if (theEnable) 
+    onSelectionChanged();
+  else {
+    myInsertBtn->setEnabled(theEnable);
+    myRemoveBtn->setEnabled(theEnable);
+    myUpBtn->setEnabled(theEnable);
+    myDownBtn->setEnabled(theEnable);
+  }
+}
+
+bool ParametersPlugin_WidgetParamsMgr::checkIsValid()
+{
+  QTreeWidgetItem* aItem;
+  bool aIsValid = true;
+  for(int i = 0; i < myParameters->childCount(); i++) {
+    aItem = myParameters->child(i);
+    if ((aItem->text(Col_Name) == NoName) || (aItem->text(Col_Equation) == NoValue)) {
+      aIsValid = false;
       break;
     }
   }
-  myInsertBtn->setEnabled(isParameter);
-  myRemoveBtn->setEnabled(isParameter);
-  myUpBtn->setEnabled(isParameter);
-  myDownBtn->setEnabled(isParameter);
+  return aIsValid;
 }