]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Preselection using in operations
authornds <natalia.donis@opencascade.com>
Tue, 16 Jun 2015 09:22:33 +0000 (12:22 +0300)
committernds <natalia.donis@opencascade.com>
Tue, 16 Jun 2015 09:22:33 +0000 (12:22 +0300)
src/ModuleBase/ModuleBase_ISelection.h
src/ModuleBase/ModuleBase_Operation.cpp
src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp
src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp
src/ModuleBase/ModuleBase_WidgetSwitch.h
src/ModuleBase/ModuleBase_WidgetValidated.cpp
src/ModuleBase/ModuleBase_WidgetValidated.h
src/PartSet/PartSet_WidgetSketchLabel.cpp
src/XGUI/XGUI_Selection.cpp
src/XGUI/XGUI_Selection.h
src/XGUI/XGUI_SelectionMgr.cpp

index e6a92d558313dd3b7acb7663a4d38f5a33f920a5..0f653f6315cea3b78cf421fca135b259f45e9365 100644 (file)
@@ -31,10 +31,12 @@ class Handle_SelectMgr_EntityOwner;
 class ModuleBase_ISelection
 {
  public:
+   /// Types of the selection place, where the selection is obtained
+   enum SelectionPlace { Browser, Viewer, AllControls };
 
   /// Returns a list of viewer selected presentations
   /// \return list of presentations
-  virtual QList<ModuleBase_ViewerPrs> getSelected() const = 0;
+  virtual QList<ModuleBase_ViewerPrs> getSelected(const SelectionPlace& thePlace = Browser) const = 0;
 
   /// Returns a list of viewer highlited presentations
   /// \return list of presentations
index 7722b9ee72b6fc8f63cf0cc4bf1729de76cd4473..492637ba512808f1838ff4ddade6867c1bfcc4ce 100644 (file)
@@ -333,7 +333,7 @@ void ModuleBase_Operation::initSelection(ModuleBase_ISelection* theSelection,
   // Check that the selected result are not results of operation feature
   FeaturePtr aFeature = feature();
   if (aFeature) {
-    QList<ModuleBase_ViewerPrs> aSelected = theSelection->getSelected();
+    QList<ModuleBase_ViewerPrs> aSelected = theSelection->getSelected(ModuleBase_ISelection::AllControls);
 
     std::list<ResultPtr> aResults = aFeature->results();
     QObjectPtrList aResList;
@@ -346,7 +346,7 @@ void ModuleBase_Operation::initSelection(ModuleBase_ISelection* theSelection,
         aPreSelected.append(aPrs);
     }
   } else
-    aPreSelected = theSelection->getSelected();
+    aPreSelected = theSelection->getSelected(ModuleBase_ISelection::AllControls);
 
   // convert the selection values to the values, which are set to the operation widgets
 
index 18b88a1457fe05d2d9f255b6594831d399a39686..6f413e634d1f0d2486e5b97aabd1e776e51afb9e 100644 (file)
@@ -406,7 +406,7 @@ void ModuleBase_WidgetMultiSelector::onSelectionTypeChanged()
 //********************************************************************
 void ModuleBase_WidgetMultiSelector::onSelectionChanged()
 {
-  QList<ModuleBase_ViewerPrs> aSelected = getSelectedEntitiesOrObjects(myWorkshop->selection());
+  QList<ModuleBase_ViewerPrs> aSelected = myWorkshop->selection()->getSelected(ModuleBase_ISelection::AllControls);
 
   DataPtr aData = myFeature->data();
   AttributeSelectionListPtr aSelectionListAttr = 
index 34666e3b862bbfcdf11ef7dbc29be76c4c9ac39d..457a9f6ffe392950c180d7a2105451e5368ca3c4 100644 (file)
@@ -215,7 +215,7 @@ void ModuleBase_WidgetShapeSelector::onSelectionChanged()
   setObject(ObjectPtr(), std::shared_ptr<GeomAPI_Shape>(new GeomAPI_Shape()));
 
   bool aHasObject = false;
-  QList<ModuleBase_ViewerPrs> aSelectedPrs = getSelectedEntitiesOrObjects(myWorkshop->selection());
+  QList<ModuleBase_ViewerPrs> aSelectedPrs = myWorkshop->selection()->getSelected(ModuleBase_ISelection::AllControls);
   if (!aSelectedPrs.empty()) {
     ModuleBase_ViewerPrs aPrs = aSelectedPrs.first();
     if (!aPrs.isEmpty() && isValidSelection(aPrs)) {
index 5772a3d0878dd2b03be3bf56c77cc83df163b4c8..aafb6224f0c280599a33eb0d5b6769f6222eed5b 100644 (file)
@@ -31,6 +31,10 @@ class MODULEBASE_EXPORT ModuleBase_WidgetSwitch : public ModuleBase_PagedContain
                           const std::string& theParentId);
   virtual ~ModuleBase_WidgetSwitch();
 
+  /// Defines if it is supported to set the value in this widget
+  /// It returns false because this is an info widget
+  virtual bool canSetValue() const { return false; };
+
   /// Add a page to the widget
   /// \param theWidget a page widget
   /// \param theName a name of page
index 6caa7de0bd521be05f0b98f0290c8ffdc2b507ca..b329e36c9ac6f065e7e90070cab6f0de0b691948 100644 (file)
@@ -140,19 +140,3 @@ void ModuleBase_WidgetValidated::customValidators(std::list<ModelAPI_Validator*>
                                           std::list<std::list<std::string> >& theArguments) const
 {
 }
-
-QList<ModuleBase_ViewerPrs> ModuleBase_WidgetValidated::getSelectedEntitiesOrObjects(
-                                                  ModuleBase_ISelection* theSelection) const
-{
-  QList<ModuleBase_ViewerPrs> aSelectedPrs;
-
-  // find selected presentation either in the viewer or in OB
-  // the selection in OCC viewer - the selection of a sub-shapes in the viewer
-  aSelectedPrs = theSelection->getSelected();
-  if (aSelectedPrs.empty()) {
-    // the selection in Object Browser
-    QObjectPtrList anObjects = theSelection->selectedObjects();
-    aSelectedPrs = ModuleBase_ISelection::getViewerPrs(anObjects);
-  }
-  return aSelectedPrs;
-}
index 5c4f319dc090b8a49bc650666e75d34426eb3ae1..e13fb166f96063ba6b8ff73949207312767d3c64 100644 (file)
@@ -90,16 +90,6 @@ protected:
   /// \param theArguments a list of validators arguments
   virtual void customValidators(std::list<ModelAPI_Validator*>& theValidators,
                                 std::list<std::list<std::string> >& theArguments) const;
-
-  /// Returns a list of selected presentations. Firstly it is obtained from the viewer,
-  /// if there are not selected objects in the viewer, it get the selection from the object browser.
-  /// If the browser has selected objects, the viewer prs objects are created with only object
-  /// field of the presentation initialized. The widget should accept the selection in the object
-  /// browser at the same way as in the viewer.
-  /// \param theSelection a selection, where the selected objects and presentations are found
-  /// \return a list of presentations
-  QList<ModuleBase_ViewerPrs> getSelectedEntitiesOrObjects(ModuleBase_ISelection* theSelection) const;
-
 };
 
 #endif /* MODULEBASE_WIDGETVALIDATED_H_ */
index 0d1b2bd2c4112a90aca806c3fce08e0f18da5911..e72f1bff547f1bbc19fd3cb83865c795077cfff1 100644 (file)
@@ -101,8 +101,8 @@ QList<QWidget*> PartSet_WidgetSketchLabel::getControls() const
 
 void PartSet_WidgetSketchLabel::onSelectionChanged()
 {
-  QList<ModuleBase_ViewerPrs> aSelectedPrs = getSelectedEntitiesOrObjects(
-                                             myWorkshop->selector()->selection());
+  QList<ModuleBase_ViewerPrs> aSelectedPrs = myWorkshop->selector()->selection()->getSelected(
+                                                           ModuleBase_ISelection::AllControls);
   if (aSelectedPrs.empty())
     return;
   ModuleBase_ViewerPrs aPrs = aSelectedPrs.first();
index ea99308aa7a2cabdc93d9082c86d382db1b6a5f7..8a14e7d1800510dc8e497c2b9c561edb9735d03f 100644 (file)
@@ -24,18 +24,33 @@ XGUI_Selection::XGUI_Selection(XGUI_Workshop* theWorkshop)
 {
 }
 
-QList<ModuleBase_ViewerPrs> XGUI_Selection::getSelected() const
+QList<ModuleBase_ViewerPrs> XGUI_Selection::getSelected(const SelectionPlace& thePlace) const
 {
-  QList<long> aSelectedIds; // Remember of selected address in order to avoid duplicates
-
   QList<ModuleBase_ViewerPrs> aPresentations;
-  XGUI_Displayer* aDisplayer = myWorkshop->displayer();
 
+  switch (thePlace) {
+    case Browser:
+      getSelectedInBrowser(aPresentations);
+    break;
+    case Viewer:
+      getSelectedInViewer(aPresentations);
+    break;
+  case AllControls:
+      getSelectedInViewer(aPresentations);
+      getSelectedInBrowser(aPresentations);
+    break;
+  }
+  return aPresentations;
+}
+
+void XGUI_Selection::getSelectedInViewer(QList<ModuleBase_ViewerPrs>& thePresentations) const
+{
   Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
   if (aContext.IsNull())
-    return aPresentations;
+    return;
 
   if (aContext->HasOpenedContext()) {
+    QList<long> aSelectedIds; // Remember of selected address in order to avoid duplicates
     for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) {
       ModuleBase_ViewerPrs aPrs;
       Handle(SelectMgr_EntityOwner) anOwner = aContext->SelectedOwner();
@@ -46,25 +61,30 @@ QList<ModuleBase_ViewerPrs> XGUI_Selection::getSelected() const
 
       fillPresentation(aPrs, anOwner);
 
-      aPresentations.append(aPrs);
+      if (!thePresentations.contains(aPrs)) // TODO: check whether the presentation in a list
+        thePresentations.append(aPrs);
     }
   }
-  /* else {
-    for (aContext->InitCurrent(); aContext->MoreCurrent(); aContext->NextCurrent()) {
-      ModuleBase_ViewerPrs aPrs;
-      Handle(AIS_InteractiveObject) anIO = aContext->Current();
-      if (aSelectedIds.contains((long)anIO.Access()))
-        continue;
-    
-      aSelectedIds.append((long)anIO.Access());
-      aPrs.setInteractive(anIO);
+}
 
-      ObjectPtr aFeature = aDisplayer->getObject(anIO);
-      aPrs.setFeature(aFeature);
-      aPresentations.append(aPrs);
+void XGUI_Selection::getSelectedInBrowser(QList<ModuleBase_ViewerPrs>& thePresentations) const
+{
+  // collect the objects  of the parameter presentation to avoid a repeted objects in the result
+  QObjectPtrList aPresentationObjects;
+  QList<ModuleBase_ViewerPrs>::const_iterator aPrsIt = thePresentations.begin(),
+                                              aPrsLast = thePresentations.end();
+  for (; aPrsIt != aPrsLast; aPrsIt++) {
+    aPresentationObjects.push_back((*aPrsIt).object());
+  }
+
+  QObjectPtrList anObjects = selectedObjects();
+  QObjectPtrList::const_iterator anIt = anObjects.begin(), aLast = anObjects.end();
+  for (; anIt != aLast; anIt++) {
+    ObjectPtr anObject = *anIt;
+    if (anObject.get() != NULL && !aPresentationObjects.contains(anObject)) {
+      thePresentations.append(ModuleBase_ViewerPrs(anObject, TopoDS_Shape(), NULL));
     }
-  }*/
-  return aPresentations;
+  }
 }
 
 void XGUI_Selection::fillPresentation(ModuleBase_ViewerPrs& thePrs,
index ea5886a8a94013c33809a2f0bc1c3e36a71f2c1b..caf1088f7bd3d1b523e91e9bcbcf2408ab693775 100644 (file)
@@ -36,7 +36,7 @@ class XGUI_EXPORT XGUI_Selection : public ModuleBase_ISelection
 
   /// Returns a list of viewer selected presentations
   /// \return list of presentations
-  virtual QList<ModuleBase_ViewerPrs> getSelected() const;
+  virtual QList<ModuleBase_ViewerPrs> getSelected(const SelectionPlace& thePlace = Browser) const;
 
   /// Fills the viewer presentation parameters by the parameters from the owner
   /// \param thePrs a container for selection
@@ -88,7 +88,18 @@ class XGUI_EXPORT XGUI_Selection : public ModuleBase_ISelection
   void entityOwners(const Handle_AIS_InteractiveObject& theObject,
                     SelectMgr_IndexedMapOfOwner& theOwners) const;
 
- private:
+protected:
+  /// Fills the list of presentations by objects selected in the viewer.
+  /// \param thePresentations an output list of presentation
+  void getSelectedInViewer(QList<ModuleBase_ViewerPrs>& thePresentations) const;
+  /// Fills the list of presentations by objects selected in the object browser.
+  /// ViewerPrs contains only object parameter not empty.
+  /// If the given list of presentations already has a viewer presentation with the same object
+  /// as selected in the browser, a new item is not appended to the list of presentations.
+  /// \param thePresentations an output list of presentation
+  void getSelectedInBrowser(QList<ModuleBase_ViewerPrs>& thePresentations) const;
+
+private:
   XGUI_Workshop* myWorkshop;
 };
 
index 517f248668f0d0404773a0af6a2de7d610c0157a..05c86e20e34fe09ff97616d9a1a6df4c29340c04 100644 (file)
@@ -86,8 +86,8 @@ void XGUI_SelectionMgr::updateSelectedOwners(bool isUpdateViewer)
 //**************************************************************
 void XGUI_SelectionMgr::onObjectBrowserSelection()
 {
-  QObjectPtrList aObjects = myWorkshop->objectBrowser()->selectedObjects();
-  QList<ModuleBase_ViewerPrs> aSelectedPrs = ModuleBase_ISelection::getViewerPrs(aObjects);
+  QList<ModuleBase_ViewerPrs> aSelectedPrs =
+             myWorkshop->selector()->selection()->getSelected(ModuleBase_ISelection::Browser);
 
   XGUI_Displayer* aDisplayer = myWorkshop->displayer();
   aDisplayer->setSelected(aSelectedPrs);
@@ -119,7 +119,9 @@ void XGUI_SelectionMgr::clearSelection()
   bool aBlocked = myWorkshop->objectBrowser()->blockSignals(true);
   myWorkshop->objectBrowser()->setObjectsSelected(aFeatures);
   myWorkshop->objectBrowser()->blockSignals(aBlocked);
-  QList<ModuleBase_ViewerPrs> aSelectedPrs = ModuleBase_ISelection::getViewerPrs(aFeatures);
+  
+  QList<ModuleBase_ViewerPrs> aSelectedPrs =
+             myWorkshop->selector()->selection()->getSelected(ModuleBase_ISelection::Browser);
 
   XGUI_Displayer* aDisplayer = myWorkshop->displayer();
   aDisplayer->setSelected(aSelectedPrs);