X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_SelectionMgr.cpp;h=ad92b420b0568a91ebf1e53bfbf049e71a6a6231;hb=1cef78af4c4328ecf99a3ced86bda38e6e82e15c;hp=c4c09491de67d2fe34635116cb1ee8888ef4fc70;hpb=bfc592b7af1751c4a64d5e545f5ac1dc513ecd01;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_SelectionMgr.cpp b/src/XGUI/XGUI_SelectionMgr.cpp index c4c09491d..ad92b420b 100644 --- a/src/XGUI/XGUI_SelectionMgr.cpp +++ b/src/XGUI/XGUI_SelectionMgr.cpp @@ -1,42 +1,149 @@ +// 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_SalomeConnector.h" +#include "XGUI_ViewerProxy.h" +#include "XGUI_Displayer.h" +#include "XGUI_Selection.h" + +#ifndef HAVE_SALOME +#include +#endif #include -#include +#include #include +#include +#include #include +#include + +XGUI_SelectionMgr::XGUI_SelectionMgr(XGUI_Workshop* theParent) + : QObject(theParent), + myWorkshop(theParent) +{ + mySelection = new XGUI_Selection(myWorkshop); +} +XGUI_SelectionMgr::~XGUI_SelectionMgr() +{ + delete mySelection; +} -XGUI_SelectionMgr::XGUI_SelectionMgr(XGUI_Workshop* theParent) : - QObject(theParent), myWorkshop(theParent) +//************************************************************** +void XGUI_SelectionMgr::connectViewers() { - XGUI_ObjectsBrowser* aObjBrowser = myWorkshop->mainWindow()->objectBrowser(); + connect(myWorkshop->objectBrowser(), SIGNAL(selectionChanged()), this, + SLOT(onObjectBrowserSelection())); - connect(aObjBrowser, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); + //Connect to other viewers + connect(myWorkshop->viewer(), SIGNAL(selectionChanged()), this, SLOT(onViewerSelection())); } +//************************************************************** +void XGUI_SelectionMgr::setSelectedOwners(const SelectMgr_IndexedMapOfOwner& theSelectedOwners, + bool isUpdateViewer) +{ + SelectMgr_IndexedMapOfOwner aSelectedOwners; + selection()->selectedOwners(aSelectedOwners); + + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + if (!aContext.IsNull()) { + for (Standard_Integer i = 1, n = theSelectedOwners.Extent(); i <= n; i++) { + Handle(SelectMgr_EntityOwner) anOwner = theSelectedOwners(i); + if (aSelectedOwners.FindIndex(anOwner) > 0) + continue; -XGUI_SelectionMgr::~XGUI_SelectionMgr() + aContext->AddOrRemoveSelected(anOwner, isUpdateViewer); + } + } +} + +//************************************************************** +void XGUI_SelectionMgr::updateSelectedOwners(bool isUpdateViewer) { + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + if (aContext.IsNull()) + return; + + const SelectMgr_ListOfFilter& aFilters = aContext->Filters(); + + 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(); } -void XGUI_SelectionMgr::onSelectionChanged() +//************************************************************** +void XGUI_SelectionMgr::onObjectBrowserSelection() { - XGUI_ObjectsBrowser* aObjBrowser = myWorkshop->mainWindow()->objectBrowser(); - mySelectedData = aObjBrowser->selectedData(); - - // Set current document - if (mySelectedData.size() > 0) { - FeaturePtr aFeature = mySelectedData.first(); - - std::shared_ptr aMgr = ModelAPI_PluginManager::get(); - std::shared_ptr aDocRef = aFeature->data()->docRef("PartDocument"); - if (aDocRef) - aMgr->setCurrentDocument(aDocRef->value()); + QList aSelectedPrs = + myWorkshop->selector()->selection()->getSelected(ModuleBase_ISelection::Browser); + + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + aDisplayer->setSelected(aSelectedPrs); + emit selectionChanged(); +} + +//************************************************************** +void XGUI_SelectionMgr::onViewerSelection() +{ + QObjectPtrList aFeatures; + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + if (!aContext.IsNull()) { + QList aPresentations = selection()->getSelected(ModuleBase_ISelection::Viewer); + foreach(ModuleBase_ViewerPrs aPrs, aPresentations) { + if (aPrs.object().get()) + aFeatures.append(aPrs.object()); + } } + bool aBlocked = myWorkshop->objectBrowser()->blockSignals(true); + myWorkshop->objectBrowser()->setObjectsSelected(aFeatures); + myWorkshop->objectBrowser()->blockSignals(aBlocked); emit selectionChanged(); -} \ No newline at end of file +} + +//************************************************************** +void XGUI_SelectionMgr::updateSelectionBy(const ModuleBase_ISelection::SelectionPlace& thePlace) +{ + QList aSelectedPrs = + myWorkshop->selector()->selection()->getSelected(thePlace); + if (thePlace == ModuleBase_ISelection::Browser) { + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + aDisplayer->setSelected(aSelectedPrs); + } + +} +//************************************************************** +void XGUI_SelectionMgr::clearSelection() +{ + QObjectPtrList aFeatures; + bool aBlocked = myWorkshop->objectBrowser()->blockSignals(true); + myWorkshop->objectBrowser()->setObjectsSelected(aFeatures); + myWorkshop->objectBrowser()->blockSignals(aBlocked); + + QList aSelectedPrs = + myWorkshop->selector()->selection()->getSelected(ModuleBase_ISelection::Browser); + + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + aDisplayer->setSelected(aSelectedPrs); + + emit selectionChanged(); +}