From 22aee27333b42536d884689ad84fa56b7ccbdeab Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 20 Mar 2013 07:42:26 +0100 Subject: [PATCH] Improved paste of pdm objects p4#: 20980 --- .../ProjectDataModel/RimProject.cpp | 44 +---------------- ApplicationCode/ProjectDataModel/RimProject.h | 3 +- .../ProjectDataModel/RimUiTreeModelPdm.cpp | 49 ++++++++++++++++--- .../ProjectDataModel/RimUiTreeModelPdm.h | 2 +- .../ProjectDataModel/RimUiTreeView.cpp | 12 ++--- .../ProjectDataModel/RimUiTreeView.h | 2 +- 6 files changed, 53 insertions(+), 59 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimProject.cpp b/ApplicationCode/ProjectDataModel/RimProject.cpp index 379f742e82..73b31d1fb9 100644 --- a/ApplicationCode/ProjectDataModel/RimProject.cpp +++ b/ApplicationCode/ProjectDataModel/RimProject.cpp @@ -233,7 +233,7 @@ RigMainGrid* RimProject::registerCaseInGridCollection(RigEclipseCase* rigEclipse //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimProject::insertCaseInCaseGroup(RimReservoir* rimReservoir, RimIdenticalGridCaseGroup* caseGroup) +void RimProject::insertCaseInCaseGroup(RimIdenticalGridCaseGroup* caseGroup, RimReservoir* rimReservoir) { CVF_ASSERT(rimReservoir); @@ -243,45 +243,3 @@ void RimProject::insertCaseInCaseGroup(RimReservoir* rimReservoir, RimIdenticalG caseGroup->addCase(rimReservoir); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimProject::copyFromCaseList(RimIdenticalGridCaseGroup* caseGroup, const caf::PdmObjectGroup& caseList) -{ - std::vector > typedObjects; - caseList.createCopyByType(&typedObjects); - - if (typedObjects.size() == 0) return; - - RigEclipseCase* mainEclipseCase = NULL; - if (caseGroup->caseCollection()->reservoirs().size() > 0) - { - RimReservoir* mainReservoir = caseGroup->caseCollection()->reservoirs()[0];; - mainEclipseCase = mainReservoir->reservoirData(); - } - - for (size_t i = 0; i < typedObjects.size(); i++) - { - RimReservoir* rimReservoir = typedObjects[i]; - caf::PdmObjectGroup::initAfterReadTraversal(rimReservoir); - - RimResultReservoir* rimResultReservoir = dynamic_cast(rimReservoir); - if (rimResultReservoir) - { - if (caseGroup->mainGrid() == NULL) - { - rimResultReservoir->openEclipseGridFile(); - mainEclipseCase = rimResultReservoir->reservoirData(); - } - else - { - if (!rimResultReservoir->openAndReadActiveCellData(mainEclipseCase)) - { - CVF_ASSERT(false); - } - } - - insertCaseInCaseGroup(rimResultReservoir, caseGroup); - } - } -} diff --git a/ApplicationCode/ProjectDataModel/RimProject.h b/ApplicationCode/ProjectDataModel/RimProject.h index 12aa85dd09..2d9f70c88c 100644 --- a/ApplicationCode/ProjectDataModel/RimProject.h +++ b/ApplicationCode/ProjectDataModel/RimProject.h @@ -48,8 +48,7 @@ public: void close(); - void copyFromCaseList(RimIdenticalGridCaseGroup* caseGroup, const caf::PdmObjectGroup& caseList); - void insertCaseInCaseGroup(RimReservoir* rimReservoir, RimIdenticalGridCaseGroup* caseGroup); + void insertCaseInCaseGroup(RimIdenticalGridCaseGroup* caseGroup, RimReservoir* rimReservoir); void moveEclipseCaseIntoCaseGroup(RimReservoir* rimReservoir); void removeEclipseCaseFromAllGroups(RimReservoir* rimReservoir); diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp b/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp index 832cf1a15a..28294365ec 100644 --- a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp +++ b/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp @@ -36,6 +36,7 @@ #include "cafPdmField.h" #include "RimInputReservoir.h" #include "RimStatisticalCalculation.h" +#include "RimResultReservoir.h" //-------------------------------------------------------------------------------------------------- /// @@ -534,7 +535,7 @@ RimIdenticalGridCaseGroup* RimUiTreeModelPdm::addCaseGroup(const QModelIndex& it //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::addCases(const QModelIndex& itemIndex, caf::PdmObjectGroup& cases) +void RimUiTreeModelPdm::addObjects(const QModelIndex& itemIndex, caf::PdmObjectGroup& pdmObjects) { RimProject* proj = RIApplication::instance()->project(); CVF_ASSERT(proj); @@ -568,13 +569,49 @@ void RimUiTreeModelPdm::addCases(const QModelIndex& itemIndex, caf::PdmObjectGro CVF_ASSERT(caseCollection); CVF_ASSERT(gridCaseGroup); - //itemCount = caseCollection->reservoirs().size(); - if (gridCaseGroup) { - proj->copyFromCaseList(gridCaseGroup, cases); - - rebuildUiSubTree(caseCollection); + std::vector > typedObjects; + pdmObjects.createCopyByType(&typedObjects); + + RigEclipseCase* mainEclipseCase = NULL; + if (gridCaseGroup->caseCollection()->reservoirs().size() > 0) + { + RimReservoir* mainReservoir = gridCaseGroup->caseCollection()->reservoirs()[0];; + mainEclipseCase = mainReservoir->reservoirData(); + } + + for (size_t i = 0; i < typedObjects.size(); i++) + { + RimResultReservoir* rimResultReservoir = typedObjects[i]; + + if (gridCaseGroup->mainGrid() == NULL) + { + rimResultReservoir->openEclipseGridFile(); + mainEclipseCase = rimResultReservoir->reservoirData(); + } + else + { + if (!rimResultReservoir->openAndReadActiveCellData(mainEclipseCase)) + { + CVF_ASSERT(false); + } + } + + proj->insertCaseInCaseGroup(gridCaseGroup, rimResultReservoir); + + caf::PdmObjectGroup::initAfterReadTraversal(rimResultReservoir); + + { + QModelIndex rootIndex = getModelIndexFromPdmObject(caseCollection); + caf::PdmUiTreeItem* caseCollectionUiItem = getTreeItemFromIndex(rootIndex); + + int position = rowCount(rootIndex); + beginInsertRows(rootIndex, position, position); + caf::PdmUiTreeItem* childItem = caf::UiTreeItemBuilderPdm::buildViewItems(caseCollectionUiItem, -1, rimResultReservoir); + endInsertRows(); + } + } } } diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h b/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h index ea28e897c9..362b0b27db 100644 --- a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h +++ b/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h @@ -109,7 +109,7 @@ public: RimCellRangeFilter* addRangeFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); RimReservoirView* addReservoirView(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); void addInputProperty(const QModelIndex& itemIndex, const QStringList& fileNames); - void addCases(const QModelIndex& itemIndex, caf::PdmObjectGroup& cases); + void addObjects(const QModelIndex& itemIndex, caf::PdmObjectGroup& pdmObjects); RimStatisticalCalculation* addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); RimIdenticalGridCaseGroup* addCaseGroup(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp b/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp index 2034a8a277..1e26f27e39 100644 --- a/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp +++ b/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp @@ -171,7 +171,7 @@ void RimUiTreeView::contextMenuEvent(QContextMenuEvent* event) { QMenu menu; menu.addAction(QString("Copy"), this, SLOT(slotCopyPdmObjectToClipboard())); - menu.addAction(QString("Paste"), this, SLOT(slotPasteEclipseCases())); + menu.addAction(QString("Paste"), this, SLOT(slotPastePdmObjects())); menu.addAction(QString("Close"), this, SLOT(slotCloseCase())); menu.addAction(QString("New View"), this, SLOT(slotAddView())); menu.exec(event->globalPos()); @@ -180,13 +180,13 @@ void RimUiTreeView::contextMenuEvent(QContextMenuEvent* event) { QMenu menu; menu.addAction(QString("New Case Group"), this, SLOT(slotAddCaseGroup())); - menu.addAction(QString("Paste"), this, SLOT(slotPasteEclipseCases())); + menu.addAction(QString("Paste"), this, SLOT(slotPastePdmObjects())); menu.exec(event->globalPos()); } else if (dynamic_cast(uiItem->dataObject().p())) { QMenu menu; - menu.addAction(QString("Paste"), this, SLOT(slotPasteEclipseCases())); + menu.addAction(QString("Paste"), this, SLOT(slotPastePdmObjects())); menu.exec(event->globalPos()); } } @@ -863,7 +863,7 @@ void RimUiTreeView::slotCopyPdmObjectToClipboard() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotPasteEclipseCases() +void RimUiTreeView::slotPastePdmObjects() { if (!currentIndex().isValid()) return; @@ -874,7 +874,7 @@ void RimUiTreeView::slotPasteEclipseCases() createPdmObjectsFromClipboard(&objectGroup); if (objectGroup.objects().size() == 0) return; - myModel->addCases(currentIndex(), objectGroup); + myModel->addObjects(currentIndex(), objectGroup); } //-------------------------------------------------------------------------------------------------- @@ -924,7 +924,7 @@ void RimUiTreeView::keyPressEvent(QKeyEvent* keyEvent) { if (keyEvent->matches(QKeySequence::Paste)) { - slotPasteEclipseCases(); + slotPastePdmObjects(); keyEvent->setAccepted(true); return; diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeView.h b/ApplicationCode/ProjectDataModel/RimUiTreeView.h index bc048157cf..733ccd062c 100644 --- a/ApplicationCode/ProjectDataModel/RimUiTreeView.h +++ b/ApplicationCode/ProjectDataModel/RimUiTreeView.h @@ -79,7 +79,7 @@ private slots: void slotAddCaseGroup(); void slotCopyPdmObjectToClipboard(); - void slotPasteEclipseCases(); + void slotPastePdmObjects(); void slotSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected);