From 9aeb949b06a42f70817d452b350d8148671e81ba Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 15 Sep 2015 09:47:59 +0200 Subject: [PATCH] (#449) Added toggle on dependent views and removed toggle from master --- .../Commands/RicLinkVisibleViewsFeature.cpp | 11 +- .../ProjectDataModel/RimViewLink.cpp | 65 +++---- .../ProjectDataModel/RimViewLink.h | 8 +- .../ProjectDataModel/RimViewLinker.cpp | 169 +++++++++--------- .../ProjectDataModel/RimViewLinker.h | 11 +- .../RimViewLinkerCollection.cpp | 7 +- 6 files changed, 140 insertions(+), 131 deletions(-) diff --git a/ApplicationCode/Commands/RicLinkVisibleViewsFeature.cpp b/ApplicationCode/Commands/RicLinkVisibleViewsFeature.cpp index 7e83e46fb8..4419a323ad 100644 --- a/ApplicationCode/Commands/RicLinkVisibleViewsFeature.cpp +++ b/ApplicationCode/Commands/RicLinkVisibleViewsFeature.cpp @@ -87,13 +87,14 @@ void RicLinkVisibleViewsFeature::onActionTriggered(bool isChecked) RimView* rimView = views[i]; if (rimView == masterView) continue; - RimViewLink* viewConfig = new RimViewLink; - viewConfig->setManagedView(rimView); + RimViewLink* viewLink = new RimViewLink; + viewLink->setManagedView(rimView); - linkedViews->viewLinks.push_back(viewConfig); + linkedViews->viewLinks.push_back(viewLink); - viewConfig->initAfterReadRecursively(); - viewConfig->updateOptionSensitivity(); + viewLink->initAfterReadRecursively(); + viewLink->updateOptionSensitivity(); + viewLink->updateUiIcon(); } proj->viewLinkerCollection()->viewLinkers().push_back(linkedViews); diff --git a/ApplicationCode/ProjectDataModel/RimViewLink.cpp b/ApplicationCode/ProjectDataModel/RimViewLink.cpp index c6dfac4009..d80b969504 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLink.cpp +++ b/ApplicationCode/ProjectDataModel/RimViewLink.cpp @@ -42,7 +42,10 @@ CAF_PDM_SOURCE_INIT(RimViewLink, "RimViewLink"); //-------------------------------------------------------------------------------------------------- RimViewLink::RimViewLink(void) { - CAF_PDM_InitObject("View Config", ":/ReservoirView.png", "", ""); + CAF_PDM_InitObject("View Config", "", "", ""); + + CAF_PDM_InitField(&isActive, "Active", true, "Active", "", "", ""); + isActive.uiCapability()->setUiHidden(true); QString defaultName = "View Config: Empty view"; CAF_PDM_InitField(&name, "Name", defaultName, "Managed View Name", "", "", ""); @@ -133,7 +136,12 @@ void RimViewLink::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, Q //-------------------------------------------------------------------------------------------------- void RimViewLink::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { - if (changedField == &syncCamera && syncCamera()) + if (changedField == &isActive) + { + updateUiIcon(); + configureOverrides(); + } + else if (changedField == &syncCamera && syncCamera()) { RimViewLinker* linkedViews = NULL; this->firstAnchestorOrThisOfType(linkedViews); @@ -214,6 +222,7 @@ void RimViewLink::fieldChangedByUi(const caf::PdmFieldHandle* changedField, cons updateOptionSensitivity(); updateDisplayNameAndIcon(); + updateUiIcon(); name.uiCapability()->updateConnectedEditors(); } @@ -231,6 +240,7 @@ void RimViewLink::initAfterRead() { configureOverrides(); updateDisplayNameAndIcon(); + updateUiIcon(); updateOptionSensitivity(); } @@ -301,7 +311,13 @@ void RimViewLink::configureOverrides() RimEclipseView* manEclView = managedEclipseView(); RimGeoMechView* manGeoView = managedGeoView(); - if (syncVisibleCells) + if (!isActive) + { + m_managedView->setOverrideRangeFilterCollection(NULL); + if (manEclView) manEclView->setOverridePropertyFilterCollection(NULL); + if (manGeoView) manGeoView->setOverridePropertyFilterCollection(NULL); + } + else if (syncVisibleCells) { m_managedView->setOverrideRangeFilterCollection(NULL); if (manEclView) manEclView->setOverridePropertyFilterCollection(NULL); @@ -403,32 +419,6 @@ void RimViewLink::updateOptionSensitivity() } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimViewLink::updateDisplayNameAndIcon() -{ - if (m_managedView) - { - name = RimViewLinker::displayNameForView(m_managedView); - } - else - { - name = "View Config: Empty view"; - } - - QIcon icon; - if (m_managedView) - { - RimCase* rimCase = NULL; - m_managedView->firstAnchestorOrThisOfType(rimCase); - - icon = rimCase->uiCapability()->uiIcon(); - } - - this->setUiIcon(icon); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -469,7 +459,6 @@ void RimViewLink::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiO //-------------------------------------------------------------------------------------------------- void RimViewLink::removeOverrides() { - if (m_managedView) { RimEclipseView* manEclView = managedEclipseView(); @@ -480,3 +469,19 @@ void RimViewLink::removeOverrides() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimViewLink::updateUiIcon() +{ + RimViewLinker::applyIconEnabledState(this, m_originalIcon, !isActive()); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimViewLink::updateDisplayNameAndIcon() +{ + RimViewLinker::findNameAndIconFromView(&name.v(), &m_originalIcon, managedView()); +} + diff --git a/ApplicationCode/ProjectDataModel/RimViewLink.h b/ApplicationCode/ProjectDataModel/RimViewLink.h index fc7c2cc8c4..cb7c465253 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLink.h +++ b/ApplicationCode/ProjectDataModel/RimViewLink.h @@ -39,6 +39,7 @@ public: RimViewLink(void); virtual ~RimViewLink(void); + caf::PdmField isActive; caf::PdmField name; RimView* managedView(); @@ -58,6 +59,10 @@ public: void updateOptionSensitivity(); void removeOverrides(); + void updateUiIcon(); + void updateDisplayNameAndIcon(); + + protected: virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue); virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly); @@ -65,14 +70,15 @@ protected: virtual void initAfterRead(); virtual caf::PdmFieldHandle* userDescriptionField() { return &name; } virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering); + virtual caf::PdmFieldHandle* objectToggleField() { return &isActive; } private: void configureOverridesUpdateDisplayModel(); - void updateDisplayNameAndIcon(); RimEclipseView* managedEclipseView(); RimGeoMechView* managedGeoView(); caf::PdmPtrField m_managedView; + QIcon m_originalIcon; }; diff --git a/ApplicationCode/ProjectDataModel/RimViewLinker.cpp b/ApplicationCode/ProjectDataModel/RimViewLinker.cpp index 934821b02f..cd855fb07a 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLinker.cpp +++ b/ApplicationCode/ProjectDataModel/RimViewLinker.cpp @@ -51,10 +51,7 @@ CAF_PDM_SOURCE_INIT(RimViewLinker, "RimViewLinker"); //-------------------------------------------------------------------------------------------------- RimViewLinker::RimViewLinker(void) { - CAF_PDM_InitObject("Linked Views", ":/Reservoir1View.png", "", ""); - - CAF_PDM_InitField(&m_isActive, "Active", true, "Active", "", "", ""); - m_isActive.uiCapability()->setUiHidden(true); + CAF_PDM_InitObject("Linked Views", "", "", ""); CAF_PDM_InitField(&m_name, "Name", QString("View Group Name"), "View Group Name", "", "", ""); m_name.uiCapability()->setUiHidden(true); @@ -65,6 +62,7 @@ RimViewLinker::RimViewLinker(void) CAF_PDM_InitFieldNoDefault(&viewLinks, "ManagedViews", "Managed Views", "", "", ""); viewLinks.uiCapability()->setUiHidden(true); + viewLinks.uiCapability()->setUiChildrenHidden(true); } //-------------------------------------------------------------------------------------------------- @@ -96,13 +94,15 @@ void RimViewLinker::updateTimeStep(RimView* sourceView, int timeStep) for (size_t i = 0; i < viewLinks.size(); i++) { - RimViewLink* managedViewConfig = viewLinks[i]; - if (managedViewConfig->managedView() && managedViewConfig->managedView() != sourceView) + RimViewLink* viewLink = viewLinks[i]; + if (!viewLink->isActive) continue; + + if (viewLink->managedView() && viewLink->managedView() != sourceView) { - if (managedViewConfig->syncTimeStep() && managedViewConfig->managedView()->viewer()) + if (viewLink->syncTimeStep() && viewLink->managedView()->viewer()) { - managedViewConfig->managedView()->viewer()->setCurrentFrame(timeStep); - managedViewConfig->managedView()->viewer()->animationControl()->setCurrentFrameOnly(timeStep); + viewLink->managedView()->viewer()->setCurrentFrame(timeStep); + viewLink->managedView()->viewer()->animationControl()->setCurrentFrameOnly(timeStep); } } } @@ -123,12 +123,14 @@ void RimViewLinker::updateCellResult() for (size_t i = 0; i < viewLinks.size(); i++) { - RimViewLink* managedViewConfig = viewLinks[i]; - if (managedViewConfig->managedView()) + RimViewLink* viewLink = viewLinks[i]; + if (!viewLink->isActive) continue; + + if (viewLink->managedView()) { - if (managedViewConfig->syncCellResult()) + if (viewLink->syncCellResult()) { - RimView* rimView = managedViewConfig->managedView(); + RimView* rimView = viewLink->managedView(); RimEclipseView* eclipeView = dynamic_cast(rimView); if (eclipeView) { @@ -148,12 +150,14 @@ void RimViewLinker::updateCellResult() for (size_t i = 0; i < viewLinks.size(); i++) { - RimViewLink* managedViewConfig = viewLinks[i]; - if (managedViewConfig->managedView()) + RimViewLink* viewLink = viewLinks[i]; + if (!viewLink->isActive) continue; + + if (viewLink->managedView()) { - if (managedViewConfig->syncCellResult()) + if (viewLink->syncCellResult()) { - RimView* rimView = managedViewConfig->managedView(); + RimView* rimView = viewLink->managedView(); RimGeoMechView* geoView = dynamic_cast(rimView); if (geoView) { @@ -256,8 +260,15 @@ void RimViewLinker::configureOverrides() { for (size_t i = 0; i < viewLinks.size(); i++) { - RimViewLink* managedViewConfig = viewLinks[i]; - managedViewConfig->configureOverrides(); + RimViewLink* viewLink = viewLinks[i]; + if (viewLink->isActive) + { + viewLink->configureOverrides(); + } + else + { + viewLink->removeOverrides(); + } } } @@ -275,7 +286,7 @@ void RimViewLinker::allViewsForCameraSync(RimView* source, std::vector for (size_t i = 0; i < viewLinks.size(); i++) { - if (viewLinks[i]->syncCamera && viewLinks[i]->managedView() && source != viewLinks[i]->managedView()) + if (viewLinks[i]->isActive() && viewLinks[i]->syncCamera && viewLinks[i]->managedView() && source != viewLinks[i]->managedView()) { views.push_back(viewLinks[i]->managedView()); } @@ -314,23 +325,6 @@ QString RimViewLinker::displayNameForView(RimView* view) return displayName; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimViewLinker::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= ""*/) -{ - for (size_t cIdx = 0; cIdx < viewLinks.size(); ++cIdx) - { - PdmObjectHandle* childObject = viewLinks[cIdx]; - if (childObject) - { - uiTreeOrdering.add(childObject); - } - } - - uiTreeOrdering.setForgetRemainingFields(true); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -410,47 +404,33 @@ bool RimViewLinker::isActive() RimViewLinkerCollection* viewLinkerCollection = NULL; this->firstAnchestorOrThisOfType(viewLinkerCollection); - if (!viewLinkerCollection->isActive()) return false; - - return m_isActive; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimViewLinker::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) -{ - if (&m_isActive == changedField) - { - if (m_isActive) - { - this->applyAllOperations(); - } - else - { - this->removeOverrides(); - } - } - - updateUiIcon(); + return viewLinkerCollection->isActive(); } //-------------------------------------------------------------------------------------------------- /// Hande icon update locally as PdmUiItem::updateUiIconFromState works only for static icons //-------------------------------------------------------------------------------------------------- -void RimViewLinker::updateUiIcon() +void RimViewLinker::applyIconEnabledState(caf::PdmObject* obj, const QIcon& icon, bool disable) { QPixmap icPixmap; - icPixmap = m_originalIcon.pixmap(16, 16, QIcon::Normal); + icPixmap = icon.pixmap(16, 16, QIcon::Normal); - if (!m_isActive) + if (disable) { QIcon temp(icPixmap); icPixmap = temp.pixmap(16, 16, QIcon::Disabled); } QIcon newIcon(icPixmap); - this->setUiIcon(newIcon); + obj->setUiIcon(newIcon); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimViewLinker::updateUiIcon() +{ + RimViewLinker::applyIconEnabledState(this, m_originalIcon, false); } //-------------------------------------------------------------------------------------------------- @@ -458,29 +438,7 @@ void RimViewLinker::updateUiIcon() //-------------------------------------------------------------------------------------------------- void RimViewLinker::setNameAndIcon() { - m_name = displayNameForView(m_mainView); - - QIcon icon; - if (m_mainView) - { - RimCase* rimCase = NULL; - m_mainView->firstAnchestorOrThisOfType(rimCase); - - if (dynamic_cast(rimCase)) - { - icon = QIcon(":/GeoMechCase48x48.png"); - } - else if (dynamic_cast(rimCase)) - { - icon = QIcon(":/Case48x48.png"); - } - else if (dynamic_cast(rimCase)) - { - icon = QIcon(":/EclipseInput48x48.png"); - } - } - - m_originalIcon = icon; + RimViewLinker::findNameAndIconFromView(&m_name.v(), &m_originalIcon, m_mainView); } //-------------------------------------------------------------------------------------------------- @@ -490,6 +448,8 @@ void RimViewLinker::scheduleGeometryRegenForDepViews(RivCellSetEnum geometryType { for (size_t i = 0; i < viewLinks.size(); i++) { + if (!viewLinks[i]->isActive) continue; + if ( viewLinks[i]->syncVisibleCells() || viewLinks[i]->syncPropertyFilters() || viewLinks[i]->syncRangeFilters() @@ -514,6 +474,8 @@ void RimViewLinker::scheduleCreateDisplayModelAndRedrawForDependentViews() { for (size_t i = 0; i < viewLinks.size(); i++) { + if (!viewLinks[i]->isActive) continue; + if (viewLinks[i]->syncVisibleCells() || viewLinks[i]->syncPropertyFilters() || viewLinks[i]->syncRangeFilters() @@ -541,3 +503,36 @@ void RimViewLinker::removeOverrides() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimViewLinker::findNameAndIconFromView(QString* name, QIcon* icon, RimView* view) +{ + CVF_ASSERT(name && icon); + + *name = displayNameForView(view); + + if (view) + { + RimCase* rimCase = NULL; + view->firstAnchestorOrThisOfType(rimCase); + + if (dynamic_cast(rimCase)) + { + *icon = QIcon(":/GeoMechCase48x48.png"); + } + else if (dynamic_cast(rimCase)) + { + *icon = QIcon(":/Case48x48.png"); + } + else if (dynamic_cast(rimCase)) + { + *icon = QIcon(":/EclipseInput48x48.png"); + } + } + else + { + *icon = QIcon(); + } +} + diff --git a/ApplicationCode/ProjectDataModel/RimViewLinker.h b/ApplicationCode/ProjectDataModel/RimViewLinker.h index a48a2e59be..e7bb767f69 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLinker.h +++ b/ApplicationCode/ProjectDataModel/RimViewLinker.h @@ -67,6 +67,10 @@ public: void allViews(std::vector& views); void updateUiIcon(); + void setNameAndIcon(); + + static void applyIconEnabledState(caf::PdmObject* obj, const QIcon& icon, bool disable); + static void findNameAndIconFromView(QString* name, QIcon* icon, RimView* view); public: static QString displayNameForView(RimView* view); @@ -74,19 +78,12 @@ public: protected: virtual caf::PdmFieldHandle* userDescriptionField() { return &m_name; } - virtual caf::PdmFieldHandle* objectToggleField() { return &m_isActive; } - virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = ""); virtual void initAfterRead(); - void setNameAndIcon(); - - virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue); - private: bool isActive(); private: - caf::PdmField m_isActive; caf::PdmPtrField m_mainView; caf::PdmField m_name; QIcon m_originalIcon; diff --git a/ApplicationCode/ProjectDataModel/RimViewLinkerCollection.cpp b/ApplicationCode/ProjectDataModel/RimViewLinkerCollection.cpp index 50b88b5ac9..3cf99ce30f 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLinkerCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimViewLinkerCollection.cpp @@ -20,6 +20,7 @@ #include "RimViewLinkerCollection.h" #include "RimViewLinker.h" +#include "RimViewLink.h" #include "cafPdmUiTreeOrdering.h" @@ -56,10 +57,14 @@ void RimViewLinkerCollection::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTre { for (size_t cIdx = 0; cIdx < viewLinkers.size(); ++cIdx) { - PdmObjectHandle* childObject = viewLinkers[cIdx]; + RimViewLinker* childObject = viewLinkers[cIdx]; if (childObject) { uiTreeOrdering.add(childObject); + for (size_t j = 0; j < childObject->viewLinks.size(); j++) + { + uiTreeOrdering.add(childObject->viewLinks()[j]); + } } }