From 7b2ec05383d9ca538f38df0cee26c109a2c39af7 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 25 Apr 2013 10:48:44 +0200 Subject: [PATCH] Added toggle option for range filter collection p4#: 21428 --- .../RimCellRangeFilterCollection.cpp | 44 +++++++++++++++++-- .../RimCellRangeFilterCollection.h | 13 ++++-- .../ProjectDataModel/RimReservoirView.cpp | 2 +- .../ProjectDataModel/RimUiTreeView.cpp | 16 ++++++- 4 files changed, 65 insertions(+), 10 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp b/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp index bc97e6eb0e..4ef3fe003f 100644 --- a/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp @@ -34,7 +34,9 @@ RimCellRangeFilterCollection::RimCellRangeFilterCollection() { CAF_PDM_InitObject("Cell Range Filters", ":/CellFilter_Range.png", "", ""); - CAF_PDM_InitFieldNoDefault(&rangeFilters, "RangeFilters", "Range Filters", "", "", ""); + CAF_PDM_InitFieldNoDefault(&rangeFilters, "RangeFilters", "Range Filters", "", "", ""); + CAF_PDM_InitField(&active, "Active", true, "Active", "", "", ""); + active.setUiHidden(true); } //-------------------------------------------------------------------------------------------------- @@ -135,12 +137,14 @@ RigActiveCellInfo* RimCellRangeFilterCollection::activeCellInfo() const //-------------------------------------------------------------------------------------------------- void RimCellRangeFilterCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { - // cvf::Trace::show("RimCellRangeFilterCollection::fieldChangedByUi"); + updateIconState(); + + CVF_ASSERT(m_reservoirView); m_reservoirView->scheduleGeometryRegen(RivReservoirViewPartMgr::RANGE_FILTERED); m_reservoirView->scheduleGeometryRegen(RivReservoirViewPartMgr::RANGE_FILTERED_INACTIVE); - if (m_reservoirView) m_reservoirView->createDisplayModelAndRedraw(); + m_reservoirView->createDisplayModelAndRedraw(); } @@ -196,6 +200,8 @@ void RimCellRangeFilterCollection::remove(RimCellRangeFilter* rangeFilter) //-------------------------------------------------------------------------------------------------- bool RimCellRangeFilterCollection::hasActiveFilters() const { + if (!active) return false; + std::list< caf::PdmPointer< RimCellRangeFilter > >::const_iterator it; for (it = rangeFilters.v().begin(); it != rangeFilters.v().end(); ++it) { @@ -205,3 +211,35 @@ bool RimCellRangeFilterCollection::hasActiveFilters() const return false; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmFieldHandle* RimCellRangeFilterCollection::objectToggleField() +{ + return &active; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimCellRangeFilterCollection::updateIconState() +{ + // Reset dynamic icon + this->setUiIcon(QIcon()); + // Get static one + QIcon icon = this->uiIcon(); + + // Get a pixmap, and modify it + + QPixmap icPixmap; + icPixmap = icon.pixmap(16, 16, QIcon::Normal); + + if (!active) + { + QIcon temp(icPixmap); + icPixmap = temp.pixmap(16, 16, QIcon::Disabled); + } + + QIcon newIcon(icPixmap); + this->setUiIcon(newIcon); +} diff --git a/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.h b/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.h index 54259ac2fd..9d8c7f1c8c 100644 --- a/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.h +++ b/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.h @@ -35,27 +35,32 @@ public: virtual ~RimCellRangeFilterCollection(); // Fields + caf::PdmField active; caf::PdmField< std::list< caf::PdmPointer< RimCellRangeFilter > > > rangeFilters; // Methods RimCellRangeFilter* createAndAppendRangeFilter(); - void remove(RimCellRangeFilter* rangeFilter); + void remove(RimCellRangeFilter* rangeFilter); - void compoundCellRangeFilter(cvf::CellRangeFilter* cellRangeFilter, const RigGridBase* grid) const; - bool hasActiveFilters() const; + void compoundCellRangeFilter(cvf::CellRangeFilter* cellRangeFilter, const RigGridBase* grid) const; + bool hasActiveFilters() const; void setReservoirView(RimReservoirView* reservoirView); RimReservoirView* reservoirView(); RigMainGrid* mainGrid() const; RigActiveCellInfo* activeCellInfo() const; + void updateIconState(); + // Overridden methods - virtual void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ); + virtual void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ); + virtual caf::PdmFieldHandle* objectToggleField(); protected: // Overridden methods virtual void initAfterRead(); + private: RimReservoirView* m_reservoirView; }; diff --git a/ApplicationCode/ProjectDataModel/RimReservoirView.cpp b/ApplicationCode/ProjectDataModel/RimReservoirView.cpp index b70f8756fd..c7ecc4c863 100644 --- a/ApplicationCode/ProjectDataModel/RimReservoirView.cpp +++ b/ApplicationCode/ProjectDataModel/RimReservoirView.cpp @@ -116,7 +116,7 @@ RimReservoirView::RimReservoirView() CAF_PDM_InitFieldNoDefault(&wellCollection, "WellCollection","Wells", "", "", ""); wellCollection = new RimWellCollection; - CAF_PDM_InitFieldNoDefault(&rangeFilterCollection, "RangeFilters", "Range Filters", ":/CellFilter_Range.png", "", ""); + CAF_PDM_InitFieldNoDefault(&rangeFilterCollection, "RangeFilters", "Range Filters", "", "", ""); rangeFilterCollection = new RimCellRangeFilterCollection(); rangeFilterCollection->setReservoirView(this); diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp b/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp index edf8da282c..159289ccb1 100644 --- a/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp +++ b/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp @@ -1178,13 +1178,13 @@ bool RimUiTreeView::checkAndHandleToggleOfMultipleSelection() } RimUiTreeModelPdm* myModel = dynamic_cast(model()); - myModel->setObjectToggleStateForSelection(selectedIndexes, state); - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(curr); RimWell* well = dynamic_cast(uiItem->dataObject().p()); if (well) { + myModel->setObjectToggleStateForSelection(selectedIndexes, state); + RimReservoirView* reservoirView = NULL; well->firstAncestorOfType(reservoirView); if (reservoirView) @@ -1192,6 +1192,18 @@ bool RimUiTreeView::checkAndHandleToggleOfMultipleSelection() reservoirView->createDisplayModelAndRedraw(); } } + else + { + foreach (QModelIndex index, selectedIndexes) + { + if (!index.isValid()) + { + continue; + } + + myModel->setData(index, state, Qt::CheckStateRole); + } + } return true; }