mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
parent
6a9555a196
commit
10388ea3dc
@ -149,30 +149,6 @@ RimReservoirView* RimEclipseCase::createAndAddReservoirView()
|
||||
return riv;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// TODO: Move this functionality to PdmPointersField
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEclipseCase::removeReservoirView(RimReservoirView* reservoirView)
|
||||
{
|
||||
std::vector<size_t> indices;
|
||||
|
||||
size_t i;
|
||||
for (i = 0; i < reservoirViews().size(); i++)
|
||||
{
|
||||
if (reservoirViews()[i] == reservoirView)
|
||||
{
|
||||
indices.push_back(i);
|
||||
}
|
||||
}
|
||||
|
||||
// NB! Make sure the ordering goes from large to low index
|
||||
while (!indices.empty())
|
||||
{
|
||||
reservoirViews().erase(indices.back());
|
||||
indices.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -68,7 +68,6 @@ public:
|
||||
RimReservoirCellResultsStorage* results(RifReaderInterface::PorosityModelResultType porosityModel);
|
||||
|
||||
RimReservoirView* createAndAddReservoirView();
|
||||
void removeReservoirView(RimReservoirView* reservoirView);
|
||||
|
||||
void removeResult(const QString& resultName);
|
||||
|
||||
|
@ -41,11 +41,13 @@
|
||||
#include "RimUiTreeView.h"
|
||||
#include "RimWellCollection.h"
|
||||
#include "RimWellPathCollection.h"
|
||||
#include "RimGeoMechView.h"
|
||||
|
||||
#include "cvfAssert.h"
|
||||
|
||||
#include <QClipboard>
|
||||
#include <QFileSystemWatcher>
|
||||
#include "RimGeoMechCase.h"
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -60,60 +62,6 @@ RimUiTreeModelPdm::RimUiTreeModelPdm(QObject* parent)
|
||||
connect(m_scriptChangeDetector, SIGNAL(fileChanged(QString)), this, SLOT(slotRefreshScriptTree(QString)));
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// TO BE DELETED
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimUiTreeModelPdm::insertRows_special(int position, int rows, const QModelIndex &parent /*= QModelIndex()*/)
|
||||
{
|
||||
caf::PdmUiTreeItem* parentItem = getTreeItemFromIndex(parent);
|
||||
|
||||
bool canCreateChildren = false;
|
||||
QModelIndex parentIndex = parent;
|
||||
|
||||
if (dynamic_cast<RimCellRangeFilterCollection*>(parentItem->dataObject().p()) ||
|
||||
dynamic_cast<RimCellPropertyFilterCollection*>(parentItem->dataObject().p()))
|
||||
{
|
||||
canCreateChildren = true;
|
||||
}
|
||||
else if (dynamic_cast<RimCellFilter*>(parentItem->dataObject().p()))
|
||||
{
|
||||
parentItem = parentItem->parent();
|
||||
parentIndex = parent.parent();
|
||||
|
||||
canCreateChildren = true;
|
||||
}
|
||||
|
||||
if (canCreateChildren)
|
||||
{
|
||||
beginInsertRows(parent, position, position + rows - 1);
|
||||
|
||||
int i;
|
||||
for (i = 0; i < rows; i++)
|
||||
{
|
||||
if (dynamic_cast<RimCellRangeFilterCollection*>(parentItem->dataObject().p()))
|
||||
{
|
||||
RimCellRangeFilterCollection* rangeFilterCollection = dynamic_cast<RimCellRangeFilterCollection*>(parentItem->dataObject().p());
|
||||
|
||||
RimCellRangeFilter* rangeFilter = rangeFilterCollection->createAndAppendRangeFilter();
|
||||
|
||||
caf::PdmUiTreeItem* childItem = new caf::PdmUiTreeItem(parentItem, position + i, rangeFilter);
|
||||
}
|
||||
else if (dynamic_cast<RimCellPropertyFilterCollection*>(parentItem->dataObject().p()))
|
||||
{
|
||||
RimCellPropertyFilterCollection* propertyFilterCollection = dynamic_cast<RimCellPropertyFilterCollection*>(parentItem->dataObject().p());
|
||||
|
||||
RimCellPropertyFilter* propertyFilter = propertyFilterCollection->createAndAppendPropertyFilter();
|
||||
|
||||
caf::PdmUiTreeItem* childItem = new caf::PdmUiTreeItem(parentItem, position + i, propertyFilter);
|
||||
}
|
||||
|
||||
}
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
return canCreateChildren;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -203,26 +151,26 @@ bool RimUiTreeModelPdm::deleteRangeFilter(const QModelIndex& itemIndex)
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimUiTreeModelPdm::deleteReservoirView(const QModelIndex& itemIndex)
|
||||
void RimUiTreeModelPdm::deleteReservoirViews(const std::vector<caf::PdmUiItem*>& treeSelection)
|
||||
{
|
||||
CVF_ASSERT(itemIndex.isValid());
|
||||
std::set<RimCase*> ownerCases;
|
||||
|
||||
caf::PdmUiTreeItem* uiItem = getTreeItemFromIndex(itemIndex);
|
||||
CVF_ASSERT(uiItem);
|
||||
for (size_t sIdx = 0; sIdx < treeSelection.size(); ++sIdx)
|
||||
{
|
||||
RimView* reservoirView = dynamic_cast<RimView*>(treeSelection[sIdx]);
|
||||
ownerCases.insert(reservoirView->ownerCase());
|
||||
|
||||
RimReservoirView* reservoirView = dynamic_cast<RimReservoirView*>(uiItem->dataObject().p());
|
||||
CVF_ASSERT(reservoirView);
|
||||
reservoirView->removeFromParentFields();
|
||||
delete reservoirView;
|
||||
|
||||
// Remove Ui items pointing at the pdm object to delete
|
||||
removeRows_special(itemIndex.row(), 1, itemIndex.parent()); // To be deleted
|
||||
}
|
||||
|
||||
reservoirView->eclipseCase()->removeReservoirView(reservoirView);
|
||||
delete reservoirView;
|
||||
for (std::set<RimCase*>::iterator it = ownerCases.begin(); it != ownerCases.end(); ++it)
|
||||
{
|
||||
updateUiSubTree(*it);
|
||||
}
|
||||
|
||||
// updateUiSubTree(reservoirView->eclipseCase()); // To be enabled
|
||||
clearClipboard();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -378,50 +326,42 @@ RimCellRangeFilter* RimUiTreeModelPdm::addRangeFilter(const QModelIndex& itemInd
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimReservoirView* RimUiTreeModelPdm::addReservoirView(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex)
|
||||
RimView* RimUiTreeModelPdm::addReservoirView(const std::vector<caf::PdmUiItem*>& treeSelection)
|
||||
{
|
||||
caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex);
|
||||
if (!currentItem) return NULL;
|
||||
if (!treeSelection.size() || treeSelection[0] == NULL) return NULL;
|
||||
|
||||
caf::PdmUiTreeItem* collectionItem = NULL;
|
||||
caf::PdmUiItem* currentItem = treeSelection[0];
|
||||
|
||||
bool itemIndexIsCollection = false;
|
||||
QModelIndex collectionIndex;
|
||||
int position = 0;
|
||||
if (dynamic_cast<RimReservoirView*>(currentItem->dataObject().p()))
|
||||
// Establish type of selected object
|
||||
RimEclipseCase* eclipseCase = dynamic_cast<RimEclipseCase*>(currentItem);
|
||||
RimGeoMechCase* geomCase = dynamic_cast<RimGeoMechCase*>(currentItem);
|
||||
RimGeoMechView* geoMechView = dynamic_cast<RimGeoMechView*>(currentItem);
|
||||
RimReservoirView* reservoirView = dynamic_cast<RimReservoirView*>(currentItem);
|
||||
|
||||
// Find case to insert into
|
||||
|
||||
if (geoMechView) geomCase = geoMechView->geoMechCase();
|
||||
if (reservoirView) eclipseCase = reservoirView->eclipseCase();
|
||||
|
||||
RimView* insertedView = NULL;
|
||||
|
||||
if (eclipseCase)
|
||||
{
|
||||
collectionItem = currentItem->parent();
|
||||
collectionIndex = itemIndex.parent();
|
||||
position = itemIndex.row();
|
||||
insertedView = eclipseCase->createAndAddReservoirView();
|
||||
}
|
||||
else if (dynamic_cast<RimEclipseCase*>(currentItem->dataObject().p()))
|
||||
else if (geomCase)
|
||||
{
|
||||
collectionItem = currentItem;
|
||||
collectionIndex = itemIndex;
|
||||
position = collectionItem->childCount();
|
||||
insertedView = geomCase->createAndAddReservoirView();
|
||||
}
|
||||
|
||||
if (collectionItem)
|
||||
{
|
||||
RimEclipseCase* rimReservoir = dynamic_cast<RimEclipseCase*>(collectionItem->dataObject().p());
|
||||
RimReservoirView* insertedView = rimReservoir->createAndAddReservoirView();
|
||||
// Must be run before buildViewItems, as wells are created in this function
|
||||
|
||||
// Must be run before buildViewItems, as wells are created in this function
|
||||
insertedView->loadDataAndUpdate();
|
||||
insertedView->loadDataAndUpdate();
|
||||
|
||||
beginInsertRows(collectionIndex, position, position);
|
||||
if (eclipseCase ) this->updateUiSubTree(eclipseCase);
|
||||
if (geomCase ) this->updateUiSubTree(geomCase);
|
||||
|
||||
// NOTE: -1 as second argument indicates append
|
||||
caf::PdmUiTreeItem* childItem = caf::UiTreeItemBuilderPdm::buildViewItems(collectionItem, position, insertedView);
|
||||
|
||||
endInsertRows();
|
||||
|
||||
insertedModelIndex = index(position, 0, collectionIndex);
|
||||
|
||||
return insertedView;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return insertedView;
|
||||
}
|
||||
|
||||
|
||||
|
@ -35,6 +35,8 @@ class RimInputProperty;
|
||||
class RimStatisticsCase;
|
||||
class RimIdenticalGridCaseGroup;
|
||||
|
||||
class RimView;
|
||||
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
@ -47,21 +49,20 @@ class RimUiTreeModelPdm : public caf::UiTreeModelPdm
|
||||
public:
|
||||
RimUiTreeModelPdm(QObject* parent);
|
||||
|
||||
|
||||
// TO BE DELETED, NOT USED
|
||||
virtual bool insertRows_special(int position, int rows, const QModelIndex &parent = QModelIndex());
|
||||
|
||||
// Special edit methods
|
||||
bool deleteRangeFilter(const QModelIndex& itemIndex);
|
||||
bool deletePropertyFilter(const QModelIndex& itemIndex);
|
||||
bool deleteReservoirView(const QModelIndex& itemIndex);
|
||||
|
||||
void deleteInputProperty(const QModelIndex& itemIndex);
|
||||
void deleteReservoir(RimEclipseCase* reservoir);
|
||||
void deleteAllWellPaths(const QModelIndex& itemIndex);
|
||||
|
||||
RimCellPropertyFilter* addPropertyFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex);
|
||||
RimCellRangeFilter* addRangeFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex);
|
||||
RimReservoirView* addReservoirView(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex);
|
||||
|
||||
RimView* addReservoirView(const std::vector<caf::PdmUiItem*>& treeSelection);
|
||||
void deleteReservoirViews(const std::vector<caf::PdmUiItem*>& treeSelection);
|
||||
|
||||
void addInputProperty(const QModelIndex& itemIndex, const QStringList& fileNames);
|
||||
|
||||
void addToParentAndBuildUiItems(caf::PdmUiTreeItem* parentTreeItem, int position, caf::PdmObject* pdmObject);
|
||||
|
@ -68,6 +68,8 @@
|
||||
#include "RimAnalysisModels.h"
|
||||
#include "RimInputProperty.h"
|
||||
#include "RigSingleWellResultsData.h"
|
||||
#include "RimGeoMechView.h"
|
||||
#include "RimGeoMechCase.h"
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -114,8 +116,14 @@ void RimUiTreeView::contextMenuEvent(QContextMenuEvent* event)
|
||||
{
|
||||
QMenu menu;
|
||||
|
||||
// Range filters
|
||||
if (dynamic_cast<RimReservoirView*>(uiItem->dataObject().p()))
|
||||
if (dynamic_cast<RimGeoMechView*>(uiItem->dataObject().p()))
|
||||
{
|
||||
menu.addAction(QString("New View"), this, SLOT(slotAddView()));
|
||||
//menu.addAction(QString("Copy View"), this, SLOT(slotCopyPdmObjectToClipboard()));
|
||||
//menu.addAction(m_pasteAction);
|
||||
menu.addAction(QString("Delete"), this, SLOT(slotDeleteView()));
|
||||
}
|
||||
else if (dynamic_cast<RimReservoirView*>(uiItem->dataObject().p()))
|
||||
{
|
||||
menu.addAction(QString("New View"), this, SLOT(slotAddView()));
|
||||
menu.addAction(QString("Copy View"), this, SLOT(slotCopyPdmObjectToClipboard()));
|
||||
@ -193,6 +201,10 @@ void RimUiTreeView::contextMenuEvent(QContextMenuEvent* event)
|
||||
menu.addAction(QString("Compute"), this, SLOT(slotComputeStatistics()));
|
||||
menu.addAction(QString("Close"), this, SLOT(slotCloseCase()));
|
||||
}
|
||||
else if (dynamic_cast<RimGeoMechCase*>(uiItem->dataObject().p()))
|
||||
{
|
||||
menu.addAction(QString("New View"), this, SLOT(slotAddView()));
|
||||
}
|
||||
else if (dynamic_cast<RimEclipseCase*>(uiItem->dataObject().p()))
|
||||
{
|
||||
menu.addAction(QString("Copy"), this, SLOT(slotCopyPdmObjectToClipboard()));
|
||||
@ -628,12 +640,12 @@ void RimUiTreeView::slotExecuteScriptForSelectedCases()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimUiTreeView::slotAddView()
|
||||
{
|
||||
QModelIndex index = currentIndex();
|
||||
RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model());
|
||||
caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex());
|
||||
std::vector<caf::PdmUiItem*> selection;
|
||||
this->selectedUiItems(selection);
|
||||
|
||||
QModelIndex insertedIndex;
|
||||
myModel->addReservoirView(index, insertedIndex);
|
||||
RimView* newView = myModel->addReservoirView(selection);
|
||||
QModelIndex insertedIndex = myModel->getModelIndexFromPdmObject(newView);
|
||||
|
||||
// Expand parent collection and inserted view item
|
||||
setExpandedUpToRoot(insertedIndex);
|
||||
@ -647,13 +659,12 @@ void RimUiTreeView::slotAddView()
|
||||
void RimUiTreeView::slotDeleteView()
|
||||
{
|
||||
RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model());
|
||||
if (myModel)
|
||||
{
|
||||
myModel->deleteReservoirView(currentIndex());
|
||||
std::vector<caf::PdmUiItem*> selection;
|
||||
this->selectedUiItems(selection);
|
||||
myModel->deleteReservoirViews(selection);
|
||||
|
||||
RiaApplication* app = RiaApplication::instance();
|
||||
app->setActiveReservoirView(NULL);
|
||||
}
|
||||
RiaApplication* app = RiaApplication::instance();
|
||||
app->setActiveReservoirView(NULL);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -1587,3 +1598,21 @@ void RimUiTreeView::slotDeleteAllWellPaths()
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimUiTreeView::selectedUiItems(std::vector<caf::PdmUiItem*>& objects)
|
||||
{
|
||||
RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model());
|
||||
QModelIndexList idxList = this->selectionModel()->selectedIndexes();
|
||||
|
||||
for (int i = 0; i < idxList.size(); i++)
|
||||
{
|
||||
caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(idxList[i]);
|
||||
if (uiItem)
|
||||
{
|
||||
caf::PdmUiItem* item = uiItem->dataObject();
|
||||
objects.push_back(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -44,6 +44,9 @@ public:
|
||||
|
||||
virtual void setModel(QAbstractItemModel* model);
|
||||
|
||||
void selectedUiItems(std::vector<caf::PdmUiItem*>& objects);
|
||||
|
||||
|
||||
void applyTreeViewStateFromString(const QString& treeViewState);
|
||||
void storeTreeViewStateToString(QString& treeViewState);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user