]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
The validated values are cached in order to do not check them by mouse moving over...
authornds <natalia.donis@opencascade.com>
Thu, 18 Jun 2015 04:55:43 +0000 (07:55 +0300)
committernds <natalia.donis@opencascade.com>
Thu, 18 Jun 2015 04:56:11 +0000 (07:56 +0300)
This cache exists between activate/deactivate of the widget.

src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp
src/ModuleBase/ModuleBase_WidgetMultiSelector.h
src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp
src/ModuleBase/ModuleBase_WidgetShapeSelector.h
src/ModuleBase/ModuleBase_WidgetValidated.cpp
src/ModuleBase/ModuleBase_WidgetValidated.h

index b01892e6a4b658821ff9052a07f1adcb51af2ad1..be3ce6ec69b7f43a689da95bc2fa7ea851a63c64 100644 (file)
@@ -215,27 +215,6 @@ void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool/* theValid*/)
   }
 }
 
-//********************************************************************
-void ModuleBase_WidgetMultiSelector::customValidators(
-                                        std::list<ModelAPI_Validator*>& theValidators,
-                                        std::list<std::list<std::string> >& theArguments) const
-{
-  return;
-  std::list<std::string> anArguments;
-
-  theValidators.push_back(myShapeValidator);
-  if (true/*myIsUseChoice*/) {
-    QString aType = myTypeCombo->currentText();
-    anArguments.push_back(validatorType(aType));
-  }
-  else {
-    for(int i = 0, aCount = myTypeCombo->count(); i < aCount; i++) {
-      anArguments.push_back(validatorType(myTypeCombo->itemText(i)));
-    }
-  }
-  theArguments.push_back(anArguments);
-}
-
 //********************************************************************
 bool ModuleBase_WidgetMultiSelector::acceptSubShape(const TopoDS_Shape& theShape) const
 {
index 9d569d2c43023ca3889fcb0470590fe50dc09b33..a9f7c461cb168ae930f3e984acefb15b345d87bd 100644 (file)
@@ -122,13 +122,6 @@ protected slots:
   /// \param theValid a boolean flag, if restore happens for valid parameters
   virtual void restoreAttributeValue(const bool theValid);
 
-  /// Puts additional validators to the given list. A separate validator is created for each of the
-  /// "type_choice" value
-  /// \param theValidators a list of validators
-  /// \param theArguments a list of validators arguments
-  virtual void customValidators(std::list<ModelAPI_Validator*>& theValidators,
-                                std::list<std::list<std::string> >& theArguments) const;
-
   /// Returns true if selected shape corresponds to requested shape types
   /// \param theShape a shape
   bool acceptSubShape(const TopoDS_Shape& theShape) const;
index 03aaf1fcb7ff4daefdd22416a4f6c5d31a024103..2fe1ab684075b5f43af9fd37a8a852c8c0f896e4 100644 (file)
@@ -363,21 +363,6 @@ void ModuleBase_WidgetShapeSelector::restoreAttributeValue(bool theValid)
   }
 }
 
-//********************************************************************
-void ModuleBase_WidgetShapeSelector::customValidators(
-                                    std::list<ModelAPI_Validator*>& theValidators,
-                                    std::list<std::list<std::string> >& theArguments) const
-{
-  return;
-  theValidators.push_back(myShapeValidator);
-
-  std::list<std::string> anArguments;
-  foreach(QString aType, myShapeTypes) {
-    anArguments.push_back(aType.toStdString().c_str());
-  }
-  theArguments.push_back(anArguments);
-}
-
 //********************************************************************
 bool ModuleBase_WidgetShapeSelector::isValidSelectionCustom(const ModuleBase_ViewerPrs& thePrs)
 {
index e2b7f6ad6fc820ed8a7c932817ed6b8eb3834852..86494eb5d3672dc36b7eec86c10f7b353c0e7bad 100644 (file)
@@ -118,13 +118,6 @@ protected:
   /// \param theValid a boolean flag, if restore happens for valid parameters
   virtual void restoreAttributeValue(const bool theValid);
 
-  /// Puts additional validators to the given list. A separate validator is created for each of the
-  /// "type_choice" value
-  /// \param theValidators a list of validators
-  /// \param theArguments a list of validators arguments
-  virtual void customValidators(std::list<ModelAPI_Validator*>& theValidators,
-                                std::list<std::list<std::string> >& theArguments) const;
-
   /// Computes and updates name of selected object in the widget
   void updateSelectionName();
 
index 1225e1282173d223a19bf926af41dec182ff4fcb..c8e76a6c60512ff6ed1dfdfcf66572b072482eba 100644 (file)
@@ -17,6 +17,8 @@
 
 #include <QWidget>
 
+//#define DEBUG_VALID_STATE
+
 ModuleBase_WidgetValidated::ModuleBase_WidgetValidated(QWidget* theParent,
                                                        const Config_WidgetAPI* theData,
                                                        const std::string& theParentId)
@@ -51,9 +53,16 @@ bool ModuleBase_WidgetValidated::setSelection(QList<ModuleBase_ViewerPrs>& theVa
 //********************************************************************
 bool ModuleBase_WidgetValidated::isValidSelection(const ModuleBase_ViewerPrs& theValue)
 {
-  bool aValid = isValidSelectionCustom(theValue);
-  if (!aValid)
+  bool aValid = false;
+  if (getValidState(theValue, aValid)) {
+    return aValid;
+  }
+
+  aValid = isValidSelectionCustom(theValue);
+  if (!aValid) {
+    storeValidState(theValue, aValid);
     return aValid;
+  }
 
   DataPtr aData = myFeature->data();
   AttributePtr anAttribute = myFeature->attribute(attributeID());
@@ -90,6 +99,7 @@ bool ModuleBase_WidgetValidated::isValidSelection(const ModuleBase_ViewerPrs& th
   aLoop->flush(aDeletedEvent);
   aLoop->flush(aRedispEvent);
 
+  storeValidState(theValue, aValid);
   return aValid;
 }
 
@@ -108,8 +118,6 @@ bool ModuleBase_WidgetValidated::isValidAttribute() const
   std::list<std::list<std::string> > anArguments;
   aFactory->validators(myFeature->getKind(), attributeID(), aValidators, anArguments);
 
-  customValidators(aValidators, anArguments);
-
   DataPtr aData = myFeature->data();
   AttributePtr anAttribute = myFeature->attribute(attributeID());
 
@@ -127,18 +135,66 @@ bool ModuleBase_WidgetValidated::isValidAttribute() const
 }
 
 void ModuleBase_WidgetValidated::activateFilters(ModuleBase_IWorkshop* theWorkshop,
-                                                 const bool toActivate) const
+                                                 const bool toActivate)
 {
   ModuleBase_IViewer* aViewer = theWorkshop->viewer();
 
   Handle(SelectMgr_Filter) aSelFilter = theWorkshop->validatorFilter();
   if (toActivate)
     aViewer->addSelectionFilter(aSelFilter);
-  else
+  else {
     aViewer->removeSelectionFilter(aSelFilter);
+    clearValidState();
+  }
 }
 
-void ModuleBase_WidgetValidated::customValidators(std::list<ModelAPI_Validator*>& theValidators,
-                                          std::list<std::list<std::string> >& theArguments) const
+//********************************************************************
+void ModuleBase_WidgetValidated::storeValidState(const ModuleBase_ViewerPrs& theValue, const bool theValid)
 {
+  bool aValidPrs = myInvalidPrs.contains(theValue);
+  bool anInvalidPrs = myInvalidPrs.contains(theValue);
+
+  if (theValid) {
+    if (!aValidPrs)
+      myValidPrs.append(theValue);
+    // the commented code will be useful when the valid state of the presentation
+    // will be changable between activate/deactivate. Currently it does not happen.
+    //if (anInvalidPrs)
+    //  myInvalidPrs.removeOne(theValue);
+  }
+  else { // !theValid
+    if (!anInvalidPrs)
+      myInvalidPrs.append(theValue);
+    //if (!aValidPrs)
+    //  myValidPrs.removeOne(theValue);
+  }
+#ifdef DEBUG_VALID_STATE
+  qDebug(QString("storeValidState: myValidPrs.size() = %1, myInvalidPrs.size() = %2").arg(myValidPrs.count())
+                 .arg(myInvalidPrs.count()).toStdString().c_str());
+#endif
 }
+
+//********************************************************************
+bool ModuleBase_WidgetValidated::getValidState(const ModuleBase_ViewerPrs& theValue, bool& theValid)
+{
+  bool aValidPrs = myValidPrs.contains(theValue);
+  bool anInvalidPrs = myInvalidPrs.contains(theValue);
+
+  if (aValidPrs)
+    theValid = true;
+  else if (anInvalidPrs)
+    theValid = false;
+
+  return aValidPrs || anInvalidPrs;
+}
+
+//********************************************************************
+void ModuleBase_WidgetValidated::clearValidState()
+{
+#ifdef DEBUG_VALID_STATE
+  qDebug("clearValidState");
+#endif
+  myValidPrs.clear();
+  myInvalidPrs.clear();
+}
+
index bacba1887eeba137eb75a5785e2eb223303982e7..4e6b9aa73cfba0334d6732c2e812e1929083bf9e 100644 (file)
@@ -16,6 +16,8 @@
 
 #include <SelectMgr_ListOfFilter.hxx>
 
+#include <QList>
+
 class QWidget;
 class ModuleBase_IWorkshop;
 class ModuleBase_ISelection;
@@ -80,13 +82,24 @@ protected:
   /// It obtains selection filters from the workshop and activates them in the active viewer
   /// \param theWorkshop an active workshop
   /// \param toActivate a flag about activation or deactivation the filters
-  virtual void activateFilters(ModuleBase_IWorkshop* theWorkshop, const bool toActivate) const;
+  virtual void activateFilters(ModuleBase_IWorkshop* theWorkshop, const bool toActivate);
+
+  /// Gets the validity state of the presentation in an internal map. Returns true if the valid state of value is stored
+  /// \param theValue a viewer presentation
+  /// \param theValid a valid state
+  bool getValidState(const ModuleBase_ViewerPrs& theValue, bool& theValid);
+
+  /// Store the validity state of the presentation in an internal map
+  /// \param theValue a viewer presentation
+  /// \param theValid a valid state
+  void storeValidState(const ModuleBase_ViewerPrs& theValue, const bool theValid);
+
+  // Removes all presentations from internal maps.
+  void clearValidState();
 
-  /// Puts additional validators to the given list
-  /// \param theValidators a list of validators
-  /// \param theArguments a list of validators arguments
-  virtual void customValidators(std::list<ModelAPI_Validator*>& theValidators,
-                                std::list<std::list<std::string> >& theArguments) const;
+private:
+  QList<ModuleBase_ViewerPrs> myValidPrs;
+  QList<ModuleBase_ViewerPrs> myInvalidPrs;
 };
 
 #endif /* MODULEBASE_WIDGETVALIDATED_H_ */