Improved paste of pdm objects

p4#: 20980
This commit is contained in:
Magne Sjaastad 2013-03-20 07:42:26 +01:00
parent 45ce4097e1
commit 22aee27333
6 changed files with 53 additions and 59 deletions

View File

@ -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); CVF_ASSERT(rimReservoir);
@ -243,45 +243,3 @@ void RimProject::insertCaseInCaseGroup(RimReservoir* rimReservoir, RimIdenticalG
caseGroup->addCase(rimReservoir); caseGroup->addCase(rimReservoir);
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimProject::copyFromCaseList(RimIdenticalGridCaseGroup* caseGroup, const caf::PdmObjectGroup& caseList)
{
std::vector<caf::PdmPointer<RimReservoir> > 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<RimResultReservoir*>(rimReservoir);
if (rimResultReservoir)
{
if (caseGroup->mainGrid() == NULL)
{
rimResultReservoir->openEclipseGridFile();
mainEclipseCase = rimResultReservoir->reservoirData();
}
else
{
if (!rimResultReservoir->openAndReadActiveCellData(mainEclipseCase))
{
CVF_ASSERT(false);
}
}
insertCaseInCaseGroup(rimResultReservoir, caseGroup);
}
}
}

View File

@ -48,8 +48,7 @@ public:
void close(); void close();
void copyFromCaseList(RimIdenticalGridCaseGroup* caseGroup, const caf::PdmObjectGroup& caseList); void insertCaseInCaseGroup(RimIdenticalGridCaseGroup* caseGroup, RimReservoir* rimReservoir);
void insertCaseInCaseGroup(RimReservoir* rimReservoir, RimIdenticalGridCaseGroup* caseGroup);
void moveEclipseCaseIntoCaseGroup(RimReservoir* rimReservoir); void moveEclipseCaseIntoCaseGroup(RimReservoir* rimReservoir);
void removeEclipseCaseFromAllGroups(RimReservoir* rimReservoir); void removeEclipseCaseFromAllGroups(RimReservoir* rimReservoir);

View File

@ -36,6 +36,7 @@
#include "cafPdmField.h" #include "cafPdmField.h"
#include "RimInputReservoir.h" #include "RimInputReservoir.h"
#include "RimStatisticalCalculation.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(); RimProject* proj = RIApplication::instance()->project();
CVF_ASSERT(proj); CVF_ASSERT(proj);
@ -568,13 +569,49 @@ void RimUiTreeModelPdm::addCases(const QModelIndex& itemIndex, caf::PdmObjectGro
CVF_ASSERT(caseCollection); CVF_ASSERT(caseCollection);
CVF_ASSERT(gridCaseGroup); CVF_ASSERT(gridCaseGroup);
//itemCount = caseCollection->reservoirs().size();
if (gridCaseGroup) if (gridCaseGroup)
{ {
proj->copyFromCaseList(gridCaseGroup, cases); std::vector<caf::PdmPointer<RimResultReservoir> > typedObjects;
pdmObjects.createCopyByType(&typedObjects);
rebuildUiSubTree(caseCollection); 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();
}
}
} }
} }

View File

@ -109,7 +109,7 @@ 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);
void addCases(const QModelIndex& itemIndex, caf::PdmObjectGroup& cases); void addObjects(const QModelIndex& itemIndex, caf::PdmObjectGroup& pdmObjects);
RimStatisticalCalculation* addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); RimStatisticalCalculation* addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex);
RimIdenticalGridCaseGroup* addCaseGroup(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); RimIdenticalGridCaseGroup* addCaseGroup(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex);

View File

@ -171,7 +171,7 @@ void RimUiTreeView::contextMenuEvent(QContextMenuEvent* event)
{ {
QMenu menu; QMenu menu;
menu.addAction(QString("Copy"), this, SLOT(slotCopyPdmObjectToClipboard())); 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("Close"), this, SLOT(slotCloseCase()));
menu.addAction(QString("New View"), this, SLOT(slotAddView())); menu.addAction(QString("New View"), this, SLOT(slotAddView()));
menu.exec(event->globalPos()); menu.exec(event->globalPos());
@ -180,13 +180,13 @@ void RimUiTreeView::contextMenuEvent(QContextMenuEvent* event)
{ {
QMenu menu; QMenu menu;
menu.addAction(QString("New Case Group"), this, SLOT(slotAddCaseGroup())); 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()); menu.exec(event->globalPos());
} }
else if (dynamic_cast<RimCaseCollection*>(uiItem->dataObject().p())) else if (dynamic_cast<RimCaseCollection*>(uiItem->dataObject().p()))
{ {
QMenu menu; QMenu menu;
menu.addAction(QString("Paste"), this, SLOT(slotPasteEclipseCases())); menu.addAction(QString("Paste"), this, SLOT(slotPastePdmObjects()));
menu.exec(event->globalPos()); menu.exec(event->globalPos());
} }
} }
@ -863,7 +863,7 @@ void RimUiTreeView::slotCopyPdmObjectToClipboard()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimUiTreeView::slotPasteEclipseCases() void RimUiTreeView::slotPastePdmObjects()
{ {
if (!currentIndex().isValid()) return; if (!currentIndex().isValid()) return;
@ -874,7 +874,7 @@ void RimUiTreeView::slotPasteEclipseCases()
createPdmObjectsFromClipboard(&objectGroup); createPdmObjectsFromClipboard(&objectGroup);
if (objectGroup.objects().size() == 0) return; 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)) if (keyEvent->matches(QKeySequence::Paste))
{ {
slotPasteEclipseCases(); slotPastePdmObjects();
keyEvent->setAccepted(true); keyEvent->setAccepted(true);
return; return;

View File

@ -79,7 +79,7 @@ private slots:
void slotAddCaseGroup(); void slotAddCaseGroup();
void slotCopyPdmObjectToClipboard(); void slotCopyPdmObjectToClipboard();
void slotPasteEclipseCases(); void slotPastePdmObjects();
void slotSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected); void slotSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected);