Skip to content

Commit

Permalink
(#483) Improved how filters and filter collections are grayed out
Browse files Browse the repository at this point in the history
  • Loading branch information
magnesj committed Nov 2, 2015
1 parent 9eb5c73 commit 7348978
Show file tree
Hide file tree
Showing 14 changed files with 256 additions and 43 deletions.
2 changes: 0 additions & 2 deletions ApplicationCode/ProjectDataModel/RimCellFilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,6 @@ void RimCellFilter::updateIconState()

QIcon newIcon(icPixmap);
this->setUiIcon(newIcon);

this->uiCapability()->updateConnectedEditors();
}

//--------------------------------------------------------------------------------------------------
Expand Down
51 changes: 30 additions & 21 deletions ApplicationCode/ProjectDataModel/RimCellRangeFilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,14 @@ void RimCellRangeFilter::computeAndSetValidValues()
this->updateIconState();
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimCellRangeFilter::updateActiveState()
{
isActive.uiCapability()->setUiReadOnly(isRangeFilterControlled());
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -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);
}
}

Expand All @@ -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();
}

//--------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -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;
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Expand Down
4 changes: 4 additions & 0 deletions ApplicationCode/ProjectDataModel/RimCellRangeFilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class RimCellRangeFilter : public RimCellFilter

void computeAndSetValidValues();

void updateActiveState();

protected:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
Expand All @@ -68,6 +69,9 @@ class RimCellRangeFilter : public RimCellFilter

virtual QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly );

private:
bool isRangeFilterControlled();

private:
const cvf::StructGridInterface* selectedGrid();
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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();
}
}

Expand All @@ -356,5 +356,7 @@ void RimCellRangeFilterCollection::defineUiTreeOrdering(caf::PdmUiTreeOrdering&
{
isActive.uiCapability()->setUiReadOnly(false);
}

updateIconState();
}

62 changes: 62 additions & 0 deletions ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include "RimEclipseResultDefinition.h"
#include "RimEclipseView.h"
#include "RimReservoirCellResultsStorage.h"
#include "RimViewController.h"

#include "RiuMainWindow.h"

Expand Down Expand Up @@ -104,6 +105,7 @@ void RimEclipsePropertyFilter::fieldChangedByUi(const caf::PdmFieldHandle* chang
{
updateFilterName();
this->updateIconState();
this->uiCapability()->updateConnectedEditors();

parentContainer()->updateDisplayModelNotifyManagedViews();
}
Expand Down Expand Up @@ -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());
}

//--------------------------------------------------------------------------------------------------
Expand Down
10 changes: 9 additions & 1 deletion ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,18 @@ class RimEclipsePropertyFilter : public RimCellFilter
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ RimEclipseView* RimEclipsePropertyFilterCollection::reservoirView()
void RimEclipsePropertyFilterCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
updateIconState();
uiCapability()->updateConnectedEditors();

updateDisplayModelNotifyManagedViews();
}
Expand Down Expand Up @@ -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();
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,10 @@ class RimEclipsePropertyFilterCollection : public caf::PdmObject
void updateDisplayModelNotifyManagedViews();
void updateIconState();


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 void initAfterRead();
virtual caf::PdmFieldHandle* objectToggleField();

protected:
// Overridden methods
virtual void initAfterRead();
};
2 changes: 2 additions & 0 deletions ApplicationCode/ProjectDataModel/RimEclipseView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Loading

0 comments on commit 7348978

Please sign in to comment.