mirror of
				https://github.com/OPM/ResInsight.git
				synced 2025-02-25 18:55:39 -06:00 
			
		
		
		
	Improved paste of pdm objects
p4#: 20980
This commit is contained in:
		@@ -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<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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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<caf::PdmPointer<RimResultReservoir> > 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();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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<RimCaseCollection*>(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;
 | 
			
		||||
 
 | 
			
		||||
@@ -79,7 +79,7 @@ private slots:
 | 
			
		||||
    void slotAddCaseGroup();
 | 
			
		||||
 | 
			
		||||
    void slotCopyPdmObjectToClipboard();
 | 
			
		||||
    void slotPasteEclipseCases();
 | 
			
		||||
    void slotPastePdmObjects();
 | 
			
		||||
 | 
			
		||||
    void slotSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user