Use concept of parentObjectsOfType to avoid dynamic cast in application code.

p4#: 20887
This commit is contained in:
Magne Sjaastad 2013-03-13 13:51:26 +01:00
parent 3c446c4018
commit 973eb5c8f7
6 changed files with 38 additions and 59 deletions

View File

@ -98,23 +98,17 @@ void RimStatisticalCalculation::defineUiOrdering(QString uiConfigName, caf::PdmU
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimStatisticalCollection* RimStatisticalCalculation::parent()
RimStatisticalCollection* RimStatisticalCalculation::parentStatisticalCollection()
{
std::vector<caf::PdmObject*> parentObjects;
this->parentObjects(parentObjects);
std::vector<RimStatisticalCollection*> parentObjects;
this->parentObjectsOfType(parentObjects);
RimStatisticalCollection* parentObject = NULL;
for (size_t i = 0; i < parentObjects.size(); i++)
if (parentObjects.size() > 0)
{
if (parentObject) continue;
caf::PdmObject* obj = parentObjects[i];
parentObject = dynamic_cast<RimStatisticalCollection*>(obj);
return parentObjects[0];
}
CVF_ASSERT(parentObject);
return parentObject;
return NULL;
}
//--------------------------------------------------------------------------------------------------
@ -152,6 +146,9 @@ void RimStatisticalCalculation::computeStatistics()
QList<QPair<RimDefines::ResultCatType, QString> > resultSpecification;
resultSpecification.append(qMakePair(RimDefines::DYNAMIC_NATIVE, QString("PRESSURE")));
/*
{
QStringList resultNames = sourceCases.at(0)->results(RifReaderInterface::MATRIX_RESULTS)->resultNames(RimDefines::DYNAMIC_NATIVE);
foreach(QString resultName, resultNames)
@ -167,6 +164,7 @@ void RimStatisticalCalculation::computeStatistics()
resultSpecification.append(qMakePair(RimDefines::STATIC_NATIVE, resultName));
}
}
*/
RigStatistics stat(sourceCases, timeStepIndices, statisticsConfig, resultCase);
stat.evaluateStatistics(resultSpecification);
@ -208,22 +206,10 @@ void RimStatisticalCalculation::getSourceCases(cvf::Collection<RigEclipseCase>&
//--------------------------------------------------------------------------------------------------
RimIdenticalGridCaseGroup* RimStatisticalCalculation::caseGroup()
{
RimStatisticalCollection* statColl = parent();
if (statColl)
RimStatisticalCollection* parentCollection = parentStatisticalCollection();
if (parentCollection)
{
std::vector<caf::PdmObject*> parentObjects;
statColl->parentObjects(parentObjects);
RimIdenticalGridCaseGroup* gridCaseGroup = NULL;
for (size_t i = 0; i < parentObjects.size(); i++)
{
if (gridCaseGroup) continue;
caf::PdmObject* obj = parentObjects[i];
gridCaseGroup = dynamic_cast<RimIdenticalGridCaseGroup*>(obj);
}
return gridCaseGroup;
return parentCollection->parentCaseGroup();
}
return NULL;

View File

@ -51,7 +51,7 @@ public:
caf::PdmField<QString> m_resultName;
RimStatisticalCollection* parent();
RimStatisticalCollection* parentStatisticalCollection();
virtual void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) const;
void computeStatistics();

View File

@ -51,7 +51,7 @@ RimStatisticalCollection::~RimStatisticalCollection()
RimStatisticalCalculation* RimStatisticalCollection::createAndAppendStatisticalCalculation()
{
RimStatisticalCalculation* newObject = new RimStatisticalCalculation;
RimIdenticalGridCaseGroup* gridCaseGroup = parent();
RimIdenticalGridCaseGroup* gridCaseGroup = parentCaseGroup();
CVF_ASSERT(gridCaseGroup);
CVF_ASSERT(gridCaseGroup->mainGrid());
@ -68,21 +68,16 @@ RimStatisticalCalculation* RimStatisticalCollection::createAndAppendStatisticalC
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimIdenticalGridCaseGroup* RimStatisticalCollection::parent()
RimIdenticalGridCaseGroup* RimStatisticalCollection::parentCaseGroup()
{
std::vector<caf::PdmObject*> parentObjects;
this->parentObjects(parentObjects);
std::vector<RimIdenticalGridCaseGroup*> parentObjects;
this->parentObjectsOfType(parentObjects);
RimIdenticalGridCaseGroup* gridCaseGroup = NULL;
for (size_t i = 0; i < parentObjects.size(); i++)
if (parentObjects.size() > 0)
{
if (gridCaseGroup) continue;
caf::PdmObject* obj = parentObjects[i];
gridCaseGroup = dynamic_cast<RimIdenticalGridCaseGroup*>(obj);
return parentObjects[0];
}
return gridCaseGroup;
return NULL;
}

View File

@ -44,7 +44,7 @@ public:
RimStatisticalCalculation* createAndAppendStatisticalCalculation();
RimIdenticalGridCaseGroup* parent();
RimIdenticalGridCaseGroup* parentCaseGroup();
private:

View File

@ -408,13 +408,11 @@ void RimUiTreeModelPdm::addInputProperty(const QModelIndex& itemIndex, const QSt
RimInputPropertyCollection* inputPropertyCollection = dynamic_cast<RimInputPropertyCollection*>(currentItem->dataObject().p());
CVF_ASSERT(inputPropertyCollection);
std::vector<caf::PdmObject*> parentObjects;
inputPropertyCollection->parentObjects(parentObjects);
std::vector<RimInputReservoir*> parentObjects;
inputPropertyCollection->parentObjectsOfType(parentObjects);
CVF_ASSERT(parentObjects.size() == 1);
RimInputReservoir* inputReservoir = dynamic_cast<RimInputReservoir*>(parentObjects[0]);
RimInputReservoir* inputReservoir = parentObjects[0];
CVF_ASSERT(inputReservoir);
if (inputReservoir)
{
@ -441,18 +439,18 @@ void RimUiTreeModelPdm::deleteInputProperty(const QModelIndex& itemIndex)
// Remove item from UI tree model before delete of project data structure
removeRow(itemIndex.row(), itemIndex.parent());
std::vector<caf::PdmObject*> parentObjects;
object->parentObjects(parentObjects);
std::vector<RimInputPropertyCollection*> parentObjects;
object->parentObjectsOfType(parentObjects);
CVF_ASSERT(parentObjects.size() == 1);
RimInputPropertyCollection* inputPropertyCollection = dynamic_cast<RimInputPropertyCollection*>(parentObjects[0]);
RimInputPropertyCollection* inputPropertyCollection = parentObjects[0];
if (!inputPropertyCollection) return;
std::vector<caf::PdmObject*> parentObjects2;
inputPropertyCollection->parentObjects(parentObjects2);
std::vector<RimInputReservoir*> parentObjects2;
inputPropertyCollection->parentObjectsOfType(parentObjects2);
CVF_ASSERT(parentObjects2.size() == 1);
RimInputReservoir* inputReservoir = dynamic_cast<RimInputReservoir*>(parentObjects2[0]);
RimInputReservoir* inputReservoir = parentObjects2[0];
if (!inputReservoir) return;
inputReservoir->removeProperty(inputProperty);
@ -475,7 +473,7 @@ RimStatisticalCalculation* RimUiTreeModelPdm::addStatisticalCalculation(const QM
if (dynamic_cast<RimStatisticalCalculation*>(currentItem->dataObject().p()))
{
RimStatisticalCalculation* currentObject = dynamic_cast<RimStatisticalCalculation*>(currentItem->dataObject().p());
caseGroup = currentObject->parent();
caseGroup = currentObject->parentStatisticalCollection();
parentCollectionItem = currentItem->parent();
position = itemIndex.row();
collectionIndex = itemIndex.parent();

View File

@ -647,18 +647,18 @@ void RimUiTreeView::slotWriteInputProperty()
// Find input reservoir for this property
RimInputReservoir* inputReservoir = NULL;
{
std::vector<caf::PdmObject*> parentObjects;
inputProperty->parentObjects(parentObjects);
std::vector<RimInputPropertyCollection*> parentObjects;
inputProperty->parentObjectsOfType(parentObjects);
CVF_ASSERT(parentObjects.size() == 1);
RimInputPropertyCollection* inputPropertyCollection = dynamic_cast<RimInputPropertyCollection*>(parentObjects[0]);
RimInputPropertyCollection* inputPropertyCollection = parentObjects[0];
if (!inputPropertyCollection) return;
std::vector<caf::PdmObject*> parentObjects2;
inputPropertyCollection->parentObjects(parentObjects2);
std::vector<RimInputReservoir*> parentObjects2;
inputPropertyCollection->parentObjectsOfType(parentObjects2);
CVF_ASSERT(parentObjects2.size() == 1);
inputReservoir = dynamic_cast<RimInputReservoir*>(parentObjects2[0]);
inputReservoir = parentObjects2[0];
}
if (!inputReservoir) return;