]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #1505 Bug in parameters management (with parts not loaded)
authornds <nds@opencascade.com>
Mon, 30 May 2016 06:17:29 +0000 (09:17 +0300)
committernds <nds@opencascade.com>
Mon, 30 May 2016 06:18:01 +0000 (09:18 +0300)
src/ModelAPI/ModelAPI_Tools.cpp
src/ModelAPI/ModelAPI_Tools.h
src/ModuleBase/ModuleBase_ModelWidget.cpp
src/ModuleBase/ModuleBase_ModelWidget.h
src/ParametersPlugin/ParametersPlugin_EvalListener.cpp
src/XGUI/XGUI_PropertyPanel.cpp
src/XGUI/XGUI_Tools.cpp
src/XGUI/XGUI_Tools.h

index 658def2ef133c08390ec5b53cda62c6861b08f35..1270db2ec520b7567234588d68190305a0e42f2a 100755 (executable)
@@ -358,6 +358,27 @@ void allResults(const FeaturePtr& theFeature, std::list<ResultPtr>& theResults)
   }
 }
 
+//******************************************************************
+bool allDocumentsActivated(std::string& theNotActivatedNames)
+{
+  theNotActivatedNames = "";
+  bool anAllPartActivated = true;
+
+  DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
+  int aSize = aRootDoc->size(ModelAPI_ResultPart::group());
+  for (int i = 0; i < aSize; i++) {
+    ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), i);
+    ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObject);
+    if (!aPart->isActivated()) {
+      anAllPartActivated = false;
+      if (!theNotActivatedNames.empty())
+        theNotActivatedNames += ", ";
+      theNotActivatedNames += aObject->data()->name().c_str();
+    }
+  }
+  return anAllPartActivated;
+}
+
 bool removeFeaturesAndReferences(const std::set<FeaturePtr>& theFeatures,
                                  const bool theFlushRedisplay,
                                  const bool theUseComposite,
index 9085e6d776d699c2f02be326e3c303ab42112011..00f6cd4fd570611ac0d997cd911bbdf913e5a273 100755 (executable)
@@ -100,6 +100,13 @@ MODELAPI_EXPORT bool hasSubResults(const ResultPtr& theResult);
 */
 MODELAPI_EXPORT void allResults(const FeaturePtr& theFeature, std::list<ResultPtr>& theResults);
 
+/*!
+ Returns true if there are no parts in the document, which are not activated
+ \param theNotActivatedNames out string which contains not activated names
+ \return a boolean value
+ */
+MODELAPI_EXPORT bool allDocumentsActivated(std::string& theNotActivatedNames);
+
 
 /*! Removes features from the document
 * \param theFeatures a list of features to be removed
index 8a85cd6f49d438e2419fb271686611e9721d456d..62e16b4832ca5929ad51369ac9faa01d0245f25e 100644 (file)
@@ -61,6 +61,14 @@ bool ModuleBase_ModelWidget::isInitialized(ObjectPtr theObject) const
   return theObject->data()->attribute(attributeID())->isInitialized();
 }
 
+void ModuleBase_ModelWidget::processValueState()
+{
+  myIsValueStateBlocked = false;
+  if (myState == ModifiedInPP || myState == ModifiedInViewer)
+    storeValue();
+  myState = Stored;
+}
+
 QString ModuleBase_ModelWidget::getValueStateError() const
 {
   QString anError = "";
@@ -185,11 +193,6 @@ void ModuleBase_ModelWidget::activate()
 
 void ModuleBase_ModelWidget::deactivate()
 {
-  myIsValueStateBlocked = false;
-  if (myState == ModifiedInPP || myState == ModifiedInViewer)
-    storeValue();
-  myState = Stored;
-
   if (myWidgetValidator)
     myWidgetValidator->activateFilters(false);
 }
index 97e388511d31ad1cdc3d956402a0238f133bee78..c21ef7e8a294424d050639b0321b3aea7337b956 100644 (file)
@@ -85,6 +85,9 @@ Q_OBJECT
   /// \return the enumeration result
   ValueState getValueState() const { return myState; }
 
+  /// Stores the widget value if it is modified
+  void processValueState();
+
   /// Returns an attribute error according to the value state
   /// It exists in all cases excepring the "Store" case
   QString getValueStateError() const;
index 31582bc90630f8ff1e1b769b25eba3882feffefc..a588fc793f52ef00b2f4a78e8f4f49b97d2f6a93 100644 (file)
@@ -26,6 +26,8 @@
 #include <GeomDataAPI_Point.h>
 #include <GeomDataAPI_Point2D.h>
 
+#include <QMessageBox>
+
 #include <string>
 #include <set>
 #include <sstream>
@@ -355,27 +357,6 @@ void setParameterName(ResultParameterPtr theResultParameter, const std::string&
   aParameter->data()->blockSendAttributeUpdated(false);
 }
 
-#include <QMessageBox>
-#include <ModelAPI_ResultPart.h>
-bool allDocumentsActivated(QString& theNotActivatedNames)
-{
-  bool anAllPartActivated = true;
-  QStringList aRefNames;
-
-  DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
-  int aSize = aRootDoc->size(ModelAPI_ResultPart::group());
-  for (int i = 0; i < aSize; i++) {
-    ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), i);
-    ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObject);
-    if (!aPart->isActivated()) {
-      anAllPartActivated = false;
-      aRefNames.append(aObject->data()->name().c_str());
-    }
-  }
-  theNotActivatedNames = aRefNames.join(", ");
-  return anAllPartActivated;
-}
-
 void ParametersPlugin_EvalListener::processObjectRenamedEvent(
     const std::shared_ptr<Events_Message>& theMessage)
 {
@@ -400,11 +381,11 @@ void ParametersPlugin_EvalListener::processObjectRenamedEvent(
   if (!aParameter.get())
     return;
 
-  QString aNotActivatedNames;
-  if (!allDocumentsActivated(aNotActivatedNames)) {
+  std::string aNotActivatedNames;
+  if (!ModelAPI_Tools::allDocumentsActivated(aNotActivatedNames)) {
     QMessageBox::StandardButton aRes = QMessageBox::warning(0, QObject::tr("Warning"),
                QObject::tr("Selected objects can be used in Part documents which are not loaded: \
-%1. Whould you like to continue?").arg(aNotActivatedNames),
+%1. Whould you like to continue?").arg(aNotActivatedNames.c_str()),
                QMessageBox::No | QMessageBox::Yes, QMessageBox::No);
     if (aRes != QMessageBox::Yes) {
       setParameterName(aResultParameter, aMessage->oldName());
index c2c31868351e988817ef03bcfa9a5a7bdf5bea81..10d39b798efacf2a7c4317a8b471de97580f74d7 100755 (executable)
@@ -426,6 +426,7 @@ bool XGUI_PropertyPanel::setActiveWidget(ModuleBase_ModelWidget* theWidget)
   std::string aPreviosAttributeID;
   if(myActiveWidget) {
     aPreviosAttributeID = myActiveWidget->attributeID();
+    myActiveWidget->processValueState();
     myActiveWidget->deactivate();
     myActiveWidget->setHighlighted(false);
   }
index 9a7556e403aa431d18eebfc168d3cde9ae186717..64982ec4f29ca2a3c0edd6477ee95acd0ce0a74b 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <iostream>
 #include <sstream>
+#include <string>
 
 namespace XGUI_Tools {
 //******************************************************************
@@ -106,8 +107,8 @@ std::string featureInfo(FeaturePtr theFeature)
 bool canRemoveOrRename(QWidget* theParent, const QObjectPtrList& theObjects)
 {
   bool aResult = true;
-  QString aNotActivatedNames;
-  if (!XGUI_Tools::allDocumentsActivated(aNotActivatedNames)) {
+  std::string aNotActivatedNames;
+  if (!ModelAPI_Tools::allDocumentsActivated(aNotActivatedNames)) {
     DocumentPtr aModuleDoc = ModelAPI_Session::get()->moduleDocument();
     bool aFoundPartSetObject = false;
     foreach (ObjectPtr aObj, theObjects) {
@@ -118,7 +119,7 @@ bool canRemoveOrRename(QWidget* theParent, const QObjectPtrList& theObjects)
     if (aFoundPartSetObject) {
       QMessageBox::StandardButton aRes = QMessageBox::warning(theParent, QObject::tr("Warning"),
                QObject::tr("Selected objects can be used in Part documents which are not loaded: \
-%1. Whould you like to continue?").arg(aNotActivatedNames),
+%1. Whould you like to continue?").arg(aNotActivatedNames.c_str()),
                QMessageBox::No | QMessageBox::Yes, QMessageBox::No);
       aResult = aRes == QMessageBox::Yes;
     }
@@ -145,26 +146,6 @@ bool canRename(const ObjectPtr& theObject, const QString& theName)
   return true;
 }
 
-//******************************************************************
-bool allDocumentsActivated(QString& theNotActivatedNames)
-{
-  bool anAllPartActivated = true;
-  QStringList aRefNames;
-
-  DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
-  int aSize = aRootDoc->size(ModelAPI_ResultPart::group());
-  for (int i = 0; i < aSize; i++) {
-    ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), i);
-    ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObject);
-    if (!aPart->isActivated()) {
-      anAllPartActivated = false;
-      aRefNames.append(aObject->data()->name().c_str());
-    }
-  }
-  theNotActivatedNames = aRefNames.join(", ");
-  return anAllPartActivated;
-}
-
 //**************************************************************
 
 XGUI_Workshop* workshop(ModuleBase_IWorkshop* theWorkshop)
index 9215bf6ace11838d6e885cad9ce5fdbdb1982935..924454cf77f8627930813de1f55ccac5106a0f72 100644 (file)
@@ -93,13 +93,6 @@ bool XGUI_EXPORT canRemoveOrRename(QWidget* theParent, const QObjectPtrList& aLi
  */
 bool canRename(const ObjectPtr& theObject, const QString& theName);
 
-/*!
- Returns true if there are no parts in the document, which are not activated
- \param theNotActivatedNames out string which contains not activated names
- \return a boolean value
- */
-bool XGUI_EXPORT allDocumentsActivated(QString& theNotActivatedNames);
-
 /*!
  Returns converted workshop
  \param theWorkshop an interface workshop