Added paste on gridcollection, case collection and cases

Moved creation of objects into rimUiTreeModelPdm
p4#: 20968
This commit is contained in:
Magne Sjaastad 2013-03-19 12:47:38 +01:00
parent 4368a644bf
commit 27dee4d4e2
7 changed files with 89 additions and 24 deletions

View File

@ -22,6 +22,7 @@
#include "RimCaseCollection.h"
#include "RimReservoirView.h"
#include "RimIdenticalGridCaseGroup.h"
CAF_PDM_SOURCE_INIT(RimCaseCollection, "RimCaseCollection");
@ -42,3 +43,19 @@ RimCaseCollection::~RimCaseCollection()
{
reservoirs.deleteAllChildObjects();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimIdenticalGridCaseGroup* RimCaseCollection::parentCaseGroup()
{
std::vector<RimIdenticalGridCaseGroup*> parentObjects;
this->parentObjectsOfType(parentObjects);
if (parentObjects.size() > 0)
{
return parentObjects[0];
}
return NULL;
}

View File

@ -41,6 +41,8 @@ public:
caf::PdmPointersField<RimReservoir*> reservoirs;
RimIdenticalGridCaseGroup* parentCaseGroup();
private:
};

View File

@ -63,6 +63,8 @@ public:
void removeResult(const QString& resultName);
virtual QString locationOnDisc() const { return QString(); }
RimCaseCollection* parentCaseCollection();
// Overridden methods from PdmObject
public:
@ -76,8 +78,6 @@ protected:
void computeCachedData();
void setReservoirData(RigEclipseCase* eclipseCase);
private:
RimCaseCollection* parentCaseCollection();
private:
cvf::ref<RigEclipseCase> m_rigEclipseCase;

View File

@ -535,3 +535,50 @@ RimIdenticalGridCaseGroup* RimUiTreeModelPdm::addCaseGroup(const QModelIndex& it
return NULL;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimUiTreeModelPdm::addCases(const QModelIndex& itemIndex, caf::PdmObjectGroup& cases)
{
RimProject* proj = RIApplication::instance()->project();
CVF_ASSERT(proj);
caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex);
RimIdenticalGridCaseGroup* gridCaseGroup = NULL;
RimCaseCollection* caseCollection = NULL;
if (dynamic_cast<RimIdenticalGridCaseGroup*>(currentItem->dataObject().p()))
{
gridCaseGroup = dynamic_cast<RimIdenticalGridCaseGroup*>(currentItem->dataObject().p());
caseCollection = gridCaseGroup->caseCollection();
}
else if (dynamic_cast<RimCaseCollection*>(currentItem->dataObject().p()))
{
caseCollection = dynamic_cast<RimCaseCollection*>(currentItem->dataObject().p());
gridCaseGroup = caseCollection->parentCaseGroup();
}
else if (dynamic_cast<RimReservoir*>(currentItem->dataObject().p()))
{
RimReservoir* rimReservoir = dynamic_cast<RimReservoir*>(currentItem->dataObject().p());
caseCollection = rimReservoir->parentCaseCollection();
gridCaseGroup = caseCollection->parentCaseGroup();
}
else
{
return;
}
CVF_ASSERT(caseCollection);
CVF_ASSERT(gridCaseGroup);
//itemCount = caseCollection->reservoirs().size();
if (gridCaseGroup)
{
proj->copyFromCaseList(gridCaseGroup, cases);
rebuildUiSubTree(caseCollection);
}
}

View File

@ -107,6 +107,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);
RimStatisticalCalculation* addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex);
RimIdenticalGridCaseGroup* addCaseGroup(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex);

View File

@ -40,8 +40,6 @@ RimUiTreeView::RimUiTreeView(QWidget *parent /*= 0*/)
: QTreeView(parent)
{
setHeaderHidden(true);
m_pdmObjectsFromClipboard = new caf::PdmObjectGroup;
}
//--------------------------------------------------------------------------------------------------
@ -49,8 +47,6 @@ RimUiTreeView::RimUiTreeView(QWidget *parent /*= 0*/)
//--------------------------------------------------------------------------------------------------
RimUiTreeView::~RimUiTreeView()
{
delete m_pdmObjectsFromClipboard;
m_pdmObjectsFromClipboard = NULL;
}
//--------------------------------------------------------------------------------------------------
@ -173,6 +169,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("Close"), this, SLOT(slotCloseCase()));
menu.addAction(QString("New View"), this, SLOT(slotAddView()));
menu.exec(event->globalPos());
@ -184,6 +181,12 @@ void RimUiTreeView::contextMenuEvent(QContextMenuEvent* event)
menu.addAction(QString("Paste"), this, SLOT(slotPasteEclipseCases()));
menu.exec(event->globalPos());
}
else if (dynamic_cast<RimCaseCollection*>(uiItem->dataObject().p()))
{
QMenu menu;
menu.addAction(QString("Paste"), this, SLOT(slotPasteEclipseCases()));
menu.exec(event->globalPos());
}
}
}
}
@ -826,6 +829,8 @@ void RimUiTreeView::slotAddCaseGroup()
QModelIndex insertedIndex;
myModel->addCaseGroup(currentIndex(), insertedIndex);
setCurrentIndex(insertedIndex);
setExpanded(insertedIndex, true);
}
}
@ -860,29 +865,21 @@ void RimUiTreeView::slotPasteEclipseCases()
{
if (!currentIndex().isValid()) return;
createPdmObjectsFromClipboard();
if (m_pdmObjectsFromClipboard->objects().size() == 0) return;
RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model());
caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex());
if (!myModel) return;
RimIdenticalGridCaseGroup* destinationGroup = dynamic_cast<RimIdenticalGridCaseGroup*>(uiItem->dataObject().p());
if (!destinationGroup) return;
caf::PdmObjectGroup objectGroup;
createPdmObjectsFromClipboard(&objectGroup);
if (objectGroup.objects().size() == 0) return;
RimProject* proj = RIApplication::instance()->project();
proj->copyFromCaseList(destinationGroup, *m_pdmObjectsFromClipboard);
myModel->rebuildUiSubTree(destinationGroup);
myModel->addCases(currentIndex(), objectGroup);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimUiTreeView::createPdmObjectsFromClipboard()
void RimUiTreeView::createPdmObjectsFromClipboard(caf::PdmObjectGroup* objectGroup)
{
m_pdmObjectsFromClipboard->objects().clear();
RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model());
if (!myModel) return;
@ -896,7 +893,7 @@ void RimUiTreeView::createPdmObjectsFromClipboard()
for (int i = 0; i < indexList.size(); i++)
{
caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(indexList.at(i));
m_pdmObjectsFromClipboard->addObject(uiItem->dataObject().p());
objectGroup->addObject(uiItem->dataObject().p());
}
}
@ -919,7 +916,9 @@ void RimUiTreeView::keyPressEvent(QKeyEvent* keyEvent)
}
}
if (dynamic_cast<RimIdenticalGridCaseGroup*>(uiItem->dataObject().p()))
if (dynamic_cast<RimIdenticalGridCaseGroup*>(uiItem->dataObject().p())
|| dynamic_cast<RimCaseCollection*>(uiItem->dataObject().p())
|| dynamic_cast<RimReservoir*>(uiItem->dataObject().p()))
{
if (keyEvent->matches(QKeySequence::Paste))
{

View File

@ -85,10 +85,9 @@ signals:
private:
void createPdmObjectsFromClipboard();
void createPdmObjectsFromClipboard(caf::PdmObjectGroup* objectGroup);
virtual void keyPressEvent(QKeyEvent* keyEvent);
caf::PdmObjectGroup* m_pdmObjectsFromClipboard;
};