Fixed crash after copy/paste of view and case

This commit is contained in:
Jacob Støren 2014-08-28 13:37:56 +02:00
parent b61d582112
commit 01cfed9ab7
3 changed files with 29 additions and 9 deletions

View File

@ -610,7 +610,7 @@ RimIdenticalGridCaseGroup* RimUiTreeModelPdm::addCaseGroup(QModelIndex& inserted
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimUiTreeModelPdm::addObjects(const QModelIndex& itemIndex, caf::PdmObjectGroup& pdmObjects) void RimUiTreeModelPdm::addObjects(const QModelIndex& itemIndex, const caf::PdmObjectGroup& pdmObjects)
{ {
RimProject* proj = RiaApplication::instance()->project(); RimProject* proj = RiaApplication::instance()->project();
CVF_ASSERT(proj); CVF_ASSERT(proj);
@ -638,6 +638,8 @@ void RimUiTreeModelPdm::addObjects(const QModelIndex& itemIndex, caf::PdmObjectG
mainResultCase->readGridDimensions(mainCaseGridDimensions); mainResultCase->readGridDimensions(mainCaseGridDimensions);
} }
std::vector<RimResultCase*> insertedCases;
// Add cases to case group // Add cases to case group
for (size_t i = 0; i < typedObjects.size(); i++) for (size_t i = 0; i < typedObjects.size(); i++)
{ {
@ -650,6 +652,22 @@ void RimUiTreeModelPdm::addObjects(const QModelIndex& itemIndex, caf::PdmObjectG
continue; continue;
} }
insertedCases.push_back(rimResultReservoir);
}
// Initialize the new objects
for (size_t i = 0; i < insertedCases.size(); i++)
{
RimResultCase* rimResultReservoir = insertedCases[i];
caf::PdmDocument::initAfterReadTraversal(rimResultReservoir);
}
// Load stuff
for (size_t i = 0; i < insertedCases.size(); i++)
{
RimResultCase* rimResultReservoir = insertedCases[i];
if (!mainResultCase) if (!mainResultCase)
{ {
rimResultReservoir->openEclipseGridFile(); rimResultReservoir->openEclipseGridFile();
@ -690,9 +708,9 @@ void RimUiTreeModelPdm::addObjects(const QModelIndex& itemIndex, caf::PdmObjectG
endInsertRows(); endInsertRows();
} }
for (size_t i = 0; i < rimResultReservoir->reservoirViews.size(); i++) for (size_t rvIdx = 0; rvIdx < rimResultReservoir->reservoirViews.size(); rvIdx++)
{ {
RimReservoirView* riv = rimResultReservoir->reservoirViews()[i]; RimReservoirView* riv = rimResultReservoir->reservoirViews()[rvIdx];
riv->loadDataAndUpdate(); riv->loadDataAndUpdate();
} }
} }
@ -717,16 +735,17 @@ void RimUiTreeModelPdm::addObjects(const QModelIndex& itemIndex, caf::PdmObjectG
RimReservoirView* rimReservoirView = typedObjects[i]; RimReservoirView* rimReservoirView = typedObjects[i];
QString nameOfCopy = QString("Copy of ") + rimReservoirView->name; QString nameOfCopy = QString("Copy of ") + rimReservoirView->name;
rimReservoirView->name = nameOfCopy; rimReservoirView->name = nameOfCopy;
rimCase->reservoirViews().push_back(rimReservoirView);
rimReservoirView->setEclipseCase(rimCase);
// Delete all wells to be able to copy/paste between cases, as the wells differ between cases // Delete all wells to be able to copy/paste between cases, as the wells differ between cases
rimReservoirView->wellCollection()->wells().deleteAllChildObjects(); rimReservoirView->wellCollection()->wells().deleteAllChildObjects();
caf::PdmDocument::initAfterReadTraversal(rimReservoirView);
rimReservoirView->setEclipseCase(rimCase);
caf::PdmDocument::updateUiIconStateRecursively(rimReservoirView); caf::PdmDocument::updateUiIconStateRecursively(rimReservoirView);
rimReservoirView->loadDataAndUpdate(); rimReservoirView->loadDataAndUpdate();
rimCase->reservoirViews().push_back(rimReservoirView);
int position = static_cast<int>(rimCase->reservoirViews().size()); int position = static_cast<int>(rimCase->reservoirViews().size());
beginInsertRows(collectionIndex, position, position); beginInsertRows(collectionIndex, position, position);

View File

@ -65,7 +65,7 @@ public:
void addToParentAndBuildUiItems(caf::PdmUiTreeItem* parentTreeItem, int position, caf::PdmObject* pdmObject); void addToParentAndBuildUiItems(caf::PdmUiTreeItem* parentTreeItem, int position, caf::PdmObject* pdmObject);
void populateObjectGroupFromModelIndexList(const QModelIndexList& modelIndexList, caf::PdmObjectGroup* objectGroup); void populateObjectGroupFromModelIndexList(const QModelIndexList& modelIndexList, caf::PdmObjectGroup* objectGroup);
void addObjects(const QModelIndex& itemIndex, caf::PdmObjectGroup& pdmObjects); void addObjects(const QModelIndex& itemIndex, const caf::PdmObjectGroup& pdmObjects);
void moveObjects(const QModelIndex& itemIndex, caf::PdmObjectGroup& pdmObjects); void moveObjects(const QModelIndex& itemIndex, caf::PdmObjectGroup& pdmObjects);
RimStatisticsCase* addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); RimStatisticsCase* addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex);

View File

@ -127,10 +127,11 @@ class PdmDocument: public PdmObjectGroup
void writeFile(QIODevice* device); void writeFile(QIODevice* device);
static void updateUiIconStateRecursively(PdmObject * root); static void updateUiIconStateRecursively(PdmObject * root);
static void initAfterReadTraversal(PdmObject * root);
private: private:
static void setupBeforeSaveTraversal(PdmObject * root); static void setupBeforeSaveTraversal(PdmObject * root);
static void initAfterReadTraversal(PdmObject * root);
}; };