]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Preselection realization for multi-selector widget to accept some selection values.
authornds <natalia.donis@opencascade.com>
Thu, 30 Apr 2015 19:05:38 +0000 (22:05 +0300)
committernds <natalia.donis@opencascade.com>
Thu, 30 Apr 2015 19:05:38 +0000 (22:05 +0300)
src/ModuleBase/ModuleBase_ModelWidget.h
src/ModuleBase/ModuleBase_Operation.cpp
src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp
src/ModuleBase/ModuleBase_WidgetMultiSelector.h
src/ModuleBase/ModuleBase_WidgetValidated.cpp
src/ModuleBase/ModuleBase_WidgetValidated.h
src/PartSet/PartSet_WidgetPoint2d.cpp
src/PartSet/PartSet_WidgetPoint2d.h
src/PartSet/PartSet_WidgetSketchLabel.cpp
src/PartSet/PartSet_WidgetSketchLabel.h

index 8adb5bc7682306b89c2037bff1b43af353ecc8a0..a6ad2ca97fec81c3ff6e7b094fb99f6d4de81da1 100644 (file)
@@ -73,8 +73,9 @@ Q_OBJECT
 
   /// Set the given wrapped value to the current widget
   /// This value should be processed in the widget according to the needs
-  /// \param theValue the wrapped widget value
-  virtual bool setSelection(ModuleBase_ViewerPrs theValue)
+  /// \param theValues the wrapped selection values
+  /// \param thePosition an index in the list of values, the values should be get from the index
+  virtual bool setSelection(const QList<ModuleBase_ViewerPrs>& theValues, int& thePosition)
   {
     return false;
   }
index 1016d90e8e762decc26a335379bac3fbb1178789..b934df13061c2bd6e6d74c9d1465c85e3ca809a2 100644 (file)
@@ -216,19 +216,15 @@ void ModuleBase_Operation::activateByPreselection()
   
   ModuleBase_ModelWidget* aWgt, *aFilledWgt = 0;
   QList<ModuleBase_ModelWidget*>::const_iterator aWIt;
-  QList<ModuleBase_ViewerPrs>::const_iterator aPIt;
   bool isSet = false;
   // 1. apply the selection to controls
-  for (aWIt = aWidgets.constBegin(), aPIt = myPreSelection.constBegin();
-       (aWIt != aWidgets.constEnd()) && (aPIt != myPreSelection.constEnd());
-       ++aWIt) {
+  int aCurrentPosition = 0;
+  for (aWIt = aWidgets.constBegin(); aWIt != aWidgets.constEnd(); ++aWIt) {
     aWgt = (*aWIt);
-    ModuleBase_ViewerPrs aValue = (*aPIt);
     if (!aWgt->canSetValue())
       continue;
 
-    ++aPIt;
-    if (!aWgt->setSelection(aValue)) {
+    if (!aWgt->setSelection(myPreSelection, aCurrentPosition/*aValue*/)) {
       isSet = false;
       break;
     } else {
index 57e2ce9492683be78fd14faa38f6fece0beee4ba..c2e3138a534a37470800e452fb16f8edb031bdec 100644 (file)
@@ -194,6 +194,35 @@ void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool/* theValid*/)
   }
 }
 
+//********************************************************************
+bool ModuleBase_WidgetMultiSelector::setSelection(const QList<ModuleBase_ViewerPrs>& theValues,
+                                                  int& thePosition)
+{
+  if (thePosition < 0)
+    return false;
+
+  QList<ModuleBase_ViewerPrs>::const_iterator anIt = theValues.begin(), aLast = theValues.end();
+  bool isDone = false;
+  for (int i = thePosition; i < theValues.size(); i++) {
+    ModuleBase_ViewerPrs aValue = theValues[i];
+    thePosition++;
+    bool aProcessed = false;
+    if (isValidSelection(aValue)) {
+      aProcessed = setSelectionCustom(aValue);
+    }
+    // if there is at least one set, the result is true
+    isDone = isDone || aProcessed;
+    // when an object, which do not satisfy the validating process, stop set selection
+    if (!aProcessed)
+      break;
+  }
+  if (isDone) {
+    updateObject(myFeature);
+    emit valuesChanged();
+  }
+  return isDone;
+}
+
 //********************************************************************
 bool ModuleBase_WidgetMultiSelector::setSelectionCustom(const ModuleBase_ViewerPrs& thePrs)
 {
index cc702f6a129f0da3763c4e498e26bb4c6e84eeab..778755c61eef804cf8234fb61debb6882d34457f 100644 (file)
@@ -72,6 +72,12 @@ class MODULEBASE_EXPORT ModuleBase_WidgetMultiSelector : public ModuleBase_Widge
   /// The methiod called when widget is deactivated
   virtual void deactivate();
 
+  /// Set the given wrapped value to the current widget
+  /// This value should be processed in the widget according to the needs
+  /// \param theValues the wrapped selection values
+  /// \param thePosition an index in the list of values, the values should be get from the index
+  virtual bool setSelection(const QList<ModuleBase_ViewerPrs>& theValues, int& thePosition);
+
   /// Fills the attribute with the value of the selected owner
   /// \param theOwner a selected owner
   virtual bool setSelectionCustom(const ModuleBase_ViewerPrs& thePrs);
index caadc6be7582cc17eb8121963161c657c171b058..a5ec4c5fe52498c83bc6d50eaaa8624c6e0d7c9a 100644 (file)
@@ -29,12 +29,17 @@ ModuleBase_WidgetValidated::~ModuleBase_WidgetValidated()
 }
 
 //********************************************************************
-bool ModuleBase_WidgetValidated::setSelection(ModuleBase_ViewerPrs theValue)
+bool ModuleBase_WidgetValidated::setSelection(const QList<ModuleBase_ViewerPrs>& theValues, int& thePosition)
 {
+  if (thePosition < 0 || thePosition >= theValues.size())
+    return false;
+  ModuleBase_ViewerPrs aValue = theValues[thePosition];
+  thePosition++;
+
   bool isDone = false;
 
-  if (isValidSelection(theValue)) {
-    isDone = setSelectionCustom(theValue);
+  if (isValidSelection(aValue)) {
+    isDone = setSelectionCustom(aValue);
     updateObject(myFeature);
     emit valuesChanged();
   }
index 8c05cbb046a64055f2bf67cee0ec5aa0d22c5c2b..95f558029661cddad8f1bd80aafaa1a936600933 100644 (file)
@@ -48,8 +48,9 @@ class MODULEBASE_EXPORT ModuleBase_WidgetValidated : public ModuleBase_ModelWidg
   /// This value should be processed in the widget according to the needs
   /// The method is called by the current operation to process the operation preselection.
   /// It is redefined to check the value validity and if it is, fill the attribute with by value
-  /// \param theValue the wrapped widget value
-  virtual bool setSelection(ModuleBase_ViewerPrs theValue);
+  /// \param theValues the wrapped selection values
+  /// \param thePosition an index in the list of values, the values should be get from the index
+  virtual bool setSelection(const QList<ModuleBase_ViewerPrs>& theValues, int& thePosition);
 
 protected:
   /// Creates a backup of the current values of the attribute
index 10f6de95fd65dc663d5e28d6d00fcbcab2f4ebed..b49330a6b905764efd807fd9a6abda7320be0325 100644 (file)
@@ -120,11 +120,16 @@ PartSet_WidgetPoint2D::~PartSet_WidgetPoint2D()
 {
 }
 
-bool PartSet_WidgetPoint2D::setSelection(ModuleBase_ViewerPrs theValue)
+bool PartSet_WidgetPoint2D::setSelection(const QList<ModuleBase_ViewerPrs>& theValues, int& thePosition)
 {
+  if (thePosition < 0 || thePosition >= theValues.size())
+    return false;
+  ModuleBase_ViewerPrs aValue = theValues[thePosition];
+  thePosition++;
+
   Handle(V3d_View) aView = myWorkshop->viewer()->activeView();
   bool isDone = false;
-  TopoDS_Shape aShape = theValue.shape();
+  TopoDS_Shape aShape = aValue.shape();
   double aX, aY;
   if (getPoint2d(aView, aShape, aX, aY)) {
     isDone = setPoint(aX, aY);
index e39011c9054e32484b65472bdf9bdda846078354..a2fe2aa8df1b53afbc3caca4e3fccd53ddf55756 100644 (file)
@@ -53,7 +53,7 @@ Q_OBJECT
   /// Set the given wrapped value to the current widget
   /// This value should be processed in the widget according to the needs
   /// \param theValue the wrapped widget value
-  virtual bool setSelection(ModuleBase_ViewerPrs theValue);
+  virtual bool setSelection(const QList<ModuleBase_ViewerPrs>& theValues, int& thePosition);
 
   virtual bool restoreValue();
 
index ceeeb6bff17f662dd6d2367f90bc9fef00c53374..c2ca8a4d2d863cefb118caf7f7dd05e92a5cb639 100644 (file)
@@ -85,7 +85,7 @@ PartSet_WidgetSketchLabel::~PartSet_WidgetSketchLabel()
   erasePreviewPlanes();
 }
 
-bool PartSet_WidgetSketchLabel::setSelection(ModuleBase_ViewerPrs theValue)
+bool PartSet_WidgetSketchLabel::setSelection(const QList<ModuleBase_ViewerPrs>& theValues, int& thePosition)
 {
   // do not use the given selection if the plane of the sketch has been already set.
   // If this check is absent, a selected plane in the viewer can be set in the sketch
@@ -93,7 +93,7 @@ bool PartSet_WidgetSketchLabel::setSelection(ModuleBase_ViewerPrs theValue)
   if (plane().get())
     return true;
 
-  return ModuleBase_WidgetValidated::setSelection(theValue);
+  return ModuleBase_WidgetValidated::setSelection(theValues, thePosition);
 }
 
 QList<QWidget*> PartSet_WidgetSketchLabel::getControls() const
index eea79ea6d552119bf2d568384f6fdd64c2647de6..6a39f04891bb0a5f6c5e4ce1cfa8c7907dae187a 100644 (file)
@@ -52,8 +52,9 @@ Q_OBJECT
   /// This value should be processed in the widget according to the needs
   /// The method is called by the current operation to process the operation preselection.
   /// It is redefined to do nothing if the plane of the sketch has been already set.
-  /// \param theValue the wrapped widget value
-  virtual bool setSelection(ModuleBase_ViewerPrs theValue);
+  /// \param theValues the wrapped selection values
+  /// \param thePosition an index in the list of values, the values should be get from the index
+  virtual bool setSelection(const QList<ModuleBase_ViewerPrs>& theValues, int& thePosition);
 
   virtual bool restoreValue()
   {