]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #192: store shape type for selection list attribute
authorsbh <sergey.belash@opencascade.com>
Fri, 31 Oct 2014 10:03:44 +0000 (13:03 +0300)
committersbh <sergey.belash@opencascade.com>
Fri, 31 Oct 2014 10:03:44 +0000 (13:03 +0300)
src/Model/Model_AttributeSelectionList.cpp
src/Model/Model_AttributeSelectionList.h
src/ModelAPI/ModelAPI_AttributeSelectionList.h
src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp
src/ModuleBase/ModuleBase_WidgetMultiSelector.h

index a95510118475b39a4e03d102df82725f09fa8de9..e1cb750aab27fc804b051e4c8539dc277be2c0f9 100644 (file)
@@ -34,6 +34,16 @@ int Model_AttributeSelectionList::size()
   return mySize->Get();
 }
 
+int Model_AttributeSelectionList::selectionType()
+{
+  return (int) mySelectionType->Get();
+}
+
+void Model_AttributeSelectionList::setSelectionType(int theType)
+{
+  mySelectionType->Set((double) theType);
+}
+
 boost::shared_ptr<ModelAPI_AttributeSelection> 
   Model_AttributeSelectionList::value(const int theIndex)
 {
@@ -58,6 +68,7 @@ Model_AttributeSelectionList::Model_AttributeSelectionList(TDF_Label& theLabel)
   myIsInitialized = theLabel.FindAttribute(TDataStd_Integer::GetID(), mySize) == Standard_True;
   if (!myIsInitialized) {
     mySize = TDataStd_Integer::Set(theLabel, 0);
+    mySelectionType = TDataStd_Real::Set(theLabel, 0);
   } else { // recollect mySubs
     int aNum = mySize->Get();
     TDF_ChildIterator aSubIter(theLabel);
index 103b213f18e8128b3e9953c6aff7aa7bdfb8a509..f10d6d97fa0e21e35c0aa3e2cd5b6d28e71929b7 100644 (file)
@@ -9,6 +9,7 @@
 #include "Model_AttributeSelection.h"
 #include <ModelAPI_AttributeSelectionList.h>
 #include <TDataStd_Integer.hxx>
+#include <TDataStd_Real.hxx>
 #include <vector>
 
 /**\class Model_AttributeSelectionList
@@ -20,6 +21,7 @@
 class Model_AttributeSelectionList : public ModelAPI_AttributeSelectionList
 {
   Handle(TDataStd_Integer) mySize;  ///< Contains size of this list
+  Handle(TDataStd_Real) mySelectionType;  ///< Contains current index, TODO: make it integer, not real
   std::vector<boost::shared_ptr<Model_AttributeSelection> > mySubs; /// the selection attributes
 public:
   /// Adds the new reference to the end of the list
@@ -29,6 +31,10 @@ public:
   /// Returns the number ofselection attributes in the list
   MODEL_EXPORT virtual int size();
 
+  MODEL_EXPORT virtual int selectionType();
+
+  MODEL_EXPORT virtual void setSelectionType(int);
+
   /// Returns the attribute selection by the index (zero based)
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_AttributeSelection> value(const int theIndex);
 
index 6dc13dd3a6b35c9a8467b16af7efe4e010c8c8e1..aef9046aef1966e13a198fcfc859f248c08d0df2 100644 (file)
@@ -24,6 +24,10 @@ class ModelAPI_AttributeSelectionList : public ModelAPI_Attribute
   /// Returns the number ofselection attributes in the list
   virtual int size() = 0;
 
+  virtual int selectionType() = 0;
+
+  virtual void setSelectionType(int) = 0;
+
   /// Returns the attribute selection by the index (zero based)
   virtual boost::shared_ptr<ModelAPI_AttributeSelection> value(const int theIndex) = 0;
 
index ed40ee20434af9d1fb022043a90e13be7f2f84f2..ab89d70ef16736b4b5d330f62b028bdb54a38e8c 100644 (file)
@@ -45,8 +45,8 @@ ModuleBase_WidgetMultiSelector::ModuleBase_WidgetMultiSelector(QWidget* theParen
   myTypeCombo = new QComboBox(myMainWidget);
   // There is no sence to paramerize list of types while we can not parametrize selection mode
   QString aTypesStr("Vertices Edges Faces Solids");
-  myShapeTypes = aTypesStr.split(' ');
-  myTypeCombo->addItems(myShapeTypes);
+  QStringList aShapeTypes = aTypesStr.split(' ');
+  myTypeCombo->addItems(aShapeTypes);
   aMainLay->addWidget(myTypeCombo, 0, 1);
 
   QLabel* aListLabel = new QLabel(tr("Selected objects:"), myMainWidget);
@@ -81,6 +81,11 @@ bool ModuleBase_WidgetMultiSelector::storeValue() const
 
   if (aSelectionListAttr && (mySelection.size() > 0)) {
     aSelectionListAttr->clear();
+    // Store shapes type
+    TopAbs_ShapeEnum aCurrentType =
+          ModuleBase_WidgetShapeSelector::shapeType(myTypeCombo->currentText());
+    aSelectionListAttr->setSelectionType((int) aCurrentType);
+    // Store selection in the attribute
     foreach (GeomSelection aSelec, mySelection) {
       aSelectionListAttr->append(aSelec.first, aSelec.second);
     }
@@ -102,6 +107,10 @@ bool ModuleBase_WidgetMultiSelector::restoreValue()
 
   if (aSelectionListAttr) {
     mySelection.clear();
+    // Restore shape type
+    TopAbs_ShapeEnum aShapeType = (TopAbs_ShapeEnum) aSelectionListAttr->selectionType();
+    setCurrentShapeType(aShapeType);
+    // Restore selection in the list
     for (int i = 0; i < aSelectionListAttr->size(); i++) {
       AttributeSelectionPtr aSelectAttr = aSelectionListAttr->value(i);
       mySelection.append(GeomSelection(aSelectAttr->context(), aSelectAttr->value()));
@@ -202,6 +211,21 @@ void ModuleBase_WidgetMultiSelector::filterShapes(const NCollection_List<TopoDS_
   }
 }
 
+
+//********************************************************************
+void ModuleBase_WidgetMultiSelector::setCurrentShapeType(const TopAbs_ShapeEnum theShapeType)
+{
+  QString aShapeTypeName;
+  for (int idx = 0; idx < myTypeCombo->count(); ++idx) {
+    aShapeTypeName = myTypeCombo->currentText();
+    TopAbs_ShapeEnum aRefType = ModuleBase_WidgetShapeSelector::shapeType(aShapeTypeName);
+    if(aRefType == theShapeType && idx != myTypeCombo->currentIndex()) {
+      myTypeCombo->setCurrentIndex(idx);
+      break;
+    }
+  }
+}
+
 //********************************************************************
 void ModuleBase_WidgetMultiSelector::activateSelection(bool toActivate)
 {
index c141c87e97d77fd96dddae7147473173afc8a547..a456a10dc30f68e4cca4dcea030596e6160fecdf 100644 (file)
@@ -61,6 +61,7 @@ class MODULEBASE_EXPORT ModuleBase_WidgetMultiSelector : public ModuleBase_Model
  protected:
   void filterShapes(const NCollection_List<TopoDS_Shape>& theShapesToFilter,
                     NCollection_List<TopoDS_Shape>& theResult);
+  void setCurrentShapeType(const TopAbs_ShapeEnum theShapeType);
 
  private:
    void updateSelectionList();
@@ -73,7 +74,6 @@ class MODULEBASE_EXPORT ModuleBase_WidgetMultiSelector : public ModuleBase_Model
   ModuleBase_IWorkshop* myWorkshop;
 
   /// If true then local selector has to be activated in context
-  QStringList myShapeTypes;
   bool myUseSubShapes;
   bool myIsActive;