Salome HOME
Updated copyright comment
[modules/shaper.git] / src / ModuleBase / ModuleBase_PagedContainer.cpp
index b5e1aeb4dbe90d9177f00c8f93c9678ff5d55d23..b659b82c285a66bed2455987ca2ebe63ec396b82 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2024  CEA, EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 //
 // You should have received a copy of the GNU Lesser General Public
 // License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or
-// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 #include <ModuleBase_PagedContainer.h>
 #include <QVBoxLayout>
 
 
+static QMap<std::string, std::string> defaultValues;
+
 ModuleBase_PagedContainer::ModuleBase_PagedContainer(QWidget* theParent,
                                                      const Config_WidgetAPI* theData)
 : ModuleBase_ModelWidget(theParent, theData),
-  myIsFocusOnCurrentPage(false)
+  myRemeberChoice(true), myIsFocusOnCurrentPage(false)
 {
   // it is not obligatory to be ignored when property panel tries to activate next active widget
   // but if focus is moved to this control, it can accept it.
   myIsObligatory = false;
+  if (defaultValues.contains(myFeatureId + attributeID()))
+    myDefValue = defaultValues[myFeatureId + attributeID()];
 }
 
 ModuleBase_PagedContainer::~ModuleBase_PagedContainer()
@@ -45,8 +48,10 @@ ModuleBase_PagedContainer::~ModuleBase_PagedContainer()
 }
 
 int ModuleBase_PagedContainer::addPage(ModuleBase_PageBase* thePage,
-                                      const QString& theName, const QString& theCaseId,
-                                      const QPixmap& theIcon )
+                                       const QString& /*theName*/,
+                                       const QString& theCaseId,
+                                       const QPixmap& /*theIcon*/,
+                                       const QString& /*theTooltip*/)
 {
   if (!myPages.count()) {
     setDefaultValue(theCaseId.toStdString());
@@ -91,13 +96,29 @@ bool ModuleBase_PagedContainer::restoreValueCustom()
   // A rare case when plugin was not loaded.
   if(!myFeature)
     return false;
+
+  std::string aDefVal = myRemeberChoice? myDefValue : "";
+
   DataPtr aData = myFeature->data();
   AttributeStringPtr aStringAttr = aData->string(attributeID());
-  QString aCaseId = QString::fromStdString(aStringAttr->value());
-  int idx = myCaseIds.indexOf(aCaseId);
-  if (idx == -1)
-    return false;
-  setCurrentPageIndex(idx);
+  QString aCaseId;
+  if (aStringAttr->isInitialized()) {
+    aCaseId = QString::fromStdString(aStringAttr->value());
+    int idx = myCaseIds.indexOf(aCaseId);
+    if (idx == -1)
+      idx = currentPageIndex();
+    setCurrentPageIndex(idx);
+    if (aStringAttr->value() != aCaseId.toStdString())
+      storeValueCustom();
+  }
+  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;
 }
 
@@ -113,9 +134,17 @@ bool ModuleBase_PagedContainer::storeValueCustom()
   if(!myFeature)
     return false;
   DataPtr aData = myFeature->data();
+
   AttributeStringPtr aStringAttr = aData->string(attributeID());
-  QString aWidgetValue = myCaseIds.at(currentPageIndex());
-  aStringAttr->setValue(aWidgetValue.toStdString());
+  std::string aWidgetValue;
+  if (!aStringAttr->isInitialized())
+    aWidgetValue = myDefValue.empty()?
+        myCaseIds.at(currentPageIndex()).toStdString() : myDefValue;
+  else
+    aWidgetValue = myCaseIds.at(currentPageIndex()).toStdString();
+  myDefValue = aWidgetValue;
+  aStringAttr->setValue(aWidgetValue);
+
   updateObject(myFeature); // for preview
   return true;
 }
@@ -132,4 +161,9 @@ void ModuleBase_PagedContainer::onPageChanged()
     focusTo();
 }
 
+void ModuleBase_PagedContainer::onFeatureAccepted()
+{
+  if (myRemeberChoice)
+    defaultValues[myFeatureId + attributeID()] = myDefValue;
+}