]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #2581: Initialize attributes if they are not initialized. It can be in case...
authorvsv <vsv@opencascade.com>
Thu, 23 Aug 2018 13:44:53 +0000 (16:44 +0300)
committervsv <vsv@opencascade.com>
Thu, 23 Aug 2018 13:44:53 +0000 (16:44 +0300)
src/ModuleBase/ModuleBase_PagedContainer.cpp
src/ModuleBase/ModuleBase_WidgetBoolValue.cpp
src/ModuleBase/ModuleBase_WidgetBoolValue.h
src/ModuleBase/ModuleBase_WidgetDoubleValue.cpp
src/ModuleBase/ModuleBase_WidgetDoubleValue.h
src/ModuleBase/ModuleBase_WidgetIntValue.cpp
src/ModuleBase/ModuleBase_WidgetIntValue.h
src/ModuleBase/ModuleBase_WidgetPointInput.cpp

index f987109431f9ffbe7f8e5eca82dd9dcbd1d9b466..b02d23b47346fd6788816e3904b84173133bae51 100644 (file)
@@ -101,16 +101,25 @@ bool ModuleBase_PagedContainer::restoreValueCustom()
   DataPtr aData = myFeature->data();
   AttributeStringPtr aStringAttr = aData->string(attributeID());
   QString aCaseId;
-  if (myIsEditing)
-    aCaseId = QString::fromStdString(aStringAttr->value());
-  else
-    aCaseId = QString::fromStdString(aDefVal.empty()? aStringAttr->value() : aDefVal);
-
-  myIsFirst = false;
-  int idx = myCaseIds.indexOf(aCaseId);
-  if (idx == -1)
-    idx = currentPageIndex();
-  setCurrentPageIndex(idx);
+  if (aStringAttr->isInitialized()) {
+    if (myIsEditing)
+      aCaseId = QString::fromStdString(aStringAttr->value());
+    else
+      aCaseId = QString::fromStdString(aDefVal.empty() ? aStringAttr->value() : aDefVal);
+    myIsFirst = false;
+    int idx = myCaseIds.indexOf(aCaseId);
+    if (idx == -1)
+      idx = currentPageIndex();
+    setCurrentPageIndex(idx);
+  }
+  else {
+    // It is added because if user edits the feature created from Python
+    // and switches his choice
+    // it will not be stored in the attribute while apply not pressed.
+    // But this button will be disabled because of not initialized attribute
+    aStringAttr->setValue(myCaseIds.at(0).toStdString());
+    setCurrentPageIndex(0);
+  }
   return true;
 }
 
index a36aa614b83d6593a2f8fed5be5b38603d84820a..d06de842b93224b071d465d4198473babfe775a6 100644 (file)
@@ -40,11 +40,11 @@ ModuleBase_WidgetBoolValue::ModuleBase_WidgetBoolValue(QWidget* theParent,
 {
   QString aText = translate(theData->widgetLabel());
   QString aToolTip = translate(theData->widgetTooltip());
-  bool isChecked = theData->getBooleanAttribute(ATTR_DEFAULT, false);
+  myDefVal = theData->getBooleanAttribute(ATTR_DEFAULT, false);
 
   myCheckBox = new QCheckBox(aText, this);
   myCheckBox->setToolTip(aToolTip);
-  myCheckBox->setChecked(isChecked);
+  myCheckBox->setChecked(myDefVal);
 
   QVBoxLayout* aMainLayout = new QVBoxLayout(this);
   ModuleBase_Tools::adjustMargins(aMainLayout);
@@ -73,9 +73,14 @@ bool ModuleBase_WidgetBoolValue::restoreValueCustom()
   std::shared_ptr<ModelAPI_AttributeBoolean> aRef = aData->boolean(attributeID());
 
   bool isBlocked = myCheckBox->blockSignals(true);
-  myCheckBox->setChecked(aRef->value());
+  if (aRef->isInitialized()) {
+    myCheckBox->setChecked(aRef->value());
+  }
+  else {
+    myCheckBox->setChecked(myDefVal);
+    aRef->setValue(myDefVal);
+  }
   myCheckBox->blockSignals(isBlocked);
-
   return true;
 }
 
index 121fae5ffd0fb1589a77d53f788c2f2bac0eb1e2..36b3b62ef2704d8235aae5026b11fe3f65575383 100644 (file)
@@ -59,6 +59,8 @@ protected:
  private:
    /// The check box
   QCheckBox* myCheckBox;
+
+  bool myDefVal;
 };
 
 #endif
index 90e44ba7ccae8c953285cc1fcd675bc303d03725..7afe07635587a531917dc165b48b90b7f56b12ad 100644 (file)
@@ -101,10 +101,11 @@ ModuleBase_WidgetDoubleValue::ModuleBase_WidgetDoubleValue(QWidget* theParent,
     mySpinBox->setSingleStep(aStepVal);
   }
 
-  double aDefVal = QString::fromStdString(getDefaultValue()).toDouble(&isOk);
-  if (isOk) {
-    mySpinBox->setValue(aDefVal);
-  }
+  myDefaultVal = QString::fromStdString(getDefaultValue()).toDouble(&isOk);
+  if (isOk)
+    mySpinBox->setValue(myDefaultVal);
+  else
+    myDefaultVal = 0;
 
   QString aTTip = translate(theData->widgetTooltip());
   mySpinBox->setToolTip(aTTip);
@@ -210,12 +211,15 @@ bool ModuleBase_WidgetDoubleValue::restoreValueCustom()
     //  aText += aExprAttr->value().c_str();
     //}
     ModuleBase_Tools::setSpinText(mySpinBox, aText);
-  } else {
-    ModuleBase_Tools::setSpinValue(mySpinBox, aRef->isInitialized() ? aRef->value() : 0);
+  }
+  else {
+    ModuleBase_Tools::setSpinValue(mySpinBox, aRef->isInitialized() ? aRef->value() : myDefaultVal);
     if (aRef->isInitialized() && aRef->expressionInvalid()) {
       aRef->setExpressionError("");
       aRef->setExpressionInvalid(false);
     }
+    if (!aRef->isInitialized())
+      aRef->setValue(myDefaultVal);
   }
   return true;
 }
index 4cdae391d5224ab061675144d4bc8a2801177497..8e9055ab7d5f97931d1ee9558c18de1d1e887d7a 100644 (file)
@@ -88,6 +88,8 @@ protected:
   ModuleBase_ParamSpinBox* mySpinBox;
 
   FeaturePtr myParameter;
+
+  double myDefaultVal;
 };
 
 #endif
index 72622070a8dc3c31a399f0fb345bf1ded6d29273..12931a997d81702ce2e518d5a6d46ebf2866ec96 100644 (file)
@@ -91,10 +91,11 @@ ModuleBase_WidgetIntValue::ModuleBase_WidgetIntValue(QWidget* theParent,
     mySpinBox->setSingleStep(aStepVal);
   }
 
-  int aDefVal = QString::fromStdString(getDefaultValue()).toInt(&isOk);
-  if (isOk) {
-    mySpinBox->setValue(aDefVal);
-  }
+  myDefVal = QString::fromStdString(getDefaultValue()).toInt(&isOk);
+  if (isOk)
+    mySpinBox->setValue(myDefVal);
+  else
+    myDefVal = 0;
 
   QString aTTip = translate(theData->widgetTooltip());
   mySpinBox->setToolTip(aTTip);
@@ -205,6 +206,8 @@ bool ModuleBase_WidgetIntValue::restoreValueCustom()
       anAttribute->setExpressionError("");
       anAttribute->setExpressionInvalid(false);
     }
+    if (!anAttribute->isInitialized())
+      anAttribute->setValue(myDefVal);
   }
   return true;
 }
index bcd45d4b199719d9eaf373260fe8aa2a11e3e5b2..3d6030844502e1cdd458bb9615a42a2da084aca0 100644 (file)
@@ -83,6 +83,8 @@ protected:
   ModuleBase_ParamSpinBox* mySpinBox;
 
   FeaturePtr myParameter;
+
+  int myDefVal;
 };
 
 #endif
index 29265d26cdb86288fedd2c82ad34be24a6678b42..9b225ef786668b75b6ea120888cf8dbf1b2bbed2 100644 (file)
@@ -126,24 +126,35 @@ bool ModuleBase_WidgetPointInput::storeValueCustom()
 bool ModuleBase_WidgetPointInput::restoreValueCustom()
 {
   AttributePointPtr aAttr = std::dynamic_pointer_cast<GeomDataAPI_Point>(attribute());
-  if (aAttr.get() && aAttr->isInitialized()) {
-    std::string aXText = aAttr->textX();
-    if (aXText.empty()) {
-      myXSpin->setValue(aAttr->x());
-    } else {
-      myXSpin->setText(aXText.c_str());
-    }
-    std::string aYText = aAttr->textY();
-    if (aYText.empty()) {
-      myYSpin->setValue(aAttr->y());
-    } else {
-      myYSpin->setText(aYText.c_str());
+  if (aAttr.get()) {
+    if (aAttr->isInitialized()) {
+      std::string aXText = aAttr->textX();
+      if (aXText.empty()) {
+        myXSpin->setValue(aAttr->x());
+      }
+      else {
+        myXSpin->setText(aXText.c_str());
+      }
+      std::string aYText = aAttr->textY();
+      if (aYText.empty()) {
+        myYSpin->setValue(aAttr->y());
+      }
+      else {
+        myYSpin->setText(aYText.c_str());
+      }
+      std::string aZText = aAttr->textZ();
+      if (aZText.empty()) {
+        myZSpin->setValue(aAttr->z());
+      }
+      else {
+        myZSpin->setText(aZText.c_str());
+      }
     }
-    std::string aZText = aAttr->textZ();
-    if (aZText.empty()) {
-      myZSpin->setValue(aAttr->z());
-    } else {
-      myZSpin->setText(aZText.c_str());
+    else {
+      aAttr->setValue(myDefaultValue[0], myDefaultValue[1], myDefaultValue[2]);
+      myXSpin->setValue(myDefaultValue[0]);
+      myYSpin->setValue(myDefaultValue[1]);
+      myZSpin->setValue(myDefaultValue[2]);
     }
     return true;
   }