From bdcc7c53f7194d0c984d9df9d4bfdee377fa77e8 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 17 Jun 2019 09:03:22 +0200 Subject: [PATCH] #4490 Command Features : Use app state for toggle features --- .../RicToggleItemsFeatureImpl.cpp | 55 +++++++++++++++---- .../RicToggleItemsFeatureImpl.h | 2 + 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp b/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp index f6fe0062b9..b378f2a7cb 100644 --- a/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp +++ b/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp @@ -19,9 +19,10 @@ #include "RicToggleItemsFeatureImpl.h" +#include "RiaFeatureCommandContext.h" +#include "RiaGuiApplication.h" #include "RiuMainWindow.h" #include "RiuPlotMainWindow.h" -#include "RiaGuiApplication.h" #include "cafPdmUiFieldHandle.h" #include "cafPdmUiItem.h" @@ -153,22 +154,54 @@ void RicToggleItemsFeatureImpl::setObjectToggleStateForSelection(SelectionToggle } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmUiTreeView* RicToggleItemsFeatureImpl::findTreeView(const caf::PdmUiItem* uiItem) +{ + { + RiaFeatureCommandContext* context = RiaFeatureCommandContext::instance(); + + caf::PdmUiTreeView* customActiveTreeView = dynamic_cast(context->object()); + if (customActiveTreeView) + { + return customActiveTreeView; + } + } + + { + QModelIndex modIndex = RiuMainWindow::instance()->projectTreeView()->findModelIndex(uiItem); + if (modIndex.isValid()) + { + return RiuMainWindow::instance()->projectTreeView(); + } + } + + RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow(); + if (mainPlotWindow) + { + QModelIndex modIndex = mainPlotWindow->projectTreeView()->findModelIndex(uiItem); + if (modIndex.isValid()) + { + return mainPlotWindow->projectTreeView(); + } + } + + return nullptr; +} + //-------------------------------------------------------------------------------------------------- /// Finds the tree item in either the 3D main window or plot main window project tree view //-------------------------------------------------------------------------------------------------- caf::PdmUiTreeOrdering* RicToggleItemsFeatureImpl::findTreeItemFromSelectedUiItem(const caf::PdmUiItem* uiItem) { - QModelIndex modIndex = RiuMainWindow::instance()->projectTreeView()->findModelIndex(uiItem); - if(!modIndex.isValid()) + caf::PdmUiTreeView* pdmUiTreeView = findTreeView(uiItem); + + if (pdmUiTreeView) { - RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow(); - if(mainPlotWindow) - { - modIndex = mainPlotWindow->projectTreeView()->findModelIndex(uiItem); - } + QModelIndex modIndex = pdmUiTreeView->findModelIndex(uiItem); + return static_cast(modIndex.internalPointer()); } - caf::PdmUiTreeOrdering* treeItem = static_cast(modIndex.internalPointer()); - - return treeItem; + return nullptr; } diff --git a/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.h b/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.h index 9190368529..0f99b47b8a 100644 --- a/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.h +++ b/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.h @@ -23,6 +23,7 @@ namespace caf { class PdmUiItem; class PdmUiTreeOrdering; + class PdmUiTreeView; }; //================================================================================================== @@ -45,6 +46,7 @@ public: static void setObjectToggleStateForSelection(SelectionToggleType state); private: + static caf::PdmUiTreeView* findTreeView(const caf::PdmUiItem* uiItem); static caf::PdmUiTreeOrdering* findTreeItemFromSelectedUiItem(const caf::PdmUiItem* uiItem); };