Salome HOME
Issue #2863: Use Utf8 string for file selector
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetChoice.cpp
index c259ed3247a00f3f87783b59bb5e973b5a62f654..c2d15b828e4bccf2b70aa19a3f9f4fe429f39321 100644 (file)
 #include <QRadioButton>
 #include <QToolButton>
 
+static QMap<std::string, int> defaultValues;
+
 ModuleBase_WidgetChoice::ModuleBase_WidgetChoice(QWidget* theParent,
                                                  const Config_WidgetAPI* theData)
-: ModuleBase_ModelWidget(theParent, theData)//, myCombo(0), myButtons(0)
+: ModuleBase_ModelWidget(theParent, theData), myIsFirst(true)
 {
+  myHasValue = defaultValues.contains(myFeatureId + attributeID());
+  if (myHasValue)
+    myDefValue = defaultValues[myFeatureId + attributeID()];
+  else
+    myDefValue = 0;
+
   QString aLabelText = translate(theData->widgetLabel());
   QString aLabelIcon = QString::fromStdString(theData->widgetIcon());
   std::string aTypes = theData->getProperty("string_list");
@@ -70,7 +78,8 @@ ModuleBase_WidgetChoice::ModuleBase_WidgetChoice(QWidget* theParent,
 
   QHBoxLayout* aLayout = new QHBoxLayout(this);
   myChoiceCtrl =  new ModuleBase_ChoiceCtrl(this, aList, aIconList,
-    (aWgtType == "radiobuttons")? ModuleBase_ChoiceCtrl::RadioButtons : ModuleBase_ChoiceCtrl::ComboBox,
+    (aWgtType == "radiobuttons")? ModuleBase_ChoiceCtrl::RadioButtons :
+                                  ModuleBase_ChoiceCtrl::ComboBox,
     (aWgtDir == "horizontal")? Qt::Horizontal : Qt::Vertical);
   myChoiceCtrl->setLabel(aLabelText);
 
@@ -93,7 +102,16 @@ bool ModuleBase_WidgetChoice::storeValueCustom()
   DataPtr aData = myFeature->data();
   std::shared_ptr<ModelAPI_AttributeInteger> aIntAttr = aData->integer(attributeID());
 
-  aIntAttr->setValue(myChoiceCtrl->value());
+  int aCase = 0;
+  if (myIsFirst)
+    aCase = myHasValue? myDefValue : myChoiceCtrl->value();
+  else
+    aCase = myChoiceCtrl->value();
+
+  aIntAttr->setValue(aCase);
+  myDefValue = aCase;
+  myIsFirst = false;
+
   updateObject(myFeature);
   return true;
 }
@@ -115,15 +133,24 @@ bool ModuleBase_WidgetChoice::restoreValueCustom()
         myChoiceCtrl->setChoiceList(aChoiceList);
       }
     }
-    if (aIntAttr->isInitialized())
+    if (aIntAttr->isInitialized()) {
       myChoiceCtrl->setValue(aIntAttr->value());
+
+      myChoiceCtrl->blockSignals(isBlocked);
+      emit itemSelected(this, aIntAttr->value());
+      myDefValue = aIntAttr->value();
+    }
     else {
       bool aHasDefaultValue;
       int aDefaultVal = QString::fromStdString(getDefaultValue()).toInt(&aHasDefaultValue);
-      myChoiceCtrl->setValue(aHasDefaultValue ? aDefaultVal : 0);
+      int aVal = aHasDefaultValue ? aDefaultVal : 0;
+      myChoiceCtrl->setValue(aVal);
+
+      myChoiceCtrl->blockSignals(isBlocked);
+      emit itemSelected(this, aVal);
+      myDefValue = aVal;
     }
-    myChoiceCtrl->blockSignals(isBlocked);
-    emit itemSelected(this, aIntAttr->value());
+    myIsFirst = false;
   }
   return true;
 }
@@ -154,3 +181,8 @@ void ModuleBase_WidgetChoice::onCurrentIndexChanged(int theIndex)
 
   emit itemSelected(this, theIndex);
 }
+
+void ModuleBase_WidgetChoice::onFeatureAccepted()
+{
+  defaultValues[myFeatureId + attributeID()] = myDefValue;
+}