(#483) Improved how filters and filter collections are grayed out

This commit is contained in:
Magne Sjaastad 2015-11-02 09:30:04 +01:00
parent 9eb5c73842
commit 73489780bf
14 changed files with 257 additions and 44 deletions

View File

@ -103,8 +103,6 @@ void RimCellFilter::updateIconState()
QIcon newIcon(icPixmap);
this->setUiIcon(newIcon);
this->uiCapability()->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------

View File

@ -109,6 +109,14 @@ void RimCellRangeFilter::computeAndSetValidValues()
this->updateIconState();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimCellRangeFilter::updateActiveState()
{
isActive.uiCapability()->setUiReadOnly(isRangeFilterControlled());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -226,21 +234,13 @@ void RimCellRangeFilter::defineEditorAttribute(const caf::PdmFieldHandle* field,
//--------------------------------------------------------------------------------------------------
void RimCellRangeFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
RimView* rimView = NULL;
firstAnchestorOrThisOfType(rimView);
CVF_ASSERT(rimView);
bool isRangeFilterControlled = false;
if (rimView->viewController() && rimView->viewController()->isRangeFiltersControlled())
{
isRangeFilterControlled = true;
}
bool readOnlyState = isRangeFilterControlled();
std::vector<caf::PdmFieldHandle*> objFields;
this->fields(objFields);
for (size_t i = 0; i < objFields.size(); i ++)
{
objFields[i]->uiCapability()->setUiReadOnly(isRangeFilterControlled);
objFields[i]->uiCapability()->setUiReadOnly(readOnlyState);
}
}
@ -251,17 +251,8 @@ void RimCellRangeFilter::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrde
{
RimCellFilter::defineUiTreeOrdering(uiTreeOrdering, uiConfigName);
RimView* rimView = NULL;
firstAnchestorOrThisOfType(rimView);
CVF_ASSERT(rimView);
bool isRangeFilterControlled = false;
if (rimView->viewController() && rimView->viewController()->isRangeFiltersControlled())
{
isRangeFilterControlled = true;
}
isActive.uiCapability()->setUiReadOnly(isRangeFilterControlled);
updateActiveState();
updateIconState();
}
//--------------------------------------------------------------------------------------------------
@ -295,6 +286,24 @@ QList<caf::PdmOptionItemInfo> RimCellRangeFilter::calculateValueOptions(const ca
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimCellRangeFilter::isRangeFilterControlled()
{
RimView* rimView = NULL;
firstAnchestorOrThisOfType(rimView);
CVF_ASSERT(rimView);
bool isRangeFilterControlled = false;
if (rimView->viewController() && rimView->viewController()->isRangeFiltersControlled())
{
isRangeFilterControlled = true;
}
return isRangeFilterControlled;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -59,6 +59,7 @@ public:
void computeAndSetValidValues();
void updateActiveState();
protected:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
@ -68,6 +69,9 @@ protected:
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly );
private:
bool isRangeFilterControlled();
private:
const cvf::StructGridInterface* selectedGrid();
};

View File

@ -139,6 +139,7 @@ RigActiveCellInfo* RimCellRangeFilterCollection::activeCellInfo() const
void RimCellRangeFilterCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
updateIconState();
uiCapability()->updateConnectedEditors();
updateDisplayModeNotifyManagedViews(NULL);
}
@ -331,12 +332,11 @@ void RimCellRangeFilterCollection::updateIconState()
updateUiIconFromState(activeIcon);
uiCapability()->updateConnectedEditors();
for (size_t i = 0; i < rangeFilters.size(); i++)
{
RimCellFilter* cellFilter = rangeFilters[i];
cellFilter->updateIconState();
RimCellRangeFilter* rangeFilter = rangeFilters[i];
rangeFilter->updateActiveState();
rangeFilter->updateIconState();
}
}
@ -356,5 +356,7 @@ void RimCellRangeFilterCollection::defineUiTreeOrdering(caf::PdmUiTreeOrdering&
{
isActive.uiCapability()->setUiReadOnly(false);
}
updateIconState();
}

View File

@ -26,6 +26,7 @@
#include "RimEclipseResultDefinition.h"
#include "RimEclipseView.h"
#include "RimReservoirCellResultsStorage.h"
#include "RimViewController.h"
#include "RiuMainWindow.h"
@ -104,6 +105,7 @@ void RimEclipsePropertyFilter::fieldChangedByUi(const caf::PdmFieldHandle* chang
{
updateFilterName();
this->updateIconState();
this->uiCapability()->updateConnectedEditors();
parentContainer()->updateDisplayModelNotifyManagedViews();
}
@ -152,6 +154,66 @@ void RimEclipsePropertyFilter::defineUiOrdering(QString uiConfigName, caf::PdmUi
uiOrdering.add(&lowerBound);
uiOrdering.add(&upperBound);
uiOrdering.add(&filterMode);
updateReadOnlyStateOfAllFields();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipsePropertyFilter::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName)
{
PdmObject::defineUiTreeOrdering(uiTreeOrdering, uiConfigName);
updateActiveState();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipsePropertyFilter::updateReadOnlyStateOfAllFields()
{
bool readOnlyState = isPropertyFilterControlled();
std::vector<caf::PdmFieldHandle*> objFields;
this->fields(objFields);
// Include fields declared in RimResultDefinition
objFields.push_back(&(resultDefinition->m_resultTypeUiField));
objFields.push_back(&(resultDefinition->m_porosityModelUiField));
objFields.push_back(&(resultDefinition->m_resultVariableUiField));
for (size_t i = 0; i < objFields.size(); i++)
{
objFields[i]->uiCapability()->setUiReadOnly(readOnlyState);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimEclipsePropertyFilter::isPropertyFilterControlled()
{
RimView* rimView = NULL;
firstAnchestorOrThisOfType(rimView);
CVF_ASSERT(rimView);
bool isPropertyFilterControlled = false;
RimViewController* vc = rimView->viewController();
if (vc && vc->isPropertyFilterOveridden())
{
isPropertyFilterControlled = true;
}
return isPropertyFilterControlled;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipsePropertyFilter::updateActiveState()
{
isActive.uiCapability()->setUiReadOnly(isPropertyFilterControlled());
}
//--------------------------------------------------------------------------------------------------

View File

@ -57,10 +57,18 @@ public:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
virtual void initAfterRead();
void updateActiveState();
protected:
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) ;
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering);
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName);
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);
private:
void updateReadOnlyStateOfAllFields();
bool isPropertyFilterControlled();
private:
double m_minimumResultValue;
double m_maximumResultValue;

View File

@ -70,6 +70,7 @@ RimEclipseView* RimEclipsePropertyFilterCollection::reservoirView()
void RimEclipsePropertyFilterCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
updateIconState();
uiCapability()->updateConnectedEditors();
updateDisplayModelNotifyManagedViews();
}
@ -170,5 +171,33 @@ void RimEclipsePropertyFilterCollection::updateIconState()
updateUiIconFromState(activeIcon);
uiCapability()->updateConnectedEditors();
for (size_t i = 0; i < propertyFilters.size(); i++)
{
RimEclipsePropertyFilter* cellFilter = propertyFilters[i];
cellFilter->updateActiveState();
cellFilter->updateIconState();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipsePropertyFilterCollection::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName)
{
PdmObject::defineUiTreeOrdering(uiTreeOrdering, uiConfigName);
RimView* rimView = NULL;
this->firstAnchestorOrThisOfType(rimView);
RimViewController* viewController = rimView->viewController();
if (viewController && (viewController->isPropertyFilterOveridden()
|| viewController->isVisibleCellsOveridden()))
{
isActive.uiCapability()->setUiReadOnly(true, uiConfigName);
}
else
{
isActive.uiCapability()->setUiReadOnly(false, uiConfigName);
}
updateIconState();
}

View File

@ -48,12 +48,10 @@ public:
void updateDisplayModelNotifyManagedViews();
void updateIconState();
// Overridden methods
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
virtual caf::PdmFieldHandle* objectToggleField();
protected:
// Overridden methods
virtual void initAfterRead();
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName);
virtual void initAfterRead();
virtual caf::PdmFieldHandle* objectToggleField();
};

View File

@ -1667,7 +1667,9 @@ void RimEclipseView::calculateCurrentTotalCellVisibility(cvf::UByteArray* totalV
void RimEclipseView::updateIconStateForFilterCollections()
{
m_rangeFilterCollection()->updateIconState();
m_rangeFilterCollection()->uiCapability()->updateConnectedEditors();
// NB - notice that it is the filter collection managed by this view that the icon update applies to
m_propertyFilterCollection()->updateIconState();
m_propertyFilterCollection()->uiCapability()->updateConnectedEditors();
}

View File

@ -18,18 +18,21 @@
/////////////////////////////////////////////////////////////////////////////////
#include "RimGeoMechPropertyFilter.h"
#include "RimGeoMechPropertyFilterCollection.h"
#include "RimGeoMechResultDefinition.h"
#include "cvfMath.h"
#include "cafPdmUiDoubleSliderEditor.h"
#include "cvfAssert.h"
#include "RigFemPartResultsCollection.h"
#include "RigGeoMechCaseData.h"
#include "RimGeoMechPropertyFilterCollection.h"
#include "RimGeoMechResultDefinition.h"
#include "RimGeoMechView.h"
#include "RimViewController.h"
#include "RiuMainWindow.h"
#include "cafPdmUiDoubleSliderEditor.h"
#include "cvfAssert.h"
#include "cvfMath.h"
CAF_PDM_SOURCE_INIT(RimGeoMechPropertyFilter, "GeoMechPropertyFilter");
@ -59,7 +62,6 @@ RimGeoMechPropertyFilter::RimGeoMechPropertyFilter()
m_minimumResultValue = cvf::UNDEFINED_DOUBLE;
m_maximumResultValue = cvf::UNDEFINED_DOUBLE;
}
//--------------------------------------------------------------------------------------------------
@ -81,6 +83,7 @@ void RimGeoMechPropertyFilter::fieldChangedByUi(const caf::PdmFieldHandle* chang
{
this->updateIconState();
this->updateFilterName();
this->uiCapability()->updateConnectedEditors();
parentContainer()->updateDisplayModelNotifyManagedViews();
}
@ -133,6 +136,65 @@ void RimGeoMechPropertyFilter::defineUiOrdering(QString uiConfigName, caf::PdmUi
uiOrdering.add(&lowerBound);
uiOrdering.add(&upperBound);
uiOrdering.add(&filterMode);
updateReadOnlyStateOfAllFields();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGeoMechPropertyFilter::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName)
{
PdmObject::defineUiTreeOrdering(uiTreeOrdering, uiConfigName);
updateActiveState();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGeoMechPropertyFilter::updateReadOnlyStateOfAllFields()
{
bool readOnlyState = isPropertyFilterControlled();
std::vector<caf::PdmFieldHandle*> objFields;
this->fields(objFields);
// Include fields declared in RimResultDefinition
objFields.push_back(&(resultDefinition->m_resultPositionTypeUiField));
objFields.push_back(&(resultDefinition->m_resultVariableUiField));
for (size_t i = 0; i < objFields.size(); i++)
{
objFields[i]->uiCapability()->setUiReadOnly(readOnlyState);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimGeoMechPropertyFilter::isPropertyFilterControlled()
{
RimView* rimView = NULL;
firstAnchestorOrThisOfType(rimView);
CVF_ASSERT(rimView);
bool isPropertyFilterControlled = false;
RimViewController* vc = rimView->viewController();
if (vc && vc->isPropertyFilterOveridden())
{
isPropertyFilterControlled = true;
}
return isPropertyFilterControlled;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGeoMechPropertyFilter::updateActiveState()
{
isActive.uiCapability()->setUiReadOnly(isPropertyFilterControlled());
}
//--------------------------------------------------------------------------------------------------

View File

@ -50,11 +50,18 @@ public:
void updateFilterName();
void computeResultValueRange();
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
void updateActiveState();
protected:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) ;
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName);
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);
private:
void updateReadOnlyStateOfAllFields();
bool isPropertyFilterControlled();
private:
RimGeoMechPropertyFilterCollection* m_parentContainer;
double m_minimumResultValue;

View File

@ -69,6 +69,7 @@ RimGeoMechView* RimGeoMechPropertyFilterCollection::reservoirView()
void RimGeoMechPropertyFilterCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
updateIconState();
uiCapability()->updateConnectedEditors();
updateDisplayModelNotifyManagedViews();
}
@ -172,5 +173,33 @@ void RimGeoMechPropertyFilterCollection::updateIconState()
updateUiIconFromState(activeIcon);
uiCapability()->updateConnectedEditors();
for (size_t i = 0; i < propertyFilters.size(); i++)
{
RimGeoMechPropertyFilter* propFilter = propertyFilters[i];
propFilter->updateActiveState();
propFilter->updateIconState();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGeoMechPropertyFilterCollection::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName)
{
PdmObject::defineUiTreeOrdering(uiTreeOrdering, uiConfigName);
RimView* rimView = NULL;
this->firstAnchestorOrThisOfType(rimView);
RimViewController* viewController = rimView->viewController();
if (viewController && (viewController->isPropertyFilterOveridden()
|| viewController->isVisibleCellsOveridden()))
{
isActive.uiCapability()->setUiReadOnly(true, uiConfigName);
}
else
{
isActive.uiCapability()->setUiReadOnly(false, uiConfigName);
}
updateIconState();
}

View File

@ -55,6 +55,7 @@ public:
protected:
// Overridden methods
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName);
virtual caf::PdmFieldHandle* objectToggleField();
virtual void initAfterRead();
};

View File

@ -575,9 +575,11 @@ void RimGeoMechView::calculateCurrentTotalCellVisibility(cvf::UByteArray* totalV
void RimGeoMechView::updateIconStateForFilterCollections()
{
m_rangeFilterCollection()->updateIconState();
m_rangeFilterCollection()->uiCapability()->updateConnectedEditors();
// NB - notice that it is the filter collection managed by this view that the icon update applies to
m_propertyFilterCollection()->updateIconState();
m_propertyFilterCollection()->uiCapability()->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------