Statistics case User interface and behaviour working.

p4#: 21171
This commit is contained in:
Jacob Støren
2013-04-08 12:16:38 +02:00
parent c6f2b52216
commit 1c65fe7e2c
11 changed files with 160 additions and 93 deletions

View File

@@ -76,7 +76,7 @@ void RiaPreferences::defineEditorAttribute(const caf::PdmFieldHandle* field, QSt
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiaPreferences::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) const void RiaPreferences::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{ {
uiOrdering.add(&navigationPolicy); uiOrdering.add(&navigationPolicy);

View File

@@ -51,5 +51,5 @@ public: // Pdm Fields
protected: protected:
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute); virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) const; virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) ;
}; };

View File

@@ -90,6 +90,14 @@ const RigCaseData* RimCase::reservoirData() const
return m_rigEclipseCase.p(); return m_rigEclipseCase.p();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimCase::removeReservoirData()
{
this->setReservoirData(NULL);
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -110,17 +118,6 @@ void RimCase::initAfterRead()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimReservoirView* RimCase::createAndAddReservoirView() RimReservoirView* RimCase::createAndAddReservoirView()
{ {
// If parent is collection, and number of views is zero, make sure rig is set to NULL to initiate normal case loading
if (parentCaseCollection() != NULL && reservoirViews().size() == 0)
{
if (this->reservoirData())
{
CVF_ASSERT(this->reservoirData()->refCount() == 1);
}
this->setReservoirData( NULL );
}
RimReservoirView* riv = new RimReservoirView(); RimReservoirView* riv = new RimReservoirView();
riv->setEclipseCase(this); riv->setEclipseCase(this);
@@ -293,6 +290,23 @@ RimCaseCollection* RimCase::parentCaseCollection()
return NULL; return NULL;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimIdenticalGridCaseGroup* RimCase::parentGridCaseGroup()
{
RimCaseCollection* caseColl = parentCaseCollection();
if (caseColl)
{
return caseColl->parentCaseGroup();
}
else
{
return NULL;
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -327,4 +341,3 @@ RimReservoirCellResultsStorage* RimCase::results(RifReaderInterface::PorosityMod
return m_fractureModelResults(); return m_fractureModelResults();
} }

View File

@@ -31,6 +31,7 @@ class RigCaseData;
class RigGridBase; class RigGridBase;
class RimReservoirView; class RimReservoirView;
class RimCaseCollection; class RimCaseCollection;
class RimIdenticalGridCaseGroup;
//class RimReservoirCellResultsCacher; //class RimReservoirCellResultsCacher;
//================================================================================================== //==================================================================================================
@@ -54,6 +55,7 @@ public:
RigCaseData* reservoirData(); RigCaseData* reservoirData();
const RigCaseData* reservoirData() const; const RigCaseData* reservoirData() const;
void removeReservoirData();
RimReservoirCellResultsStorage* results(RifReaderInterface::PorosityModelResultType porosityModel); RimReservoirCellResultsStorage* results(RifReaderInterface::PorosityModelResultType porosityModel);
@@ -66,6 +68,7 @@ public:
virtual void updateFilePathsFromProjectPath(const QString& projectPath) { }; virtual void updateFilePathsFromProjectPath(const QString& projectPath) { };
RimCaseCollection* parentCaseCollection(); RimCaseCollection* parentCaseCollection();
RimIdenticalGridCaseGroup* parentGridCaseGroup();
// Overridden methods from PdmObject // Overridden methods from PdmObject

View File

@@ -163,7 +163,7 @@ void RimCellPropertyFilter::setDefaultValues()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimCellPropertyFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) const void RimCellPropertyFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{ {
// Fields declared in RimCellFilter // Fields declared in RimCellFilter
uiOrdering.add(&name); uiOrdering.add(&name);

View File

@@ -72,7 +72,7 @@ public:
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly ); virtual QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly );
protected: protected:
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) const; virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) ;
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute); virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);
private: private:

View File

@@ -73,7 +73,7 @@ RimStatisticsCase::RimStatisticsCase()
m_editingAllowed.setIOWritable(false); m_editingAllowed.setIOWritable(false);
m_editingAllowed.setIOReadable(false); m_editingAllowed.setIOReadable(false);
m_editingAllowed.setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName()); m_editingAllowed.setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName());
m_editingAllowed = "UNLOCK"; m_editingAllowed = false;
CAF_PDM_InitField(&m_selectionSummary, "SelectionSummary", QString(""), "Selected Properties", "", "", ""); CAF_PDM_InitField(&m_selectionSummary, "SelectionSummary", QString(""), "Selected Properties", "", "", "");
m_selectionSummary.setIOWritable(false); m_selectionSummary.setIOWritable(false);
@@ -113,10 +113,6 @@ RimStatisticsCase::RimStatisticsCase()
CAF_PDM_InitField(&m_lowPercentile, "LowPercentile", 10.0, "Low", "", "", ""); CAF_PDM_InitField(&m_lowPercentile, "LowPercentile", 10.0, "Low", "", "", "");
CAF_PDM_InitField(&m_midPercentile, "MidPercentile", 50.0, "Mid", "", "", ""); CAF_PDM_InitField(&m_midPercentile, "MidPercentile", 50.0, "Mid", "", "", "");
CAF_PDM_InitField(&m_highPercentile, "HighPercentile", 90.0, "High", "", "", ""); CAF_PDM_InitField(&m_highPercentile, "HighPercentile", 90.0, "High", "", "", "");
updateSelectionListVisibilities();
updateSelectionSummaryLabel();
updatePercentileUiVisibility();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -280,9 +276,8 @@ void RimStatisticsCase::computeStatistics()
reservoirView->createDisplayModelAndRedraw(); reservoirView->createDisplayModelAndRedraw();
} }
m_calculationStatus = CALCULATED;
m_calculationStatus.updateConnectedEditors(); this->updateConnectedEditors();
m_editingAllowed = "UNLOCK";
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -323,8 +318,14 @@ RimIdenticalGridCaseGroup* RimStatisticsCase::caseGroup()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimStatisticsCase::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) const void RimStatisticsCase::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{ {
updateSelectionSummaryLabel();
updateSelectionListVisibilities();
updatePercentileUiVisibility();
updateUnlockUiVisibility();
uiOrdering.add(&caseName); uiOrdering.add(&caseName);
uiOrdering.add(&m_calculationStatus); uiOrdering.add(&m_calculationStatus);
uiOrdering.add(&m_editingAllowed); uiOrdering.add(&m_editingAllowed);
@@ -343,6 +344,7 @@ void RimStatisticsCase::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderin
group->add(&m_selectedFractureInputProperties); group->add(&m_selectedFractureInputProperties);
group = uiOrdering.addNewGroup("Percentiles"); group = uiOrdering.addNewGroup("Percentiles");
group->setUiHidden(hasComputedStatistics());
group->add(&m_calculatePercentiles); group->add(&m_calculatePercentiles);
group->add(&m_percentileCalculationType); group->add(&m_percentileCalculationType);
group->add(&m_lowPercentile); group->add(&m_lowPercentile);
@@ -428,34 +430,13 @@ void RimStatisticsCase::fieldChangedByUi(const caf::PdmFieldHandle* changedField
{ {
if (&m_resultType == changedField || &m_porosityModel == changedField) if (&m_resultType == changedField || &m_porosityModel == changedField)
{ {
updateSelectionListVisibilities();
} }
if (&m_editingAllowed == changedField) if (&m_editingAllowed == changedField)
{ {
clearComputedStatistics(); clearComputedStatistics();
m_calculationStatus = NOT_CALCULATED; m_editingAllowed = false;
m_editingAllowed.setUiHidden(true);
} }
updateSelectionSummaryLabel();
updatePercentileUiVisibility();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStatisticsCase::updateSelectionListVisibilities()
{
m_selectedDynamicProperties.setUiHidden( !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::DYNAMIC_NATIVE));
m_selectedStaticProperties.setUiHidden( !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::STATIC_NATIVE));
m_selectedGeneratedProperties.setUiHidden( !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::GENERATED));
m_selectedInputProperties.setUiHidden( !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::INPUT_PROPERTY));
m_selectedFractureDynamicProperties.setUiHidden( !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::DYNAMIC_NATIVE));
m_selectedFractureStaticProperties.setUiHidden( !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::STATIC_NATIVE));
m_selectedFractureGeneratedProperties.setUiHidden( !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::GENERATED));
m_selectedFractureInputProperties.setUiHidden( !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::INPUT_PROPERTY));
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -521,6 +502,31 @@ void RimStatisticsCase::defineEditorAttribute(const caf::PdmFieldHandle* field,
textEditAttrib->textMode = caf::PdmUiTextEditorAttribute::HTML; textEditAttrib->textMode = caf::PdmUiTextEditorAttribute::HTML;
} }
if (&m_editingAllowed == field)
{
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*> (attribute);
attrib->m_buttonText = hasComputedStatistics() ? "UNLOCK": "Unlocked";
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStatisticsCase::updateSelectionListVisibilities()
{
bool isLocked = hasComputedStatistics();
m_resultType.setUiHidden(isLocked);
m_porosityModel.setUiHidden(isLocked ); // || !caseGroup()->mainCase()->reservoirData()->results(RifReaderInterface::FRACTURE_RESULTS)->resultCount()
m_selectedDynamicProperties.setUiHidden( isLocked || !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::DYNAMIC_NATIVE));
m_selectedStaticProperties.setUiHidden( isLocked || !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::STATIC_NATIVE));
m_selectedGeneratedProperties.setUiHidden( isLocked || !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::GENERATED));
m_selectedInputProperties.setUiHidden( isLocked || !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::INPUT_PROPERTY));
m_selectedFractureDynamicProperties.setUiHidden( isLocked || !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::DYNAMIC_NATIVE));
m_selectedFractureStaticProperties.setUiHidden( isLocked || !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::STATIC_NATIVE));
m_selectedFractureGeneratedProperties.setUiHidden( isLocked || !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::GENERATED));
m_selectedFractureInputProperties.setUiHidden( isLocked || !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::INPUT_PROPERTY));
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -528,19 +534,40 @@ void RimStatisticsCase::defineEditorAttribute(const caf::PdmFieldHandle* field,
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimStatisticsCase::updatePercentileUiVisibility() void RimStatisticsCase::updatePercentileUiVisibility()
{ {
m_percentileCalculationType.setUiHidden( !m_calculatePercentiles()); bool isLocked = hasComputedStatistics();
m_lowPercentile .setUiHidden( !m_calculatePercentiles()); m_calculatePercentiles.setUiHidden(isLocked);
m_midPercentile .setUiHidden( !m_calculatePercentiles()); m_percentileCalculationType.setUiHidden( isLocked || !m_calculatePercentiles());
m_highPercentile.setUiHidden( !m_calculatePercentiles()); m_lowPercentile .setUiHidden(isLocked || !m_calculatePercentiles());
m_midPercentile .setUiHidden(isLocked || !m_calculatePercentiles());
m_highPercentile.setUiHidden(isLocked || !m_calculatePercentiles());
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RimStatisticsCase::hasComputedStatistics() void RimStatisticsCase::updateUnlockUiVisibility()
{ {
if ( reservoirData()->results(RifReaderInterface::MATRIX_RESULTS)->resultCount() bool isLocked = hasComputedStatistics();
|| reservoirData()->results(RifReaderInterface::FRACTURE_RESULTS)->resultCount()) if (isLocked)
{
m_calculationStatus = CALCULATED;
}
else
{
m_calculationStatus = NOT_CALCULATED;
}
m_editingAllowed.setUiHidden(!isLocked );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimStatisticsCase::hasComputedStatistics() const
{
if ( reservoirData()
&& ( reservoirData()->results(RifReaderInterface::MATRIX_RESULTS)->resultCount()
|| reservoirData()->results(RifReaderInterface::FRACTURE_RESULTS)->resultCount()))
{ {
return true; return true;
} }
@@ -557,5 +584,6 @@ void RimStatisticsCase::clearComputedStatistics()
{ {
reservoirData()->results(RifReaderInterface::MATRIX_RESULTS)->clearAllResults(); reservoirData()->results(RifReaderInterface::MATRIX_RESULTS)->clearAllResults();
reservoirData()->results(RifReaderInterface::FRACTURE_RESULTS)->clearAllResults(); reservoirData()->results(RifReaderInterface::FRACTURE_RESULTS)->clearAllResults();
}
this->updateConnectedEditors();
}

View File

@@ -47,7 +47,7 @@ public:
void setMainGrid(RigMainGrid* mainGrid); void setMainGrid(RigMainGrid* mainGrid);
void computeStatistics(); void computeStatistics();
bool hasComputedStatistics(); bool hasComputedStatistics() const;
void clearComputedStatistics(); void clearComputedStatistics();
virtual bool openEclipseGridFile(); virtual bool openEclipseGridFile();
@@ -74,9 +74,10 @@ private:
void updateSelectionListVisibilities(); void updateSelectionListVisibilities();
void updateSelectionSummaryLabel(); void updateSelectionSummaryLabel();
void updatePercentileUiVisibility(); void updatePercentileUiVisibility();
void updateUnlockUiVisibility();
// Pdm system overrides // Pdm system overrides
virtual void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) const; virtual void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) ;
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly ); virtual QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly );
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);
@@ -84,7 +85,7 @@ private:
// Fields // Fields
caf::PdmField< caf::AppEnum< CalculationStatus > > m_calculationStatus; caf::PdmField< caf::AppEnum< CalculationStatus > > m_calculationStatus;
caf::PdmField< QString > m_editingAllowed; caf::PdmField< bool > m_editingAllowed;
caf::PdmField< caf::AppEnum< RimDefines::ResultCatType > > m_resultType; caf::PdmField< caf::AppEnum< RimDefines::ResultCatType > > m_resultType;
caf::PdmField< caf::AppEnum< RimDefines::PorosityModelType > > m_porosityModel; caf::PdmField< caf::AppEnum< RimDefines::PorosityModelType > > m_porosityModel;

View File

@@ -38,6 +38,8 @@
#include "RimStatisticsCase.h" #include "RimStatisticsCase.h"
#include "RimResultCase.h" #include "RimResultCase.h"
#include "RigGridManager.h" #include "RigGridManager.h"
#include "RimCase.h"
#include "RigCaseData.h"
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
@@ -383,6 +385,23 @@ RimReservoirView* RimUiTreeModelPdm::addReservoirView(const QModelIndex& itemInd
if (collectionItem) if (collectionItem)
{ {
RimCase* rimReservoir = dynamic_cast<RimCase*>(collectionItem->dataObject().p()); RimCase* rimReservoir = dynamic_cast<RimCase*>(collectionItem->dataObject().p());
// If the case is one of the source cases in a CaseGroup, but not the main case, we need to
// trigger a complete load of the case, if the new view is the first on the case.
if (rimReservoir && rimReservoir->parentGridCaseGroup()
&& rimReservoir->parentGridCaseGroup()->contains(rimReservoir)
&& !(rimReservoir == rimReservoir->parentGridCaseGroup()->mainCase())
&& rimReservoir->reservoirViews().size() == 0)
{
if (rimReservoir->reservoirData())
{
CVF_ASSERT(rimReservoir->reservoirData()->refCount() == 1);
}
rimReservoir->removeReservoirData();
}
RimReservoirView* insertedView = rimReservoir->createAndAddReservoirView(); RimReservoirView* insertedView = rimReservoir->createAndAddReservoirView();
int viewCount = rowCount(collectionIndex); int viewCount = rowCount(collectionIndex);

View File

@@ -55,6 +55,8 @@ void PdmUiPushButtonEditor::configureAndUpdateUi(const QString& uiConfigName)
m_label->setText(field()->uiName(uiConfigName)); m_label->setText(field()->uiName(uiConfigName));
} }
m_pushButton->setCheckable(true);
//m_label->setEnabled(!field()->isUiReadOnly(uiConfigName)); //m_label->setEnabled(!field()->isUiReadOnly(uiConfigName));
m_pushButton->setEnabled(!field()->isUiReadOnly(uiConfigName)); m_pushButton->setEnabled(!field()->isUiReadOnly(uiConfigName));
@@ -67,6 +69,10 @@ void PdmUiPushButtonEditor::configureAndUpdateUi(const QString& uiConfigName)
{ {
m_pushButton->setIcon(attributes.m_buttonIcon); m_pushButton->setIcon(attributes.m_buttonIcon);
} }
else if (!attributes.m_buttonText.isEmpty())
{
m_pushButton->setText(attributes.m_buttonText);
}
else else
{ {
if (variantFieldValue.type() == QVariant::Bool) if (variantFieldValue.type() == QVariant::Bool)
@@ -119,11 +125,7 @@ void PdmUiPushButtonEditor::slotClicked(bool checked)
v = checked; v = checked;
this->setValueToField(v); this->setValueToField(v);
} }
else
{
QVariant v = m_pushButton->text();
this->setValueToField(v);
}
} }

View File

@@ -36,6 +36,7 @@ class PdmUiPushButtonEditorAttribute : public PdmUiEditorAttribute
{ {
public: public:
QIcon m_buttonIcon; QIcon m_buttonIcon;
QString m_buttonText;
}; };