]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Improve multi-selection control
authorvsv <vitaly.smetannikov@opencascade.com>
Fri, 10 Apr 2015 12:02:01 +0000 (15:02 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Fri, 10 Apr 2015 12:02:01 +0000 (15:02 +0300)
src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp
src/XGUI/XGUI_Displayer.cpp

index 9d74cc2fb48bb08f67d546bcf00611bf0389cf2b..53f0352756df1ebd3c712260df79170dbc05b39d 100644 (file)
@@ -282,11 +282,10 @@ void ModuleBase_WidgetMultiSelector::onSelectionChanged()
       }
     }
   }
+  emit valuesChanged();
   // the updateObject method should be called to flush the updated sigal. The workshop listens it,
   // calls validators for the feature and, as a result, updates the Apply button state.
   updateObject(myFeature);
-
-  emit valuesChanged();
 }
 
 //********************************************************************
@@ -334,6 +333,8 @@ void ModuleBase_WidgetMultiSelector::updateSelectionList(AttributeSelectionListP
     AttributeSelectionPtr aAttr = theList->value(i);
     myListControl->addItem(aAttr->namingName().c_str());
   }
+  // We have to call repaint because sometimes the List control is not updated
+  myListControl->repaint();
 }
 
 //********************************************************************
index d920f4630516a99986b86978b39c80be5dbe03e5..0eff27bb2944ec5c70e7539661fc943330c15904 100644 (file)
@@ -46,7 +46,7 @@ const int MOUSE_SENSITIVITY_IN_PIXEL = 10;  ///< defines the local context mouse
 //#define DEBUG_DISPLAY
 //#define DEBUG_ACTIVATE
 //#define DEBUG_FEATURE_REDISPLAY
-#define DEBUG_SELECTION_FILTERS
+//#define DEBUG_SELECTION_FILTERS
 
 // Workaround for bug #25637
 void displayedObjects(const Handle(AIS_InteractiveContext)& theAIS, AIS_ListOfInteractive& theList)
@@ -707,7 +707,13 @@ void XGUI_Displayer::addSelectionFilter(const Handle(SelectMgr_Filter)& theFilte
     if (theFilter.Access() == aIt.Value().Access())
       return;
   }
-  GetFilter()->Add(theFilter);
+  Handle(SelectMgr_CompositionFilter) aCompFilter = GetFilter();
+  const SelectMgr_ListOfFilter& aStoredFilters = aCompFilter->StoredFilters();
+  for (aIt.Initialize(aStoredFilters); aIt.More(); aIt.Next()) {
+    if (theFilter.Access() == aIt.Value().Access())
+      return;
+  }
+  aCompFilter->Add(theFilter);
 #ifdef DEBUG_SELECTION_FILTERS
   int aCount = GetFilter()->StoredFilters().Extent();
   qDebug(QString("addSelectionFilter: filters.count() = %1").arg(aCount).toStdString().c_str());