Added context menu items for adding new statistical case

p4#: 20523
This commit is contained in:
Magne Sjaastad 2013-02-15 08:44:45 +01:00
parent 67cab9448e
commit c92e822f3f
8 changed files with 226 additions and 0 deletions

View File

@ -22,6 +22,7 @@
#include "RimReservoir.h" #include "RimReservoir.h"
#include "RimReservoirView.h" #include "RimReservoirView.h"
#include "RigEclipseCase.h" #include "RigEclipseCase.h"
#include "RimStatisticalCalculation.h"
CAF_PDM_SOURCE_INIT(RimIdenticalGridCaseGroup, "RimIdenticalGridCaseGroup"); CAF_PDM_SOURCE_INIT(RimIdenticalGridCaseGroup, "RimIdenticalGridCaseGroup");
@ -34,6 +35,12 @@ RimIdenticalGridCaseGroup::RimIdenticalGridCaseGroup()
CAF_PDM_InitObject("Identical Grids", "", "", ""); CAF_PDM_InitObject("Identical Grids", "", "", "");
CAF_PDM_InitFieldNoDefault(&reservoirs, "Reservoirs", "", "", "", ""); CAF_PDM_InitFieldNoDefault(&reservoirs, "Reservoirs", "", "", "", "");
CAF_PDM_InitFieldNoDefault(&statisticalReservoirs, "StatisticalReservoirs", "", "", "", "");
RimStatisticalCalculation* dummyStat = new RimStatisticalCalculation;
dummyStat->caseName = "Statistics 1";
statisticalReservoirs.push_back(dummyStat);
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -81,3 +88,17 @@ RigMainGrid* RimIdenticalGridCaseGroup::mainGrid()
return NULL; return NULL;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimStatisticalCalculation* RimIdenticalGridCaseGroup::createAndAppendStatisticalCalculation()
{
RimStatisticalCalculation* newObject = new RimStatisticalCalculation;
newObject->caseName = "Statistics 1";
statisticalReservoirs.push_back(newObject);
return newObject;
}

View File

@ -25,6 +25,7 @@
class RimReservoir; class RimReservoir;
class RigMainGrid; class RigMainGrid;
class RimStatisticalCalculation;
//================================================================================================== //==================================================================================================
// //
@ -42,9 +43,11 @@ public:
void addCase(RimReservoir* reservoir); void addCase(RimReservoir* reservoir);
caf::PdmPointersField<RimReservoir*> reservoirs; caf::PdmPointersField<RimReservoir*> reservoirs;
caf::PdmPointersField<RimReservoir*> statisticalReservoirs;
RigMainGrid* mainGrid(); RigMainGrid* mainGrid();
RimStatisticalCalculation* createAndAppendStatisticalCalculation();
private: private:
cvf::ref<RigMainGrid> m_mainGrid; cvf::ref<RigMainGrid> m_mainGrid;

View File

@ -20,6 +20,8 @@
#include "RimStatisticalCalculation.h" #include "RimStatisticalCalculation.h"
#include "RimReservoirView.h" #include "RimReservoirView.h"
#include "cafPdmUiOrdering.h"
#include "RimIdenticalGridCaseGroup.h"
CAF_PDM_SOURCE_INIT(RimStatisticalCalculation, "RimStatisticalCalculation"); CAF_PDM_SOURCE_INIT(RimStatisticalCalculation, "RimStatisticalCalculation");
@ -34,6 +36,7 @@ RimStatisticalCalculation::RimStatisticalCalculation()
CAF_PDM_InitField(&statisticsMax, "StatisticsMax", true, "Maximum", "", "" ,""); CAF_PDM_InitField(&statisticsMax, "StatisticsMax", true, "Maximum", "", "" ,"");
CAF_PDM_InitField(&statisticsMean, "StatisticsMean", true, "Mean", "", "" ,""); CAF_PDM_InitField(&statisticsMean, "StatisticsMean", true, "Mean", "", "" ,"");
CAF_PDM_InitField(&statisticsStdDev, "StatisticsStdDev", true, "Std dev", "", "" ,""); CAF_PDM_InitField(&statisticsStdDev, "StatisticsStdDev", true, "Std dev", "", "" ,"");
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -51,3 +54,100 @@ bool RimStatisticalCalculation::openEclipseGridFile()
{ {
return true; return true;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStatisticalCalculation::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) const
{
// Fields declared in RimCellFilter
uiOrdering.add(&caseName);
// Fields declared in RimResultDefinition
caf::PdmUiGroup* group1 = uiOrdering.addNewGroup("Statistical parameters");
group1->add(&statisticsMin);
group1->add(&statisticsMax);
group1->add(&statisticsMean);
group1->add(&statisticsStdDev);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimIdenticalGridCaseGroup* RimStatisticalCalculation::parent()
{
std::vector<caf::PdmObject*> parentObjects;
this->parentObjects(parentObjects);
RimIdenticalGridCaseGroup* parentObject = NULL;
for (size_t i = 0; i < parentObjects.size(); i++)
{
if (parentObject) continue;
caf::PdmObject* obj = parentObjects[i];
parentObject = dynamic_cast<RimIdenticalGridCaseGroup*>(obj);
}
CVF_ASSERT(parentObject);
return parentObject;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStatisticalCalculation::computeStatistics()
{
if (statisticsMin)
{
createAndComputeMin();
}
if (statisticsMax)
{
createAndComputeMax();
}
if (statisticsMean)
{
createAndComputeMean();
}
if (statisticsStdDev)
{
createAndComputeStdDev();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStatisticalCalculation::createAndComputeMin()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStatisticalCalculation::createAndComputeMax()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStatisticalCalculation::createAndComputeMean()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStatisticalCalculation::createAndComputeStdDev()
{
}

View File

@ -25,6 +25,9 @@
#include "RimReservoir.h" #include "RimReservoir.h"
class RimIdenticalGridCaseGroup;
class RimResultDefinition;
//================================================================================================== //==================================================================================================
// //
@ -46,6 +49,15 @@ public:
caf::PdmField<bool> statisticsMean; caf::PdmField<bool> statisticsMean;
caf::PdmField<bool> statisticsStdDev; caf::PdmField<bool> statisticsStdDev;
RimIdenticalGridCaseGroup* parent();
virtual void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) const;
void computeStatistics();
private: private:
void createAndComputeMin();
void createAndComputeMax();
void createAndComputeMean();
void createAndComputeStdDev();
}; };

View File

@ -35,6 +35,7 @@
#include "RimInputPropertyCollection.h" #include "RimInputPropertyCollection.h"
#include "cafPdmField.h" #include "cafPdmField.h"
#include "RimInputReservoir.h" #include "RimInputReservoir.h"
#include "RimStatisticalCalculation.h"
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
@ -442,3 +443,43 @@ void RimUiTreeModelPdm::deleteInputProperty(const QModelIndex& itemIndex)
delete inputProperty; delete inputProperty;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimStatisticalCalculation* RimUiTreeModelPdm::addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex)
{
caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex);
QModelIndex collectionIndex;
RimIdenticalGridCaseGroup* caseGroup = NULL;
caf::PdmUiTreeItem* parentCollectionItem = NULL;
int position = 0;
if (dynamic_cast<RimStatisticalCalculation*>(currentItem->dataObject().p()))
{
RimStatisticalCalculation* currentObject = dynamic_cast<RimStatisticalCalculation*>(currentItem->dataObject().p());
caseGroup = currentObject->parent();
parentCollectionItem = currentItem->parent();
position = itemIndex.row();
collectionIndex = itemIndex.parent();
}
else if (dynamic_cast<RimIdenticalGridCaseGroup*>(currentItem->dataObject().p()))
{
caseGroup = dynamic_cast<RimIdenticalGridCaseGroup*>(currentItem->dataObject().p());
parentCollectionItem = currentItem;
position = parentCollectionItem->childCount();
collectionIndex = itemIndex;
}
beginInsertRows(collectionIndex, position, position);
RimStatisticalCalculation* createdObject = caseGroup->createAndAppendStatisticalCalculation();
caf::PdmUiTreeItem* childItem = new caf::PdmUiTreeItem(parentCollectionItem, position, createdObject);
endInsertRows();
insertedModelIndex = index(position, 0, collectionIndex);
return createdObject;
}

View File

@ -28,6 +28,7 @@ class RimCellPropertyFilter;
class RimCellRangeFilter; class RimCellRangeFilter;
class RimReservoirView; class RimReservoirView;
class RimInputProperty; class RimInputProperty;
class RimStatisticalCalculation;
//================================================================================================== //==================================================================================================
/// ///
@ -54,6 +55,8 @@ public:
RimCellRangeFilter* addRangeFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); RimCellRangeFilter* addRangeFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex);
RimReservoirView* addReservoirView(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); RimReservoirView* addReservoirView(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex);
void addInputProperty(const QModelIndex& itemIndex, const QStringList& fileNames); void addInputProperty(const QModelIndex& itemIndex, const QStringList& fileNames);
RimStatisticalCalculation* addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex);
void updateScriptPaths(); void updateScriptPaths();

View File

@ -31,6 +31,7 @@
#include "RimInputReservoir.h" #include "RimInputReservoir.h"
#include "RimBinaryExportSettings.h" #include "RimBinaryExportSettings.h"
#include "RigReservoirCellResults.h" #include "RigReservoirCellResults.h"
#include "RimStatisticalCalculation.h"
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
@ -143,6 +144,19 @@ void RimUiTreeView::contextMenuEvent(QContextMenuEvent* event)
menu.addAction(QString("Save Property To File"), this, SLOT(slotWriteBinaryResultAsInputProperty())); menu.addAction(QString("Save Property To File"), this, SLOT(slotWriteBinaryResultAsInputProperty()));
menu.exec(event->globalPos()); menu.exec(event->globalPos());
} }
else if (dynamic_cast<RimIdenticalGridCaseGroup*>(uiItem->dataObject().p()))
{
QMenu menu;
menu.addAction(QString("New Statistical Case"), this, SLOT(slotNewStatisticalCase()));
menu.exec(event->globalPos());
}
else if (dynamic_cast<RimStatisticalCalculation*>(uiItem->dataObject().p()))
{
QMenu menu;
menu.addAction(QString("Compute"), this, SLOT(slotComputeStatisticalCases()));
menu.addAction(QString("Close"), this, SLOT(slotCloseCase()));
menu.exec(event->globalPos());
}
else if (dynamic_cast<RimReservoir*>(uiItem->dataObject().p())) else if (dynamic_cast<RimReservoir*>(uiItem->dataObject().p()))
{ {
QMenu menu; QMenu menu;
@ -750,3 +764,32 @@ void RimUiTreeView::slotCloseCase()
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimUiTreeView::slotNewStatisticalCase()
{
RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model());
if (myModel)
{
QModelIndex insertedIndex;
RimStatisticalCalculation* newObject = myModel->addStatisticalCalculation(currentIndex(), insertedIndex);
setCurrentIndex(insertedIndex);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimUiTreeView::slotComputeStatisticalCases()
{
QModelIndex index = currentIndex();
RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model());
caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex());
RimStatisticalCalculation* statisticalObject = dynamic_cast<RimStatisticalCalculation*>(uiItem->dataObject().p());
if (!statisticalObject) return;
statisticalObject->computeStatistics();
}

View File

@ -69,6 +69,9 @@ private slots:
void slotCloseCase(); void slotCloseCase();
void slotNewStatisticalCase();
void slotComputeStatisticalCases();
void slotSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected); void slotSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected);
signals: signals: