X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_SelectionMgr.cpp;h=8304179726f246d4106c5cef7f06256dd71a53b5;hb=d77e6639d89abdcbf327cc73d13bf955064b8524;hp=0bba0d847e44253acc5379e70d42b3c64deef85b;hpb=0ff644739fa90d6f15d410f69e41bb5d1cddc25a;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_SelectionMgr.cpp b/src/XGUI/XGUI_SelectionMgr.cpp index 0bba0d847..830417972 100644 --- a/src/XGUI/XGUI_SelectionMgr.cpp +++ b/src/XGUI/XGUI_SelectionMgr.cpp @@ -1,97 +1,144 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> + #include "XGUI_SelectionMgr.h" + #include "XGUI_Workshop.h" -#include "XGUI_MainWindow.h" #include "XGUI_ObjectsBrowser.h" -#include "XGUI_Viewer.h" #include "XGUI_SalomeConnector.h" +#include "XGUI_ViewerProxy.h" +#include "XGUI_Displayer.h" +#include "XGUI_Selection.h" + +#include #include -#include +#include #include #include +#include +#include +#include - -XGUI_SelectionMgr::XGUI_SelectionMgr(XGUI_Workshop* theParent) : - QObject(theParent), myWorkshop(theParent) +XGUI_SelectionMgr::XGUI_SelectionMgr(XGUI_Workshop* theParent) + : QObject(theParent), + myWorkshop(theParent) { + mySelection = new XGUI_Selection(myWorkshop); } XGUI_SelectionMgr::~XGUI_SelectionMgr() { + delete mySelection; } //************************************************************** void XGUI_SelectionMgr::connectViewers() { - connect(myWorkshop->objectBrowser(), SIGNAL(selectionChanged()), - this, SLOT(onObjectBrowserSelection())); + connect(myWorkshop->objectBrowser(), SIGNAL(selectionChanged()), this, + SLOT(onObjectBrowserSelection())); //Connect to other viewers - if (myWorkshop->isSalomeMode()) { - connect(myWorkshop, SIGNAL(salomeViewerSelection()), - this, SLOT(onViewerSelection())); - } else { - connect(myWorkshop->mainWindow()->viewer(), SIGNAL(selectionChanged()), - this, SLOT(onViewerSelection())); - } + connect(myWorkshop->viewer(), SIGNAL(selectionChanged()), this, SLOT(onViewerSelection())); } //************************************************************** -void XGUI_SelectionMgr::onObjectBrowserSelection() +void XGUI_SelectionMgr::setSelectedOwners(const SelectMgr_IndexedMapOfOwner& theSelectedOwners, + bool isUpdateViewer) { + SelectMgr_IndexedMapOfOwner aSelectedOwners; + selection()->selectedOwners(aSelectedOwners); - // TODO: Highliht selected objects in Viewer 3d + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + for (Standard_Integer i = 1, n = theSelectedOwners.Extent(); i <= n; i++) { + Handle(SelectMgr_EntityOwner) anOwner = theSelectedOwners(i); + if (aSelectedOwners.FindIndex(anOwner) > 0) + continue; - emit selectionChanged(); + aContext->AddOrRemoveSelected(anOwner, isUpdateViewer); + } } //************************************************************** -void XGUI_SelectionMgr::onViewerSelection() +void XGUI_SelectionMgr::updateSelectedOwners(bool isUpdateViewer) { - // TODO: Highliht selected objects in Object Browser - emit selectionChanged(); -} + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + const SelectMgr_ListOfFilter& aFilters = aContext->Filters(); -//************************************************************** -QFeatureList XGUI_SelectionMgr::selectedFeatures() const -{ - return myWorkshop->objectBrowser()->selectedFeatures(); + SelectMgr_IndexedMapOfOwner anOwnersToDeselect; + + SelectMgr_ListIteratorOfListOfFilter anIt(aFilters); + for (; anIt.More(); anIt.Next()) { + Handle(SelectMgr_Filter) aFilter = anIt.Value(); + for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) { + Handle(SelectMgr_EntityOwner) anOwner = aContext->SelectedOwner(); + if (!aFilter->IsOk(anOwner)) + anOwnersToDeselect.Add(aContext->SelectedOwner()); + } + } + + setSelectedOwners(anOwnersToDeselect, false); + + if (isUpdateViewer) + aContext->UpdateCurrentViewer(); } //************************************************************** -QModelIndexList XGUI_SelectionMgr::selectedIndexes() const -{ - return myWorkshop->objectBrowser()->selectionModel()->selectedIndexes(); +void XGUI_SelectionMgr::onObjectBrowserSelection() +{ + QObjectPtrList aObjects = myWorkshop->objectBrowser()->selectedObjects(); + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + aDisplayer->setSelected(aObjects); + emit selectionChanged(); } //************************************************************** -void XGUI_SelectionMgr::selectedAISObjects(AIS_ListOfInteractive& theList) const +void XGUI_SelectionMgr::onViewerSelection() { - if (myWorkshop->isSalomeMode()) { - Handle(AIS_InteractiveContext) aContext = myWorkshop->salomeConnector()->AISContext(); - theList.Clear(); - for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) - theList.Append(aContext->SelectedInteractive()); - } else { - XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); - aViewer->getSelectedObjects(theList); + QObjectPtrList aFeatures; + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) { + Handle(AIS_InteractiveObject) anIO = aContext->SelectedInteractive(); + ObjectPtr aResult = myWorkshop->displayer()->getObject(anIO); + if (aResult) + aFeatures.append(aResult); } + bool aBlocked = myWorkshop->objectBrowser()->blockSignals(true); + myWorkshop->objectBrowser()->setObjectsSelected(aFeatures); + myWorkshop->objectBrowser()->blockSignals(aBlocked); + + emit selectionChanged(); } //************************************************************** -void XGUI_SelectionMgr::selectedShapes(NCollection_List& theList) const -{ - if (myWorkshop->isSalomeMode()) { - theList.Clear(); - Handle(AIS_InteractiveContext) aContext = myWorkshop->salomeConnector()->AISContext(); - for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) { - TopoDS_Shape aShape = aContext->SelectedShape(); - if (!aShape.IsNull()) - theList.Append(aShape); - } - } else { - XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); - aViewer->getSelectedShapes(theList); - } -} \ No newline at end of file +/*QFeatureList XGUI_SelectionMgr::selectedFeatures() const + { + return myWorkshop->objectBrowser()->selectedFeatures(); + } + + //************************************************************** + QModelIndexList XGUI_SelectionMgr::selectedIndexes() const + { + return myWorkshop->objectBrowser()->selectedIndexes(); + } + + //************************************************************** + void XGUI_SelectionMgr::selectedAISObjects(AIS_ListOfInteractive& theList) const + { + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + theList.Clear(); + for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) + theList.Append(aContext->SelectedInteractive()); + } + + //************************************************************** + void XGUI_SelectionMgr::selectedShapes(NCollection_List& theList) const + { + theList.Clear(); + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) { + TopoDS_Shape aShape = aContext->SelectedShape(); + if (!aShape.IsNull()) + theList.Append(aShape); + } + }*/