From 21691ec7f07b6f5c3b97edcf99970c09e4604c99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Hagen?= Date: Mon, 24 Aug 2015 17:31:20 +0200 Subject: [PATCH] (#355) Removed source code files for old project tree view --- .../ProjectDataModel/RimScriptCollection.cpp | 1 - .../ProjectDataModel/RimUiTreeModelPdm.cpp | 1206 ------------- .../ProjectDataModel/RimUiTreeModelPdm.h | 103 -- .../ProjectDataModel/RimUiTreeView.cpp | 1575 ----------------- .../ProjectDataModel/RimUiTreeView.h | 139 -- 5 files changed, 3024 deletions(-) delete mode 100644 ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp delete mode 100644 ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h delete mode 100644 ApplicationCode/ProjectDataModel/RimUiTreeView.cpp delete mode 100644 ApplicationCode/ProjectDataModel/RimUiTreeView.h diff --git a/ApplicationCode/ProjectDataModel/RimScriptCollection.cpp b/ApplicationCode/ProjectDataModel/RimScriptCollection.cpp index c49fd82e55..04908c574c 100644 --- a/ApplicationCode/ProjectDataModel/RimScriptCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimScriptCollection.cpp @@ -21,7 +21,6 @@ #include "RimScriptCollection.h" #include "RimCalcScript.h" -#include "RimUiTreeModelPdm.h" #include "RiuMainWindow.h" #include "cafPdmUiFilePathEditor.h" diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp b/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp deleted file mode 100644 index 00587b8ca2..0000000000 --- a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp +++ /dev/null @@ -1,1206 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2011- Statoil ASA -// Copyright (C) 2013- Ceetron Solutions AS -// Copyright (C) 2011-2012 Ceetron AS -// -// ResInsight is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. -// -// See the GNU General Public License at -// for more details. -// -///////////////////////////////////////////////////////////////////////////////// - -#include "RimUiTreeModelPdm.h" - -#include "RiaApplication.h" -#include "RigGridManager.h" -#include "RimCaseCollection.h" -#include "RimCellRangeFilterCollection.h" -#include "RimEclipseCase.h" -#include "RimEclipseCaseCollection.h" -#include "RimEclipseInputCase.h" -#include "RimEclipseInputProperty.h" -#include "RimEclipseInputPropertyCollection.h" -#include "RimEclipsePropertyFilterCollection.h" -#include "RimEclipseResultCase.h" -#include "RimEclipseStatisticsCase.h" -#include "RimEclipseView.h" -#include "RimEclipseWellCollection.h" -#include "RimGeoMechCase.h" -#include "RimGeoMechPropertyFilter.h" -#include "RimGeoMechPropertyFilterCollection.h" -#include "RimGeoMechView.h" -#include "RimIdenticalGridCaseGroup.h" -#include "RimMimeData.h" -#include "RimOilField.h" -#include "RimProject.h" -#include "RimScriptCollection.h" -#include "RimUiTreeView.h" -#include "RimWellPathCollection.h" - -#include "cafPdmObjectGroup.h" -#include "cvfAssert.h" - -#include -#include - - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimUiTreeModelPdm::RimUiTreeModelPdm(QObject* parent) - : caf::UiTreeModelPdm(parent) -{ - m_scriptChangeDetector = new QFileSystemWatcher(this); - this->updateScriptPaths(); - connect(m_scriptChangeDetector, SIGNAL(directoryChanged(QString)), this, SLOT(slotRefreshScriptTree(QString))); - connect(m_scriptChangeDetector, SIGNAL(fileChanged(QString)), this, SLOT(slotRefreshScriptTree(QString))); -} - - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimUiTreeModelPdm::deletePropertyFilter(const QModelIndex& itemIndex) -{ - CVF_ASSERT(itemIndex.isValid()); - - caf::PdmUiTreeItem* uiItem = getTreeItemFromIndex(itemIndex); - CVF_ASSERT(uiItem); - - RimEclipsePropertyFilter* propertyFilter = dynamic_cast(uiItem->dataObject().p()); - CVF_ASSERT(propertyFilter); - - RimEclipsePropertyFilterCollection* propertyFilterCollection = propertyFilter->parentContainer(); - CVF_ASSERT(propertyFilterCollection); - - bool wasFilterActive = propertyFilter->isActive(); - bool wasSomeFilterActive = propertyFilterCollection->hasActiveFilters(); - - // Remove Ui items pointing at the pdm object to delete - removeRows_special(itemIndex.row(), 1, itemIndex.parent()); // To be deleted - - propertyFilterCollection->remove(propertyFilter); - delete propertyFilter; - - // updateUiSubTree(propertyFilterCollection); // To be enabled - propertyFilterCollection->updateConnectedEditors(); - - if (wasFilterActive) - { - propertyFilterCollection->reservoirView()->scheduleGeometryRegen(PROPERTY_FILTERED); - } - - if (wasSomeFilterActive) - { - propertyFilterCollection->reservoirView()->createDisplayModelAndRedraw(); - } - - clearClipboard(); - - return true; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimUiTreeModelPdm::deleteGeoMechPropertyFilter(const QModelIndex& itemIndex) -{ - CVF_ASSERT(itemIndex.isValid()); - - caf::PdmUiTreeItem* uiItem = getTreeItemFromIndex(itemIndex); - CVF_ASSERT(uiItem); - - RimGeoMechPropertyFilter* propertyFilter = dynamic_cast(uiItem->dataObject().p()); - CVF_ASSERT(propertyFilter); - - RimGeoMechPropertyFilterCollection* propertyFilterCollection = propertyFilter->parentContainer(); - CVF_ASSERT(propertyFilterCollection); - - bool wasFilterActive = propertyFilter->isActive(); - bool wasSomeFilterActive = propertyFilterCollection->hasActiveFilters(); - - // Remove Ui items pointing at the pdm object to delete - removeRows_special(itemIndex.row(), 1, itemIndex.parent()); // To be deleted - - propertyFilterCollection->remove(propertyFilter); - delete propertyFilter; - - // updateUiSubTree(propertyFilterCollection); // To be enabled - propertyFilterCollection->updateConnectedEditors(); - - if (wasFilterActive) - { - propertyFilterCollection->reservoirView()->scheduleGeometryRegen(PROPERTY_FILTERED); - } - - if (wasSomeFilterActive) - { - propertyFilterCollection->reservoirView()->createDisplayModelAndRedraw(); - } - - clearClipboard(); - - return true; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimUiTreeModelPdm::deleteRangeFilter(const QModelIndex& itemIndex) -{ - CVF_ASSERT(itemIndex.isValid()); - - caf::PdmUiTreeItem* uiItem = getTreeItemFromIndex(itemIndex); - CVF_ASSERT(uiItem); - - RimCellRangeFilter* rangeFilter = dynamic_cast(uiItem->dataObject().p()); - CVF_ASSERT(rangeFilter); - - RimCellRangeFilterCollection* rangeFilterCollection = rangeFilter->parentContainer(); - CVF_ASSERT(rangeFilterCollection); - - bool wasFilterActive = rangeFilter->isActive(); - bool wasSomeFilterActive = rangeFilterCollection->hasActiveFilters(); - - // Remove Ui items pointing at the pdm object to delete - removeRows_special(itemIndex.row(), 1, itemIndex.parent()); // To be deleted - - rangeFilterCollection->remove(rangeFilter); - delete rangeFilter; - - // updateUiSubTree(rangeFilterCollection); // To be enabled - rangeFilterCollection->updateConnectedEditors(); - - if (wasFilterActive) - { - rangeFilterCollection->reservoirView()->scheduleGeometryRegen(PROPERTY_FILTERED); - } - - if (wasSomeFilterActive) - { - rangeFilterCollection->reservoirView()->createDisplayModelAndRedraw(); - } - - clearClipboard(); - - return true; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::deleteReservoirViews(const std::vector& treeSelection) -{ - std::set ownerCases; - - for (size_t sIdx = 0; sIdx < treeSelection.size(); ++sIdx) - { - RimView* reservoirView = dynamic_cast(treeSelection[sIdx]); - ownerCases.insert(reservoirView->ownerCase()); - - reservoirView->parentField()->removeChildObject(reservoirView); - delete reservoirView; - - } - - for (std::set::iterator it = ownerCases.begin(); it != ownerCases.end(); ++it) - { - updateUiSubTree(*it); - (*it)->updateConnectedEditors(); - } - - clearClipboard(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::deleteGeoMechCases(const std::vector& treeSelection) -{ - std::set allParents; - - for (size_t sIdx = 0; sIdx < treeSelection.size(); ++sIdx) - { - RimGeoMechCase* geomCase = dynamic_cast(treeSelection[sIdx]); - if (!geomCase) continue; - - allParents.insert(geomCase->parentField()->ownerObject()); - - geomCase->parentField()->removeChildObject(geomCase); - - delete geomCase; - } - - for (std::set::iterator it = allParents.begin(); it != allParents.end(); ++it) - { - updateUiSubTree(*it); - (*it)->uiCapability()->updateConnectedEditors(); - } - - clearClipboard(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::deleteReservoir(RimEclipseCase* reservoir) -{ - if (reservoir->parentCaseCollection()) - { - RimCaseCollection* caseCollection = reservoir->parentCaseCollection(); - QModelIndex caseCollectionModelIndex = getModelIndexFromPdmObject(caseCollection); - if (!caseCollectionModelIndex.isValid()) return; - - QModelIndex mi = getModelIndexFromPdmObjectRecursive(caseCollectionModelIndex, reservoir); - if (mi.isValid()) - { - caf::PdmUiTreeItem* uiItem = getTreeItemFromIndex(mi); - CVF_ASSERT(uiItem); - - // Remove Ui items pointing at the pdm object to delete - removeRows_special(mi.row(), 1, mi.parent()); - } - - if (RimIdenticalGridCaseGroup::isStatisticsCaseCollection(caseCollection)) - { - RimIdenticalGridCaseGroup* caseGroup = caseCollection->parentCaseGroup(); - CVF_ASSERT(caseGroup); - - caseGroup->statisticsCaseCollection()->reservoirs.removeChildObject(reservoir); - } - else - { - RimProject* proj = RiaApplication::instance()->project(); - RimOilField* activeOilField = proj ? proj->activeOilField() : NULL; - RimEclipseCaseCollection* analysisModels = (activeOilField) ? activeOilField->analysisModels() : NULL; - if (analysisModels) analysisModels->removeCaseFromAllGroups(reservoir); - } - } - else - { - RimProject* proj = RiaApplication::instance()->project(); - QModelIndex mi = getModelIndexFromPdmObject(reservoir); - if (mi.isValid()) - { - caf::PdmUiTreeItem* uiItem = getTreeItemFromIndex(mi); - CVF_ASSERT(uiItem); - - // Remove Ui items pointing at the pdm object to delete - removeRows_special(mi.row(), 1, mi.parent()); - } - - RimOilField* activeOilField = proj ? proj->activeOilField() : NULL; - RimEclipseCaseCollection* analysisModels = (activeOilField) ? activeOilField->analysisModels() : NULL; - if (analysisModels) analysisModels->removeCaseFromAllGroups(reservoir); - } - - delete reservoir; - - clearClipboard(); -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimEclipsePropertyFilter* RimUiTreeModelPdm::addPropertyFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex) -{ - caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex); - - QModelIndex collectionIndex; - RimEclipsePropertyFilterCollection* propertyFilterCollection = NULL; - caf::PdmUiTreeItem* propertyFilterCollectionItem = NULL; - int position = 0; - - if (dynamic_cast(currentItem->dataObject().p())) - { - RimEclipsePropertyFilter* propertyFilter = dynamic_cast(currentItem->dataObject().p()); - propertyFilterCollection = propertyFilter->parentContainer(); - propertyFilterCollectionItem = currentItem->parent(); - position = itemIndex.row(); - collectionIndex = itemIndex.parent(); - } - else if (dynamic_cast(currentItem->dataObject().p())) - { - propertyFilterCollection = dynamic_cast(currentItem->dataObject().p()); - propertyFilterCollectionItem = currentItem; - position = propertyFilterCollectionItem->childCount(); - collectionIndex = itemIndex; - } - - beginInsertRows(collectionIndex, position, position); - - RimEclipsePropertyFilter* propertyFilter = propertyFilterCollection->createAndAppendPropertyFilter(); - caf::PdmUiTreeItem* childItem = new caf::PdmUiTreeItem(propertyFilterCollectionItem, position, propertyFilter); - - endInsertRows(); - - insertedModelIndex = index(position, 0, collectionIndex); - - if (propertyFilterCollection) - { - propertyFilterCollection->reservoirView()->scheduleGeometryRegen(PROPERTY_FILTERED); - } - - return propertyFilter; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimGeoMechPropertyFilter* RimUiTreeModelPdm::addGeoMechPropertyFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex) -{ - caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex); - - QModelIndex collectionIndex; - RimGeoMechPropertyFilterCollection* propertyFilterCollection = NULL; - caf::PdmUiTreeItem* propertyFilterCollectionItem = NULL; - int position = 0; - - if (dynamic_cast(currentItem->dataObject().p())) - { - RimGeoMechPropertyFilter* propertyFilter = dynamic_cast(currentItem->dataObject().p()); - propertyFilterCollection = propertyFilter->parentContainer(); - propertyFilterCollectionItem = currentItem->parent(); - position = itemIndex.row(); - collectionIndex = itemIndex.parent(); - } - else if (dynamic_cast(currentItem->dataObject().p())) - { - propertyFilterCollection = dynamic_cast(currentItem->dataObject().p()); - propertyFilterCollectionItem = currentItem; - position = propertyFilterCollectionItem->childCount(); - collectionIndex = itemIndex; - } - - beginInsertRows(collectionIndex, position, position); - - RimGeoMechPropertyFilter* propertyFilter = propertyFilterCollection->createAndAppendPropertyFilter(); - caf::PdmUiTreeItem* childItem = new caf::PdmUiTreeItem(propertyFilterCollectionItem, position, propertyFilter); - - endInsertRows(); - - insertedModelIndex = index(position, 0, collectionIndex); - - if (propertyFilterCollection) - { - static_cast(propertyFilterCollection->reservoirView())->scheduleGeometryRegen(PROPERTY_FILTERED); - } - - return propertyFilter; -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimCellRangeFilter* RimUiTreeModelPdm::addRangeFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex) -{ - caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex); - - QModelIndex collectionIndex; - RimCellRangeFilterCollection* rangeFilterCollection = NULL; - caf::PdmUiTreeItem* rangeFilterCollectionItem = NULL; - int position = 0; - - if (dynamic_cast(currentItem->dataObject().p())) - { - RimCellRangeFilter* rangeFilter = dynamic_cast(currentItem->dataObject().p()); - rangeFilterCollection = rangeFilter->parentContainer(); - rangeFilterCollectionItem = currentItem->parent(); - position = itemIndex.row(); - collectionIndex = itemIndex.parent(); - } - else if (dynamic_cast(currentItem->dataObject().p())) - { - rangeFilterCollection = dynamic_cast(currentItem->dataObject().p()); - rangeFilterCollectionItem = currentItem; - position = rangeFilterCollectionItem->childCount(); - collectionIndex = itemIndex; - } - - beginInsertRows(collectionIndex, position, position); - - RimCellRangeFilter* rangeFilter = rangeFilterCollection->createAndAppendRangeFilter(); - caf::PdmUiTreeItem* childItem = new caf::PdmUiTreeItem(rangeFilterCollectionItem, position, rangeFilter); - - endInsertRows(); - - insertedModelIndex = index(position, 0, collectionIndex); - if (rangeFilterCollection) - { - rangeFilterCollection->reservoirView()->scheduleGeometryRegen(RANGE_FILTERED); - rangeFilterCollection->reservoirView()->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE); - - } - return rangeFilter; -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimView* RimUiTreeModelPdm::addReservoirView(const std::vector& treeSelection) -{ - if (!treeSelection.size() || treeSelection[0] == NULL) return NULL; - - caf::PdmUiItem* currentItem = treeSelection[0]; - - // Establish type of selected object - RimEclipseCase* eclipseCase = dynamic_cast(currentItem); - RimGeoMechCase* geomCase = dynamic_cast(currentItem); - RimGeoMechView* geoMechView = dynamic_cast(currentItem); - RimEclipseView* reservoirView = dynamic_cast(currentItem); - - // Find case to insert into - - if (geoMechView) geomCase = geoMechView->geoMechCase(); - if (reservoirView) eclipseCase = reservoirView->eclipseCase(); - - RimView* insertedView = NULL; - - if (eclipseCase) - { - insertedView = eclipseCase->createAndAddReservoirView(); - } - else if (geomCase) - { - insertedView = geomCase->createAndAddReservoirView(); - } - - // Must be run before buildViewItems, as wells are created in this function - - insertedView->loadDataAndUpdate(); - - if (eclipseCase ){ this->updateUiSubTree(eclipseCase); eclipseCase->updateConnectedEditors();} - if (geomCase ) { this->updateUiSubTree(geomCase); geomCase->updateConnectedEditors();} - - return insertedView; -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::updateScriptPaths() -{ - RimProject* proj = RiaApplication::instance()->project(); - - if (!proj || !proj->scriptCollection()) return; - - QStringList paths; - - proj->scriptCollection()->pathsAndSubPaths(paths); - - if (m_scriptChangeDetector->directories().size()) m_scriptChangeDetector->removePaths( m_scriptChangeDetector->directories()); - if (m_scriptChangeDetector->files().size()) m_scriptChangeDetector->removePaths( m_scriptChangeDetector->files()); - - if (paths.size()) m_scriptChangeDetector->addPaths(paths); -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::slotRefreshScriptTree(QString path) -{ - RimProject* proj = RiaApplication::instance()->project(); - - if (!proj || !proj->scriptCollection()) return; - - RimScriptCollection* changedSColl = proj->scriptCollection()->findScriptCollection(path); - if (changedSColl) - { - changedSColl->readContentFromDisc(); - this->updateUiSubTree(changedSColl); - changedSColl->updateConnectedEditors(); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::addInputProperty(const QModelIndex& itemIndex, const QStringList& fileNames) -{ - caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex); - - RimEclipseInputPropertyCollection* inputPropertyCollection = dynamic_cast(currentItem->dataObject().p()); - CVF_ASSERT(inputPropertyCollection); - - - - RimEclipseInputCase* inputReservoir = dynamic_cast(inputPropertyCollection->parentField()->ownerObject()); - CVF_ASSERT(inputReservoir); - if (inputReservoir) - { - inputReservoir->openDataFileSet(fileNames); - } - - this->updateUiSubTree(inputPropertyCollection); - inputPropertyCollection->updateConnectedEditors(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::deleteInputProperty(const QModelIndex& itemIndex) -{ - if (!itemIndex.isValid()) return; - - caf::PdmUiTreeItem* uiItem = getTreeItemFromIndex(itemIndex); - if (!uiItem) return; - - caf::PdmObjectHandle* object = uiItem->dataObject().p(); - RimEclipseInputProperty* inputProperty = dynamic_cast(object); - if (!inputProperty) return; - - // Remove item from UI tree model before delete of project data structure - removeRows_special(itemIndex.row(), 1, itemIndex.parent()); - - RimEclipseInputPropertyCollection* inputPropertyCollection = dynamic_cast(object->parentField()->ownerObject()); - if (!inputPropertyCollection) return; - - RimEclipseInputCase* inputReservoir = dynamic_cast(inputPropertyCollection->parentField()->ownerObject()); - if (!inputReservoir) return; - - inputReservoir->removeProperty(inputProperty); - - delete inputProperty; - - clearClipboard(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimEclipseStatisticsCase* RimUiTreeModelPdm::addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex) -{ - caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex); - - QModelIndex collectionIndex; - RimIdenticalGridCaseGroup* caseGroup = NULL; - caf::PdmUiTreeItem* parentCollectionItem = NULL; - int position = 0; - - if (dynamic_cast(currentItem->dataObject().p())) - { - RimEclipseStatisticsCase* currentObject = dynamic_cast(currentItem->dataObject().p()); - caseGroup = currentObject->parentStatisticsCaseCollection()->parentCaseGroup(); - parentCollectionItem = currentItem->parent(); - position = itemIndex.row(); - collectionIndex = itemIndex.parent(); - } - else if (dynamic_cast(currentItem->dataObject().p())) - { - RimCaseCollection* statColl = dynamic_cast(currentItem->dataObject().p()); - caseGroup = statColl->parentCaseGroup(); - parentCollectionItem = currentItem; - position = parentCollectionItem->childCount(); - collectionIndex = itemIndex; - } - - if (parentCollectionItem && caseGroup) - { - beginInsertRows(collectionIndex, position, position); - - RimProject* proj = RiaApplication::instance()->project(); - RimEclipseStatisticsCase* createdObject = caseGroup->createAndAppendStatisticsCase(); - proj->assignCaseIdToCase(createdObject); - - caf::PdmUiTreeItem* childItem = new caf::PdmUiTreeItem(parentCollectionItem, position, createdObject); - - endInsertRows(); - - insertedModelIndex = index(position, 0, collectionIndex); - - return createdObject; - } - else - { - return NULL; - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimIdenticalGridCaseGroup* RimUiTreeModelPdm::addCaseGroup(QModelIndex& insertedModelIndex) -{ - RimProject* proj = RiaApplication::instance()->project(); - CVF_ASSERT(proj); - - RimEclipseCaseCollection* analysisModels = proj->activeOilField() ? proj->activeOilField()->analysisModels() : NULL; - - if (analysisModels) - { - RimIdenticalGridCaseGroup* createdObject = new RimIdenticalGridCaseGroup; - proj->assignIdToCaseGroup(createdObject); - - RimEclipseCase* createdReservoir = createdObject->createAndAppendStatisticsCase(); - proj->assignCaseIdToCase(createdReservoir); - createdObject->name = QString("Grid Case Group %1").arg(analysisModels->caseGroups().size() + 1); - - analysisModels->caseGroups().push_back(createdObject); - - this->updateUiSubTree(analysisModels); - analysisModels->updateConnectedEditors(); - insertedModelIndex = getModelIndexFromPdmObject(createdObject); - - return createdObject; - } - else - { - return NULL; - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::addObjects(const QModelIndex& itemIndex, const caf::PdmObjectGroup& pdmObjects) -{ - RimProject* proj = RiaApplication::instance()->project(); - CVF_ASSERT(proj); - - RimIdenticalGridCaseGroup* gridCaseGroup = gridCaseGroupFromItemIndex(itemIndex); - if (gridCaseGroup) - { - std::vector > typedObjects; - pdmObjects.createCopyByType(&typedObjects, caf::PdmDefaultObjectFactory::instance()); - - if (typedObjects.size() == 0) - { - return; - } - - RimEclipseResultCase* mainResultCase = NULL; - std::vector< std::vector > mainCaseGridDimensions; - - // Read out main grid and main grid dimensions if present in case group - if (gridCaseGroup->mainCase()) - { - mainResultCase = dynamic_cast(gridCaseGroup->mainCase()); - CVF_ASSERT(mainResultCase); - - mainResultCase->readGridDimensions(mainCaseGridDimensions); - } - - std::vector insertedCases; - - // Add cases to case group - for (size_t i = 0; i < typedObjects.size(); i++) - { - RimEclipseResultCase* rimResultReservoir = typedObjects[i]; - - proj->assignCaseIdToCase(rimResultReservoir); - - if (gridCaseGroup->contains(rimResultReservoir)) - { - continue; - } - - insertedCases.push_back(rimResultReservoir); - } - - // Initialize the new objects - for (size_t i = 0; i < insertedCases.size(); i++) - { - RimEclipseResultCase* rimResultReservoir = insertedCases[i]; - caf::PdmDocument::initAfterReadTraversal(rimResultReservoir); - } - - // Load stuff - for (size_t i = 0; i < insertedCases.size(); i++) - { - RimEclipseResultCase* rimResultReservoir = insertedCases[i]; - - - if (!mainResultCase) - { - rimResultReservoir->openEclipseGridFile(); - rimResultReservoir->readGridDimensions(mainCaseGridDimensions); - - mainResultCase = rimResultReservoir; - } - else - { - std::vector< std::vector > caseGridDimensions; - rimResultReservoir->readGridDimensions(caseGridDimensions); - - bool identicalGrid = RigGridManager::isGridDimensionsEqual(mainCaseGridDimensions, caseGridDimensions); - if (!identicalGrid) - { - continue; - } - - if (!rimResultReservoir->openAndReadActiveCellData(mainResultCase->reservoirData())) - { - CVF_ASSERT(false); - } - } - - RimOilField* activeOilField = proj ? proj->activeOilField() : NULL; - RimEclipseCaseCollection* analysisModels = (activeOilField) ? activeOilField->analysisModels() : NULL; - if (analysisModels) analysisModels->insertCaseInCaseGroup(gridCaseGroup, rimResultReservoir); - - caf::PdmDocument::updateUiIconStateRecursively(rimResultReservoir); - - { - QModelIndex rootIndex = getModelIndexFromPdmObject(gridCaseGroup->caseCollection()); - caf::PdmUiTreeItem* caseCollectionUiItem = getTreeItemFromIndex(rootIndex); - - int position = rowCount(rootIndex); - beginInsertRows(rootIndex, position, position); - caf::PdmUiTreeItem* childItem = caf::UiTreeItemBuilderPdm::buildViewItems(caseCollectionUiItem, -1, rimResultReservoir); - endInsertRows(); - } - - for (size_t rvIdx = 0; rvIdx < rimResultReservoir->reservoirViews.size(); rvIdx++) - { - RimEclipseView* riv = rimResultReservoir->reservoirViews()[rvIdx]; - riv->loadDataAndUpdate(); - } - } - } - else if (caseFromItemIndex(itemIndex)) - { - std::vector > eclipseViews; - pdmObjects.createCopyByType(&eclipseViews, caf::PdmDefaultObjectFactory::instance()); - - if (eclipseViews.size() != 0) - { - RimEclipseCase* rimCase = caseFromItemIndex(itemIndex); - QModelIndex collectionIndex = getModelIndexFromPdmObject(rimCase); - caf::PdmUiTreeItem* collectionItem = getTreeItemFromIndex(collectionIndex); - - // Add cases to case group - for (size_t i = 0; i < eclipseViews.size(); i++) - { - RimEclipseView* rimReservoirView = eclipseViews[i]; - QString nameOfCopy = QString("Copy of ") + rimReservoirView->name; - rimReservoirView->name = nameOfCopy; - rimCase->reservoirViews().push_back(rimReservoirView); - - // Delete all wells to be able to copy/paste between cases, as the wells differ between cases - rimReservoirView->wellCollection()->wells().deleteAllChildObjects(); - - caf::PdmDocument::initAfterReadTraversal(rimReservoirView); - rimReservoirView->setEclipseCase(rimCase); - - caf::PdmDocument::updateUiIconStateRecursively(rimReservoirView); - - rimReservoirView->loadDataAndUpdate(); - - int position = static_cast(rimCase->reservoirViews().size()); - beginInsertRows(collectionIndex, position, position); - - caf::PdmUiTreeItem* childItem = caf::UiTreeItemBuilderPdm::buildViewItems(collectionItem, position, rimReservoirView); - - endInsertRows(); - } - } - } - - caf::PdmObjectHandle* selectedObject = getTreeItemFromIndex(itemIndex)->dataObject().p(); - RimGeoMechCase* geomCase = dynamic_cast(selectedObject); - if (!geomCase && selectedObject) - { - RimGeoMechView* geomView = dynamic_cast(selectedObject); - if (geomView) geomCase = geomView->geoMechCase(); - } - - if (geomCase) - { - std::vector > geomViews; - pdmObjects.createCopyByType(&geomViews, caf::PdmDefaultObjectFactory::instance()); - - if (geomViews.size() != 0) - { - // Add cases to case group - for (size_t i = 0; i < geomViews.size(); i++) - { - RimGeoMechView* rimReservoirView = geomViews[i]; - QString nameOfCopy = QString("Copy of ") + rimReservoirView->name; - rimReservoirView->name = nameOfCopy; - geomCase->geoMechViews().push_back(rimReservoirView); - - caf::PdmDocument::initAfterReadTraversal(rimReservoirView); - rimReservoirView->setGeoMechCase(geomCase); - - caf::PdmDocument::updateUiIconStateRecursively(rimReservoirView); - - rimReservoirView->loadDataAndUpdate(); - - this->updateUiSubTree(geomCase); - geomCase->updateConnectedEditors(); - } - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::moveObjects(const QModelIndex& itemIndex, caf::PdmObjectGroup& pdmObjects) -{ - addObjects(itemIndex, pdmObjects); - - // Delete objects from original container - std::vector > typedObjects; - pdmObjects.objectsByType(&typedObjects); - - for (size_t i = 0; i < typedObjects.size(); i++) - { - RimEclipseCase* rimReservoir = typedObjects[i]; - deleteReservoir(rimReservoir); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimUiTreeModelPdm::deleteObjectFromPdmChildArrayField(const QModelIndex& itemIndex) -{ - if (!itemIndex.isValid()) - { - return false; - } - - caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex); - CVF_ASSERT(currentItem); - - caf::PdmObjectHandle* currentPdmObject = currentItem->dataObject().p(); - CVF_ASSERT(currentPdmObject); - - caf::PdmFieldHandle* parentField = currentPdmObject->parentField(); - - { - beginRemoveRows(itemIndex.parent(), itemIndex.row(), itemIndex.row()); - if (currentItem->parent()) - { - currentItem->parent()->removeChildren(itemIndex.row(), 1); - } - endRemoveRows(); - - caf::PdmChildArrayField* caseGroup = dynamic_cast *>(parentField); - if (caseGroup) - { - caseGroup->removeChildObject(currentPdmObject); - - delete currentPdmObject; - } - } - - clearClipboard(); - - return true; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::clearClipboard() -{ - // We use QModelIndex to identify a selection on the clipboard - // When we delete or move an entity, the clipboard data might be invalid - - QClipboard* clipboard = QApplication::clipboard(); - if (clipboard) - { - if (dynamic_cast(clipboard->mimeData())) - { - clipboard->clear(); - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -Qt::DropActions RimUiTreeModelPdm::supportedDropActions() const -{ - return Qt::CopyAction | Qt::MoveAction; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -Qt::ItemFlags RimUiTreeModelPdm::flags(const QModelIndex &index) const -{ - Qt::ItemFlags defaultFlags = caf::UiTreeModelPdm::flags(index); - if (index.isValid()) - { - caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(index); - CVF_ASSERT(currentItem); - - if (dynamic_cast(currentItem->dataObject().p()) || - dynamic_cast(currentItem->dataObject().p())) - { - return Qt::ItemIsDropEnabled | defaultFlags; - } - else if (dynamic_cast(currentItem->dataObject().p())) - { - // TODO: Remember to handle reservoir holding the main grid - return Qt::ItemIsDragEnabled | defaultFlags; - } - } - - return defaultFlags; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - moved to RiuDragDrop -bool RimUiTreeModelPdm::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) -{ - const MimeDataWithIndexes* myMimeData = qobject_cast(data); - if (myMimeData && parent.isValid()) - { - caf::PdmObjectGroup pog; - - for (int i = 0; i < myMimeData->indexes().size(); i++) - { - QModelIndex mi = myMimeData->indexes().at(i); - caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(mi); - caf::PdmObjectHandle* pdmObj = currentItem->dataObject().p(); - - pog.objects.push_back(pdmObj); - } - - if (action == Qt::CopyAction) - { - addObjects(parent, pog); - } - else if (action == Qt::MoveAction) - { - moveObjects(parent, pog); - } - - return true; - } - - return false; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - moved to RiuDragDrop -QMimeData* RimUiTreeModelPdm::mimeData(const QModelIndexList &indexes) const -{ - MimeDataWithIndexes* myObj = new MimeDataWithIndexes(); - myObj->setIndexes(indexes); - return myObj; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - moved to RiuDragDrop -QStringList RimUiTreeModelPdm::mimeTypes() const -{ - QStringList types; - types << MimeDataWithIndexes::formatName(); - return types; -} - -//-------------------------------------------------------------------------------------------------- -/// Return grid case group when QModelIndex points to grid case group, case collection or case in a grid case group -//-------------------------------------------------------------------------------------------------- -RimIdenticalGridCaseGroup* RimUiTreeModelPdm::gridCaseGroupFromItemIndex(const QModelIndex& itemIndex) -{ - caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex); - - RimIdenticalGridCaseGroup* gridCaseGroup = NULL; - - if (dynamic_cast(currentItem->dataObject().p())) - { - gridCaseGroup = dynamic_cast(currentItem->dataObject().p()); - } - else if (dynamic_cast(currentItem->dataObject().p())) - { - RimCaseCollection* caseCollection = dynamic_cast(currentItem->dataObject().p()); - CVF_ASSERT(caseCollection); - - gridCaseGroup = caseCollection->parentCaseGroup(); - } - else if (dynamic_cast(currentItem->dataObject().p())) - { - RimEclipseCase* rimReservoir = dynamic_cast(currentItem->dataObject().p()); - CVF_ASSERT(rimReservoir); - - RimCaseCollection* caseCollection = rimReservoir->parentCaseCollection(); - if (caseCollection) - { - gridCaseGroup = caseCollection->parentCaseGroup(); - } - } - - return gridCaseGroup; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::addToParentAndBuildUiItems(caf::PdmUiTreeItem* parentTreeItem, int position, caf::PdmObject* pdmObject) -{ - QModelIndex parentModelIndex; - - if (parentTreeItem && parentTreeItem->dataObject()) - { - parentModelIndex = getModelIndexFromPdmObject(parentTreeItem->dataObject()); - } - - beginInsertRows(parentModelIndex, position, position); - - caf::PdmUiTreeItem* childItem = caf::UiTreeItemBuilderPdm::buildViewItems(parentTreeItem, position, pdmObject); - - endInsertRows(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimEclipseCase* RimUiTreeModelPdm::caseFromItemIndex(const QModelIndex& itemIndex) -{ - caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex); - - RimEclipseCase* rimCase = NULL; - - if (dynamic_cast(currentItem->dataObject().p())) - { - rimCase = dynamic_cast(currentItem->dataObject().p()); - } - else if (dynamic_cast(currentItem->dataObject().p())) - { - RimEclipseView* reservoirView = dynamic_cast(currentItem->dataObject().p()); - CVF_ASSERT(reservoirView); - - rimCase = reservoirView->eclipseCase(); - } - - return rimCase; -} - -//-------------------------------------------------------------------------------------------------- -/// Set toggle state for list of model indices. -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::setObjectToggleStateForSelection(QModelIndexList selectedIndexes, int state) -{ - bool toggleOn = (state == Qt::Checked); - - std::set resViewsToUpdate; - - foreach (QModelIndex index, selectedIndexes) - { - if (!index.isValid()) - { - continue; - } - - caf::PdmUiTreeItem* treeItem = UiTreeModelPdm::getTreeItemFromIndex(index); - assert(treeItem); - - caf::PdmObjectHandle* obj = treeItem->dataObject(); - assert(obj); - - caf::PdmUiObjectHandle* uiObjectHandle = uiObj(obj); - assert(uiObjectHandle); - - if (selectedIndexes.size() != 1) - { - if (uiObjectHandle && uiObjectHandle->objectToggleField()) - { - caf::PdmField* field = dynamic_cast* >(uiObjectHandle->objectToggleField()); - - caf::PdmUiFieldHandle* uiFieldHandle = field->uiCapability(); - if (uiFieldHandle) - { - if (state == RimUiTreeView::TOGGLE_ON) uiFieldHandle->setValueFromUi(true); - if (state == RimUiTreeView::TOGGLE_OFF) uiFieldHandle->setValueFromUi(false); - if (state == RimUiTreeView::TOGGLE) uiFieldHandle->setValueFromUi(!(field->v())); - } - } - } - else - { - // If only one item is selected, loop over its children, and toggle them instead of the - // selected item directly - - for (int cIdx = 0; cIdx < treeItem->childCount(); ++ cIdx) - { - caf::PdmUiTreeItem* child = treeItem->child(cIdx); - if (!child) continue; - - caf::PdmObjectHandle* childObj = child->dataObject(); - caf::PdmUiObjectHandle* uiObjectHandleChild = uiObj(obj); - - if (uiObjectHandleChild && uiObjectHandleChild->objectToggleField()) - { - caf::PdmField* field = dynamic_cast* >(uiObjectHandleChild->objectToggleField()); - - caf::PdmUiFieldHandle* uiFieldHandle = field->uiCapability(); - if (uiFieldHandle) - { - if (state == RimUiTreeView::TOGGLE_ON) uiFieldHandle->setValueFromUi(true); - if (state == RimUiTreeView::TOGGLE_OFF) uiFieldHandle->setValueFromUi(false); - if (state == RimUiTreeView::TOGGLE) uiFieldHandle->setValueFromUi(!(field->v())); - } - } - } - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::deleteAllWellPaths(const QModelIndex& itemIndex) -{ - if (!itemIndex.isValid()) return; - - caf::PdmUiTreeItem* uiItem = getTreeItemFromIndex(itemIndex); - if (!uiItem) return; - - caf::PdmObjectHandle* object = uiItem->dataObject().p(); - RimWellPathCollection* wellPathCollection = dynamic_cast(object); - if (!wellPathCollection) return; - - // Remove item from UI tree model before delete of project data structure - removeRows_special(0, uiItem->childCount(), itemIndex); - - wellPathCollection->wellPaths.deleteAllChildObjects(); - - clearClipboard(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeModelPdm::populateObjectGroupFromModelIndexList(const QModelIndexList& modelIndexList, caf::PdmObjectGroup* objectGroup) -{ - CVF_ASSERT(objectGroup); - - for (int i = 0; i < modelIndexList.size(); i++) - { - caf::PdmUiTreeItem* uiItem = UiTreeModelPdm::getTreeItemFromIndex(modelIndexList.at(i)); - - if (uiItem && uiItem->dataObject() && uiItem->dataObject().p()) - { - objectGroup->addObject(uiItem->dataObject().p()); - } - } -} - diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h b/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h deleted file mode 100644 index cf25af30a2..0000000000 --- a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h +++ /dev/null @@ -1,103 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2011- Statoil ASA -// Copyright (C) 2013- Ceetron Solutions AS -// Copyright (C) 2011-2012 Ceetron AS -// -// ResInsight is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. -// -// See the GNU General Public License at -// for more details. -// -///////////////////////////////////////////////////////////////////////////////// - -#pragma once - -#include "cafPdmObject.h" -#include "cafPdmPointer.h" -#include "cafPdmObjectGroup.h" -#include "cafUiTreeModelPdm.h" - -class QFileSystemWatcher; - -class RimEclipsePropertyFilter; -class RimCellRangeFilter; -class RimGeoMechPropertyFilter; -class RimEclipseCase; -class RimEclipseView; -class RimEclipseInputProperty; -class RimEclipseStatisticsCase; -class RimIdenticalGridCaseGroup; - -class RimView; - - -//================================================================================================== -/// -/// -//================================================================================================== -class RimUiTreeModelPdm : public caf::UiTreeModelPdm -{ - Q_OBJECT; - -public: - RimUiTreeModelPdm(QObject* parent); - - // Special edit methods - bool deleteRangeFilter(const QModelIndex& itemIndex); - bool deletePropertyFilter(const QModelIndex& itemIndex); - bool deleteGeoMechPropertyFilter(const QModelIndex& itemIndex); - - void deleteInputProperty(const QModelIndex& itemIndex); - void deleteReservoir(RimEclipseCase* reservoir); - void deleteAllWellPaths(const QModelIndex& itemIndex); - - RimEclipsePropertyFilter* addPropertyFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); - RimGeoMechPropertyFilter* addGeoMechPropertyFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); - RimCellRangeFilter* addRangeFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); - - RimView* addReservoirView(const std::vector& treeSelection); - void deleteReservoirViews(const std::vector& treeSelection); - void deleteGeoMechCases(const std::vector& treeSelection); - - void addInputProperty(const QModelIndex& itemIndex, const QStringList& fileNames); - - void addToParentAndBuildUiItems(caf::PdmUiTreeItem* parentTreeItem, int position, caf::PdmObject* pdmObject); - - void populateObjectGroupFromModelIndexList(const QModelIndexList& modelIndexList, caf::PdmObjectGroup* objectGroup); - void addObjects(const QModelIndex& itemIndex, const caf::PdmObjectGroup& pdmObjects); - void moveObjects(const QModelIndex& itemIndex, caf::PdmObjectGroup& pdmObjects); - - RimEclipseStatisticsCase* addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); - RimIdenticalGridCaseGroup* addCaseGroup(QModelIndex& insertedModelIndex); - - bool deleteObjectFromPdmChildArrayField(const QModelIndex& itemIndex); - - void updateScriptPaths(); - - virtual Qt::DropActions supportedDropActions() const; - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - virtual QMimeData* mimeData(const QModelIndexList &indexes) const; - virtual QStringList mimeTypes() const; - - RimIdenticalGridCaseGroup* gridCaseGroupFromItemIndex(const QModelIndex& itemIndex); - void setObjectToggleStateForSelection(QModelIndexList selectedIndexes, int state); - -private slots: - void slotRefreshScriptTree(QString path); - -private: - void clearClipboard(); - RimEclipseCase* caseFromItemIndex(const QModelIndex& itemIndex); -private: - QFileSystemWatcher* m_scriptChangeDetector; -}; - diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp b/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp deleted file mode 100644 index fcc55b7da3..0000000000 --- a/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp +++ /dev/null @@ -1,1575 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2011- Statoil ASA -// Copyright (C) 2013- Ceetron Solutions AS -// Copyright (C) 2011-2012 Ceetron AS -// -// ResInsight is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. -// -// See the GNU General Public License at -// for more details. -// -///////////////////////////////////////////////////////////////////////////////// - -//#include "RiaStdInclude.h" - -#include "RimUiTreeView.h" - - -#include "RiaApplication.h" -#include "RiaPreferences.h" -#include "RifEclipseInputFileTools.h" -#include "RigCaseCellResultsData.h" -#include "RigSingleWellResultsData.h" -#include "Rim3dOverlayInfoConfig.h" -#include "RimBinaryExportSettings.h" -#include "RimCalcScript.h" -#include "RimCaseCollection.h" -#include "RimCellEdgeColors.h" -#include "RimCellRangeFilterCollection.h" -#include "RimCellRangeFilterCollection.h" -#include "RimEclipseCaseCollection.h" -#include "RimEclipseCellColors.h" -#include "RimEclipseInputCase.h" -#include "RimEclipseInputProperty.h" -#include "RimEclipseInputPropertyCollection.h" -#include "RimEclipsePropertyFilterCollection.h" -#include "RimEclipseResultCase.h" -#include "RimEclipseStatisticsCase.h" -#include "RimEclipseStatisticsCaseCollection.h" -#include "RimEclipseView.h" -#include "RimEclipseWell.h" -#include "RimEclipseWellCollection.h" -#include "RimExportInputPropertySettings.h" -#include "RimGeoMechCase.h" -#include "RimGeoMechPropertyFilter.h" -#include "RimGeoMechPropertyFilterCollection.h" -#include "RimGeoMechView.h" -#include "RimIdenticalGridCaseGroup.h" -#include "RimMimeData.h" -#include "RimOilField.h" -#include "RimProject.h" -#include "RimReservoirCellResultsStorage.h" -#include "RimScriptCollection.h" -#include "RimUiTreeModelPdm.h" -#include "RimWellPathCollection.h" -#include "RiuMainWindow.h" - -#include "cafPdmFieldCvfColor.h" -#include "cafPdmFieldCvfMat4d.h" -#include "cafPdmObjectGroup.h" -#include "cafPdmUiPropertyViewDialog.h" - -#include -#include -#include -#include -#include -#include -#include -#include "RimTreeViewStateSerializer.h" - - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimUiTreeView::RimUiTreeView(QWidget *parent /*= 0*/) - : QTreeView(parent) -{ - setHeaderHidden(true); - - m_pasteAction = new QAction(QString("Paste"), this); - connect(m_pasteAction, SIGNAL(triggered()), SLOT(slotPastePdmObjects())); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimUiTreeView::~RimUiTreeView() -{ -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::contextMenuEvent(QContextMenuEvent* event) -{ - m_pasteAction->setEnabled(hasClipboardValidData()); - - if (selectionModel() && selectionModel()->selection().size() == 0) - { - // Clicking in blank space in tree view - QMenu menu; - menu.addAction(QString("New Grid Case Group"), this, SLOT(slotAddCaseGroup())); - menu.exec(event->globalPos()); - - return; - } - - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); - if (uiItem && uiItem->dataObject()) - { - QMenu menu; - - if (dynamic_cast(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(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(uiItem->dataObject().p())) - { - menu.addAction(QString("New Range Filter"), this, SLOT(slotAddRangeFilter())); - menu.addAction(QString("Slice I Filter"), this, SLOT(slotAddSliceFilterI())); - menu.addAction(QString("Slice J Filter"), this, SLOT(slotAddSliceFilterJ())); - menu.addAction(QString("Slice K Filter"), this, SLOT(slotAddSliceFilterK())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("Insert Range Filter"), this, SLOT(slotAddRangeFilter())); - menu.addAction(QString("Slice I Filter"), this, SLOT(slotAddSliceFilterI())); - menu.addAction(QString("Slice J Filter"), this, SLOT(slotAddSliceFilterJ())); - menu.addAction(QString("Slice K Filter"), this, SLOT(slotAddSliceFilterK())); - menu.addSeparator(); - menu.addAction(QString("Delete"), this, SLOT(slotDeleteRangeFilter())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("New Property Filter"), this, SLOT(slotAddPropertyFilter())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("Insert Property Filter"), this, SLOT(slotAddPropertyFilter())); - menu.addSeparator(); - menu.addAction(QString("Delete"), this, SLOT(slotDeletePropertyFilter())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("New Property Filter"), this, SLOT(slotAddGeoMechPropertyFilter())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("Insert Property Filter"), this, SLOT(slotAddGeoMechPropertyFilter())); - menu.addSeparator(); - menu.addAction(QString("Delete"), this, SLOT(slotDeleteGeoMechPropertyFilter())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - RiaApplication* app = RiaApplication::instance(); - - { - QAction* action = menu.addAction(QString("Edit"), this, SLOT(slotEditScript())); - if (app->scriptEditorPath().isEmpty()) - { - action->setEnabled(false); - } - } - menu.addAction(QString("New"), this, SLOT(slotNewScript())); - menu.addSeparator(); - - { - QAction* action = menu.addAction(QString("Execute"), this, SLOT(slotExecuteScript())); - if (app->octavePath().isEmpty()) - { - action->setEnabled(false); - } - } - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("Add Input Property"), this, SLOT(slotAddInputProperty())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("Delete"), this, SLOT(slotDeleteObjectFromContainer())); - menu.addAction(QString("Save Property To File"), this, SLOT(slotWriteInputProperty())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("Save Property To File"), this, SLOT(slotWriteBinaryResultAsInputProperty())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("New Statistics Case"), this, SLOT(slotNewStatisticsCase())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("New View"), this, SLOT(slotAddView())); - menu.addAction(QString("Compute"), this, SLOT(slotComputeStatistics())); - menu.addAction(QString("Close"), this, SLOT(slotCloseCase())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("New View"), this, SLOT(slotAddView())); - menu.addAction(QString("Close"), this, SLOT(slotCloseGeomechCase())); - menu.addAction(m_pasteAction); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("Copy"), this, SLOT(slotCopyPdmObjectToClipboard())); - menu.addAction(m_pasteAction); - menu.addAction(QString("Close"), this, SLOT(slotCloseCase())); - menu.addAction(QString("New View"), this, SLOT(slotAddView())); - menu.addAction(QString("New Grid Case Group"), this, SLOT(slotAddCaseGroup())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("New Grid Case Group"), this, SLOT(slotAddCaseGroup())); - menu.addAction(m_pasteAction); - menu.addAction(QString("Close"), this, SLOT(slotDeleteObjectFromPdmChildArrayField())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(m_pasteAction); - - // Check if parent field is a StatisticsCaseCollection - RimCaseCollection* rimCaseCollection = dynamic_cast(uiItem->dataObject().p()); - if (RimIdenticalGridCaseGroup::isStatisticsCaseCollection(rimCaseCollection)) - { - menu.addAction(QString("New Statistics Case"), this, SLOT(slotNewStatisticsCase())); - } - } - else if (dynamic_cast(uiItem->dataObject().p()) || dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("Add Script Path"), this, SLOT(slotAddScriptPath())); - menu.addAction(QString("Delete Script Path"), this, SLOT(slotDeleteScriptPath())); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - menu.addAction(QString("Delete All Well Paths"), this, SLOT(slotDeleteAllWellPaths())); - - RiuMainWindow* ruiMainWindow = RiuMainWindow::instance(); - ruiMainWindow->appendActionsContextMenuForPdmObject(uiItem->dataObject().p(), &menu); - } - else if (dynamic_cast(uiItem->dataObject().p())) - { - RiuMainWindow* ruiMainWindow = RiuMainWindow::instance(); - ruiMainWindow->appendActionsContextMenuForPdmObject(uiItem->dataObject().p(), &menu); - menu.addAction(QString("New Grid Case Group"), this, SLOT(slotAddCaseGroup())); - } - - // Execute script on selection of cases - RiuMainWindow* ruiMainWindow = RiuMainWindow::instance(); - if (ruiMainWindow) - { - std::vector cases; - ruiMainWindow->selectedCases(cases); - - if (cases.size() > 0) - { - QMenu* executeMenu = menu.addMenu("Execute script"); - - RiaApplication* app = RiaApplication::instance(); - RimProject* proj = app->project(); - if (proj && proj->scriptCollection()) - { - RimScriptCollection* rootScriptCollection = proj->scriptCollection(); - - // Root script collection holds a list of subdirectories of user defined script folders - for (size_t i = 0; i < rootScriptCollection->subDirectories.size(); i++) - { - RimScriptCollection* subDir = rootScriptCollection->subDirectories[i]; - - if (subDir) - { - appendScriptItems(executeMenu, subDir); - } - } - } - - menu.addSeparator(); - menu.addMenu(executeMenu); - } - } - - appendToggleItemActions(menu); - menu.exec(event->globalPos()); - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotAddChildItem() -{ - - QModelIndex index = currentIndex(); - QAbstractItemModel* myModel = model(); - - // Insert a single row at the end of the collection of items - int itemCount = myModel->rowCount(index); - if (!myModel->insertRow(itemCount, index)) - return; - - selectionModel()->setCurrentIndex(myModel->index(0, 0, index), QItemSelectionModel::ClearAndSelect); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotDeleteItem() -{ - QModelIndex index = currentIndex(); - QAbstractItemModel* myModel = model(); - - if (!myModel->removeRow(index.row(), index.parent())) - return; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotDeletePropertyFilter() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - myModel->deletePropertyFilter(currentIndex()); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotDeleteRangeFilter() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - myModel->deleteRangeFilter(currentIndex()); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicEclipsePropertyFilterInsert -void RimUiTreeView::slotAddPropertyFilter() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - QModelIndex insertedIndex; - RimEclipsePropertyFilter* propFilter = myModel->addPropertyFilter(currentIndex(), insertedIndex); - setCurrentIndex(insertedIndex); - if (propFilter) - { - propFilter->parentContainer()->reservoirView()->createDisplayModelAndRedraw(); - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicGeoMechPropertyFilterInsert -void RimUiTreeView::slotAddGeoMechPropertyFilter() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - QModelIndex insertedIndex; - RimGeoMechPropertyFilter* propFilter = myModel->addGeoMechPropertyFilter(currentIndex(), insertedIndex); - setCurrentIndex(insertedIndex); - if (propFilter) - { - propFilter->parentContainer()->reservoirView()->createDisplayModelAndRedraw(); - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotDeleteGeoMechPropertyFilter() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - myModel->deleteGeoMechPropertyFilter(currentIndex()); - } -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicRangeFilterNew -void RimUiTreeView::slotAddRangeFilter() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - QModelIndex insertedIndex; - RimCellRangeFilter* newFilter = myModel->addRangeFilter(currentIndex(), insertedIndex); - setCurrentIndex(insertedIndex); - - if (newFilter && newFilter->parentContainer()) - { - newFilter->parentContainer()->reservoirView()->createDisplayModelAndRedraw(); - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicRangeFilterNewSliceI -void RimUiTreeView::slotAddSliceFilterI() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - QModelIndex insertedIndex; - RimCellRangeFilter* rangeFilter = myModel->addRangeFilter(currentIndex(), insertedIndex); - - RimCellRangeFilterCollection* rangeFilterCollection = rangeFilter->parentContainer(); - rangeFilter->name = QString("Slice I (%1)").arg(rangeFilterCollection->rangeFilters().size()); - rangeFilter->cellCountI = 1; - - rangeFilterCollection->reservoirView()->scheduleGeometryRegen(RANGE_FILTERED); - rangeFilterCollection->reservoirView()->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE); - - rangeFilterCollection->reservoirView()->createDisplayModelAndRedraw(); - - setCurrentIndex(insertedIndex); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicRangeFilterNewSliceJ -void RimUiTreeView::slotAddSliceFilterJ() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - QModelIndex insertedIndex; - RimCellRangeFilter* rangeFilter = myModel->addRangeFilter(currentIndex(), insertedIndex); - - RimCellRangeFilterCollection* rangeFilterCollection = rangeFilter->parentContainer(); - rangeFilter->name = QString("Slice J (%1)").arg(rangeFilterCollection->rangeFilters().size()); - rangeFilter->cellCountJ = 1; - - rangeFilterCollection->reservoirView()->scheduleGeometryRegen(RANGE_FILTERED); - rangeFilterCollection->reservoirView()->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE); - - rangeFilterCollection->reservoirView()->createDisplayModelAndRedraw(); - - setCurrentIndex(insertedIndex); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicRangeFilterNewSliceK -void RimUiTreeView::slotAddSliceFilterK() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - QModelIndex insertedIndex; - RimCellRangeFilter* rangeFilter = myModel->addRangeFilter(currentIndex(), insertedIndex); - - RimCellRangeFilterCollection* rangeFilterCollection = rangeFilter->parentContainer(); - rangeFilter->name = QString("Slice K (%1)").arg(rangeFilterCollection->rangeFilters().size()); - rangeFilter->cellCountK = 1; - - rangeFilterCollection->reservoirView()->scheduleGeometryRegen(RANGE_FILTERED); - rangeFilterCollection->reservoirView()->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE); - - rangeFilterCollection->reservoirView()->createDisplayModelAndRedraw(); - - setCurrentIndex(insertedIndex); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicEditScriptFeature -void RimUiTreeView::slotEditScript() -{ - QModelIndex index = currentIndex(); - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); - if (uiItem) - { - RimCalcScript* calcScript = dynamic_cast(uiItem->dataObject().p()); - - RiaApplication* app = RiaApplication::instance(); - QString scriptEditor = app->scriptEditorPath(); - if (!scriptEditor.isEmpty()) - { - QStringList arguments; - arguments << calcScript->absolutePath; - - QProcess* myProcess = new QProcess(this); - myProcess->start(scriptEditor, arguments); - - if (!myProcess->waitForStarted(1000)) - { - QMessageBox::warning(RiuMainWindow::instance(), "Script editor", "Failed to start script editor executable\n" + scriptEditor); - } - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicNewScriptFeature -void RimUiTreeView::slotNewScript() -{ - QModelIndex index = currentIndex(); - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); - RimCalcScript* calcScript = NULL; - RimScriptCollection * scriptColl = NULL; - - calcScript = dynamic_cast(uiItem->dataObject().p()); - scriptColl = dynamic_cast(uiItem->dataObject().p()); - QString fullPathNewScript; - - if (calcScript ) - { - QFileInfo existingScriptFileInfo(calcScript->absolutePath()); - fullPathNewScript = existingScriptFileInfo.absolutePath(); - } - else if (scriptColl) - { - fullPathNewScript = scriptColl->directory(); - } - else - { - return; - } - - QString fullPathFilenameNewScript; - - fullPathFilenameNewScript = fullPathNewScript + "/untitled.m"; - int num= 1; - while (QFileInfo(fullPathFilenameNewScript).exists()) - { - fullPathFilenameNewScript = fullPathNewScript + "/untitled" + QString::number(num) + ".m"; - num++; - } - - RiaApplication* app = RiaApplication::instance(); - QString scriptEditor = app->scriptEditorPath(); - if (!scriptEditor.isEmpty()) - { - QStringList arguments; - arguments << fullPathFilenameNewScript; - - QProcess* myProcess = new QProcess(this); - myProcess->start(scriptEditor, arguments); - - if (!myProcess->waitForStarted(1000)) - { - QMessageBox::warning(RiuMainWindow::instance(), "Script editor", "Failed to start script editor executable\n" + scriptEditor); - } - } -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicExecuteScriptForCasesFeature -void RimUiTreeView::slotExecuteScript() -{ - QModelIndex index = currentIndex(); - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); - if (uiItem) - { - RimCalcScript* calcScript = dynamic_cast(uiItem->dataObject().p()); - - RiaApplication* app = RiaApplication::instance(); - QString octavePath = app->octavePath(); - if (!octavePath.isEmpty()) - { - // TODO: Must rename RimCalcScript::absolutePath to absoluteFileName, as the code below is confusing - // absolutePath() is a function in QFileInfo - QFileInfo fi(calcScript->absolutePath()); - QString octaveFunctionSearchPath = fi.absolutePath(); - - QStringList arguments = app->octaveArguments(); - arguments.append("--path"); - arguments << octaveFunctionSearchPath; - arguments << calcScript->absolutePath(); - - RiaApplication::instance()->launchProcess(octavePath, arguments); - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicExecuteScriptFeature -void RimUiTreeView::slotExecuteScriptForSelectedCases() -{ - QAction* action = qobject_cast(sender()); - - if (!action) return; - - QString encodedModelIndex = action->data().toString(); - QModelIndex mi = RimTreeViewStateSerializer::getModelIndexFromString(model(), encodedModelIndex); - - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (!myModel) return; - - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(mi); - if (uiItem) - { - RimCalcScript* calcScript = dynamic_cast(uiItem->dataObject().p()); - if (!calcScript) return; - - RiaApplication* app = RiaApplication::instance(); - QString octavePath = app->octavePath(); - if (!octavePath.isEmpty()) - { - // TODO: Must rename RimCalcScript::absolutePath to absoluteFileName, as the code below is confusing - // absolutePath() is a function in QFileInfo - QFileInfo fi(calcScript->absolutePath()); - QString octaveFunctionSearchPath = fi.absolutePath(); - - QStringList arguments = app->octaveArguments(); - arguments.append("--path"); - arguments << octaveFunctionSearchPath; - arguments << calcScript->absolutePath(); - - // Get case ID from selected cases in selection model - std::vector caseIdsInSelection; - { - QItemSelectionModel* m = selectionModel(); - CVF_ASSERT(m); - - caf::PdmObjectGroup group; - - QModelIndexList mil = m->selectedRows(); - - myModel->populateObjectGroupFromModelIndexList(mil, &group); - - std::vector > typedObjects; - group.objectsByType(&typedObjects); - - for (size_t i = 0; i < typedObjects.size(); i++) - { - RimEclipseCase* rimReservoir = typedObjects[i]; - caseIdsInSelection.push_back(rimReservoir->caseId); - } - } - - if (caseIdsInSelection.size() > 0) - { - RiaApplication::instance()->launchProcessForMultipleCases(octavePath, arguments, caseIdsInSelection); - } - } - } -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicNewViewFeature -void RimUiTreeView::slotAddView() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - std::vector selection; - this->selectedUiItems(selection); - - RimView* newView = myModel->addReservoirView(selection); - QModelIndex insertedIndex = myModel->getModelIndexFromPdmObject(newView); - - // Expand parent collection and inserted view item - setExpandedUpToRoot(insertedIndex); - - setCurrentIndex(insertedIndex); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotDeleteView() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - std::vector selection; - this->selectedUiItems(selection); - myModel->deleteReservoirViews(selection); - - RiaApplication* app = RiaApplication::instance(); - app->setActiveReservoirView(NULL); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected) -{ - caf::PdmObjectHandle* pdmObject = NULL; - - if (selected.indexes().size() == 1) - { - QModelIndex mi = selected.indexes()[0]; - if (mi.isValid()) - { - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - caf::PdmUiTreeItem* treeItem = myModel->getTreeItemFromIndex(mi); - if (treeItem && treeItem->dataObject()) - { - pdmObject = treeItem->dataObject(); - } - } - } - } - - emit selectedObjectChanged(pdmObject); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::setModel(QAbstractItemModel* model) -{ - QTreeView::setModel(model); - - if (selectionModel()) - { - connect(selectionModel(), SIGNAL(selectionChanged( const QItemSelection & , const QItemSelection & )), SLOT(slotSelectionChanged( const QItemSelection & , const QItemSelection & ))); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicAddEclipseInputPropertyFeature -void RimUiTreeView::slotAddInputProperty() -{ - RiaApplication* app = RiaApplication::instance(); - QString defaultDir = app->defaultFileDialogDirectory("INPUT_FILES"); - QStringList fileNames = QFileDialog::getOpenFileNames(this, "Select Eclipse Input Property Files", defaultDir, "All Files (*.* *)"); - - if (fileNames.isEmpty()) return; - - // Remember the directory to next time - defaultDir = QFileInfo(fileNames.last()).absolutePath(); - app->setDefaultFileDialogDirectory("INPUT_FILES", defaultDir); - - - QModelIndex index = currentIndex(); - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); - - RimEclipseInputPropertyCollection* inputPropertyCollection = dynamic_cast(uiItem->dataObject().p()); - if (inputPropertyCollection) - { - myModel->addInputProperty(index, fileNames); - - setCurrentIndex(index); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotDeleteObjectFromContainer() -{ - QModelIndex index = currentIndex(); - if (!index.isValid()) return; - - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) myModel->deleteInputProperty(index); -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicSaveEclipseInputPropertyFeature -void RimUiTreeView::slotWriteInputProperty() -{ - QModelIndex index = currentIndex(); - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); - - RimEclipseInputProperty* inputProperty = dynamic_cast(uiItem->dataObject().p()); - if (!inputProperty) return; - - { - bool isResolved = false; - if (inputProperty->resolvedState == RimEclipseInputProperty::RESOLVED || inputProperty->resolvedState == RimEclipseInputProperty::RESOLVED_NOT_SAVED) - { - isResolved = true; - } - - if (!isResolved) - { - QMessageBox::warning(RiuMainWindow::instance(), "Export failure", "Property is not resolved, and then it is not possible to export the property."); - - return; - } - } - - RimExportInputSettings exportSettings; - exportSettings.eclipseKeyword = inputProperty->eclipseKeyword; - - // Find input reservoir for this property - RimEclipseInputCase* inputReservoir = NULL; - { - RimEclipseInputPropertyCollection* inputPropertyCollection = dynamic_cast(inputProperty->parentField()->ownerObject()); - if (!inputPropertyCollection) return; - - inputReservoir = dynamic_cast(inputPropertyCollection->parentField()->ownerObject()); - } - - if (!inputReservoir) return; - - { - QString projectFolder; - - RiaApplication* app = RiaApplication::instance(); - QString projectFileName = app->currentProjectFileName(); - if (!projectFileName.isEmpty()) - { - QFileInfo fi(projectFileName); - projectFolder = fi.absolutePath(); - } - else - { - projectFolder = inputReservoir->locationOnDisc(); - } - - QString outputFileName = projectFolder + "/" + inputProperty->eclipseKeyword; - - exportSettings.fileName = outputFileName; - } - - caf::PdmUiPropertyViewDialog propertyDialog(this, &exportSettings, "Export Eclipse Property to Text File", ""); - if (propertyDialog.exec() == QDialog::Accepted) - { - bool isOk = RifEclipseInputFileTools::writePropertyToTextFile(exportSettings.fileName, inputReservoir->reservoirData(), 0, inputProperty->resultName, exportSettings.eclipseKeyword); - if (isOk) - { - inputProperty->fileName = exportSettings.fileName; - inputProperty->eclipseKeyword = exportSettings.eclipseKeyword; - inputProperty->resolvedState = RimEclipseInputProperty::RESOLVED; - - inputProperty->updateConnectedEditors(); - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicSaveEclipseResultAsInputProperty -void RimUiTreeView::slotWriteBinaryResultAsInputProperty() -{ - QModelIndex index = currentIndex(); - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); - - RimEclipseCellColors* resultColors = dynamic_cast(uiItem->dataObject().p()); - if (!resultColors) return; - if (!resultColors->reservoirView()) return; - if (!resultColors->reservoirView()->eclipseCase()) return; - if (!resultColors->reservoirView()->eclipseCase()->reservoirData()) return; - - RimBinaryExportSettings exportSettings; - exportSettings.eclipseKeyword = resultColors->resultVariable(); - - { - QString projectFolder; - - RiaApplication* app = RiaApplication::instance(); - QString projectFileName = app->currentProjectFileName(); - if (!projectFileName.isEmpty()) - { - QFileInfo fi(projectFileName); - projectFolder = fi.absolutePath(); - } - else - { - projectFolder = resultColors->reservoirView()->eclipseCase()->locationOnDisc(); - } - - QString outputFileName = projectFolder + "/" + resultColors->resultVariable(); - - exportSettings.fileName = outputFileName; - } - - caf::PdmUiPropertyViewDialog propertyDialog(this, &exportSettings, "Export Binary Eclipse Data to Text File", ""); - if (propertyDialog.exec() == QDialog::Accepted) - { - size_t timeStep = resultColors->reservoirView()->currentTimeStep(); - RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(resultColors->porosityModel()); - - bool isOk = RifEclipseInputFileTools::writeBinaryResultToTextFile(exportSettings.fileName, resultColors->reservoirView()->eclipseCase()->reservoirData(), porosityModel, timeStep, resultColors->resultVariable(), exportSettings.eclipseKeyword, exportSettings.undefinedValue); - if (!isOk) - { - QMessageBox::critical(NULL, "File export", "Failed to exported current result to " + exportSettings.fileName); - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - See RicCloseCaseFeature -void RimUiTreeView::slotCloseCase() -{ - QModelIndexList miList; - miList << currentIndex(); - - if (userConfirmedGridCaseGroupChange(miList)) - { - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - QItemSelectionModel* m = selectionModel(); - CVF_ASSERT(m); - - caf::PdmObjectGroup group; - - QModelIndexList mil = m->selectedRows(); - myModel->populateObjectGroupFromModelIndexList(mil, &group); - - std::vector > typedObjects; - group.objectsByType(&typedObjects); - - for (size_t i = 0; i < typedObjects.size(); i++) - { - RimEclipseCase* rimReservoir = typedObjects[i]; - myModel->deleteReservoir(rimReservoir); - } - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicNewStatisticsCaseFeature -void RimUiTreeView::slotNewStatisticsCase() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - QModelIndex insertedIndex; - RimEclipseStatisticsCase* newObject = myModel->addStatisticalCalculation(currentIndex(), insertedIndex); - setCurrentIndex(insertedIndex); - - setExpanded(insertedIndex, true); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicComputeStatisticsFeature -void RimUiTreeView::slotComputeStatistics() -{ - QModelIndex index = currentIndex(); - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); - - RimEclipseStatisticsCase* statisticsCase = dynamic_cast(uiItem->dataObject().p()); - if (!statisticsCase) return; - - statisticsCase->computeStatistics(); - - statisticsCase->scheduleACTIVEGeometryRegenOnReservoirViews(); - statisticsCase->updateConnectedEditorsAndReservoirViews(); - - if (statisticsCase->reservoirViews.size() == 0) - { - slotAddView(); - } - - - -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicEclipseCaseNewGroup -void RimUiTreeView::slotAddCaseGroup() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - QModelIndex insertedIndex; - myModel->addCaseGroup(insertedIndex); - setCurrentIndex(insertedIndex); - - setExpanded(insertedIndex, true); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotDeleteObjectFromPdmChildArrayField() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - myModel->deleteObjectFromPdmChildArrayField(currentIndex()); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotCopyPdmObjectToClipboard() -{ - QItemSelectionModel* m = selectionModel(); - - QModelIndexList mil = m->selectedRows(); - if (mil.size() == 0) - { - return; - } - - MimeDataWithIndexes* myObject = new MimeDataWithIndexes; - myObject->setIndexes(mil); - - QClipboard* clipboard = QApplication::clipboard(); - if (clipboard) - { - clipboard->setMimeData(myObject); - } -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::slotPastePdmObjects() -{ - if (!currentIndex().isValid()) return; - - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (!myModel) return; - - QModelIndexList miList; - miList << currentIndex(); - if (userConfirmedGridCaseGroupChange(miList)) - { - caf::PdmObjectGroup objectGroup; - createPdmObjectsFromClipboard(&objectGroup); - if (objectGroup.objects.size() == 0) return; - - myModel->addObjects(currentIndex(), objectGroup); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::createPdmObjectsFromClipboard(caf::PdmObjectGroup* objectGroup) -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (!myModel) return; - - QClipboard* clipboard = QApplication::clipboard(); - if (!clipboard) return; - - const MimeDataWithIndexes* mdWithIndexes = dynamic_cast(clipboard->mimeData()); - if (!mdWithIndexes) return; - - QModelIndexList indexList = mdWithIndexes->indexes(); - myModel->populateObjectGroupFromModelIndexList(indexList, objectGroup); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::keyPressEvent(QKeyEvent* keyEvent) -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); - if (uiItem) - { - if (dynamic_cast(uiItem->dataObject().p()) - || dynamic_cast(uiItem->dataObject().p())) - { - if (keyEvent->matches(QKeySequence::Copy)) - { - slotCopyPdmObjectToClipboard(); - keyEvent->setAccepted(true); - - return; - } - } - - if (dynamic_cast(uiItem->dataObject().p()) - || dynamic_cast(uiItem->dataObject().p()) - || dynamic_cast(uiItem->dataObject().p()) - || dynamic_cast(uiItem->dataObject().p())) - { - if (keyEvent->matches(QKeySequence::Paste)) - { - slotPastePdmObjects(); - keyEvent->setAccepted(true); - - return; - } - } - } - - switch (keyEvent->key()) - { - case Qt::Key_Space: - case Qt::Key_Enter: - case Qt::Key_Return: - case Qt::Key_Select: - { - executeSelectionToggleOperation(TOGGLE); - keyEvent->setAccepted(true); - - return; - } - } - - QTreeView::keyPressEvent(keyEvent); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimUiTreeView::hasClipboardValidData() -{ - QClipboard* clipboard = QApplication::clipboard(); - if (clipboard) - { - if (dynamic_cast(clipboard->mimeData())) - { - return true; - } - } - - return false; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - See RiuDragDrop -void RimUiTreeView::dropEvent(QDropEvent* dropEvent) -{ - QModelIndexList affectedModels; - - if (dropEvent->dropAction() == Qt::MoveAction) - { - const MimeDataWithIndexes* myMimeData = qobject_cast(dropEvent->mimeData()); - if (myMimeData) - { - affectedModels = myMimeData->indexes(); - } - } - - QModelIndex dropIndex = indexAt(dropEvent->pos()); - if (dropIndex.isValid()) - { - affectedModels.push_back(dropIndex); - } - - if (userConfirmedGridCaseGroupChange(affectedModels)) - { - QTreeView::dropEvent(dropEvent); - } -} - -//-------------------------------------------------------------------------------------------------- -/// Displays a question to the user when a grid case group with statistical results is about to change -//-------------------------------------------------------------------------------------------------- -bool RimUiTreeView::userConfirmedGridCaseGroupChange(const QModelIndexList& itemIndexList) -{ - if (itemIndexList.size() == 0) return true; - - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - caf::PdmObjectGroup pog; - - for (int i = 0; i < itemIndexList.size(); i++) - { - QModelIndex itemIndex = itemIndexList.at(i); - if (!itemIndex.isValid()) continue; - - RimIdenticalGridCaseGroup* gridCaseGroup = myModel->gridCaseGroupFromItemIndex(itemIndex); - if (gridCaseGroup) - { - if (hasAnyStatisticsResults(gridCaseGroup)) - { - if (std::find(pog.objects.begin(), pog.objects.end(), gridCaseGroup) == pog.objects.end()) - { - pog.addObject(gridCaseGroup); - } - } - } - } - - std::vector > typedObjects; - pog.objectsByType(&typedObjects); - - if (typedObjects.size() > 0) - { - RiuMainWindow* mainWnd = RiuMainWindow::instance(); - - QMessageBox msgBox(mainWnd); - msgBox.setIcon(QMessageBox::Question); - - QString questionText; - if (typedObjects.size() == 1) - { - questionText = QString("This operation will invalidate statistics results in grid case group\n\"%1\".\n").arg(typedObjects[0]->name()); - questionText += "Computed results in this group will be deleted if you continue."; - } - else - { - questionText = "This operation will invalidate statistics results in grid case groups\n"; - for (size_t i = 0; i < typedObjects.size(); i++) - { - questionText += QString("\"%1\"\n").arg(typedObjects[i]->name()); - } - - questionText += "Computed results in these groups will be deleted if you continue."; - } - - msgBox.setText(questionText); - msgBox.setInformativeText("Do you want to continue?"); - msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); - - int ret = msgBox.exec(); - if (ret == QMessageBox::No) - { - return false; - } - } - - } - - return true; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimUiTreeView::hasAnyStatisticsResults(RimIdenticalGridCaseGroup* gridCaseGroup) -{ - CVF_ASSERT(gridCaseGroup); - - for (size_t i = 0; i < gridCaseGroup->statisticsCaseCollection()->reservoirs().size(); i++) - { - RimEclipseStatisticsCase* rimStaticsCase = dynamic_cast(gridCaseGroup->statisticsCaseCollection()->reservoirs[i]); - if (rimStaticsCase) - { - if (rimStaticsCase->hasComputedStatistics()) - { - return true; - } - } - } - - return false; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::mousePressEvent(QMouseEvent* mouseEvent) -{ - // TODO: Handle multiple selection and changing state using mouse - // This is a bit tricky due to the fact that there is no obvious way to trap if the check box is pressed - // and not other parts of the check box GUI item - - /* - if (checkAndHandleToggleOfMultipleSelection()) - { - mouseEvent->setAccepted(true); - - return; - } - */ - - QTreeView::mousePressEvent(mouseEvent); -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::setExpandedUpToRoot(const QModelIndex& itemIndex) -{ - QModelIndex mi = itemIndex; - - while (mi.isValid()) - { - this->setExpanded(mi, true); - mi = mi.parent(); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicAddScriptPathFeature -void RimUiTreeView::slotAddScriptPath() -{ - QString selectedFolder = QFileDialog::getExistingDirectory(this, "Select script folder"); - if (!selectedFolder.isEmpty()) - { - QString filePathString = RiaApplication::instance()->preferences()->scriptDirectories(); - - QChar separator(';'); - if (!filePathString.isEmpty() && !filePathString.endsWith(separator, Qt::CaseInsensitive)) - { - filePathString += separator; - } - - filePathString += selectedFolder; - - RiaApplication::instance()->preferences()->scriptDirectories = filePathString; - RiaApplication::instance()->applyPreferences(); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - see RicDeleteScriptPathFeature -void RimUiTreeView::slotDeleteScriptPath() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); - if (uiItem) - { - if (dynamic_cast(uiItem->dataObject().p())) - { - RimScriptCollection* scriptCollection = dynamic_cast(uiItem->dataObject().p()); - QString toBeRemoved = scriptCollection->directory; - - QString originalFilePathString = RiaApplication::instance()->preferences()->scriptDirectories(); - QString filePathString = originalFilePathString.remove(toBeRemoved); - - // Remove duplicate separators - QChar separator(';'); - QString regExpString = QString("%1{1,5}").arg(separator); - filePathString.replace(QRegExp(regExpString), separator); - - // Remove separator at end - if (filePathString.endsWith(separator)) - { - filePathString = filePathString.left(filePathString.size() - 1); - } - - RiaApplication::instance()->preferences()->scriptDirectories = filePathString; - RiaApplication::instance()->applyPreferences(); - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE RicToggleItemsFeatureImpl/RimProject -void RimUiTreeView::appendToggleItemActions(QMenu& contextMenu) -{ - if (selectionModel() && selectionModel()->selectedIndexes().size() > 0) - { - foreach (QModelIndex index, selectionModel()->selectedIndexes()) - { - if (!index.isValid()) return; - - if (!(model()->flags(index) & Qt::ItemIsUserCheckable)) return; - } - - if (contextMenu.actions().size() > 0) - { - contextMenu.addSeparator(); - } - - if (selectionModel()->selectedIndexes().size() > 1) - { - contextMenu.addAction(QString("On"), this, SLOT(slotToggleItemsOn())); - contextMenu.addAction(QString("Off"), this, SLOT(slotToggleItemsOff())); - contextMenu.addAction(QString("Toggle"), this, SLOT(slotToggleItems())); - } - else - { - QModelIndex mIdx = selectionModel()->selectedIndexes()[0]; - caf::PdmUiTreeItem* treeItem = caf::UiTreeModelPdm::getTreeItemFromIndex(mIdx); - if (treeItem && treeItem->childCount()) - { - contextMenu.addAction(QString("Sub Items On"), this, SLOT(slotToggleItemsOn())); - contextMenu.addAction(QString("Sub Items Off"), this, SLOT(slotToggleItemsOff())); - contextMenu.addAction(QString("Toggle Sub items"), this, SLOT(slotToggleItems())); - } - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE RicToggleItemsFeature -void RimUiTreeView::slotToggleItems() -{ - executeSelectionToggleOperation(TOGGLE); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE RicToggleItemsFeatureImpl -void RimUiTreeView::executeSelectionToggleOperation(SelectionToggleType toggleState) -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - - myModel->setObjectToggleStateForSelection(selectionModel()->selectedIndexes(), toggleState); - - return; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE RicToggleItemsOnFeature -void RimUiTreeView::slotToggleItemsOn() -{ - executeSelectionToggleOperation(TOGGLE_ON); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE RicToggleItemsOffFeature -void RimUiTreeView::slotToggleItemsOff() -{ - executeSelectionToggleOperation(TOGGLE_OFF); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::appendScriptItems(QMenu* menu, RimScriptCollection* scriptCollection) -{ - CVF_ASSERT(menu); - - QDir dir(scriptCollection->directory); - QMenu* subMenu = menu->addMenu(dir.dirName()); - - for (size_t i = 0; i < scriptCollection->calcScripts.size(); i++) - { - RimCalcScript* calcScript = scriptCollection->calcScripts[i]; - QFileInfo fi(calcScript->absolutePath()); - - QString menuText = fi.baseName(); - QAction* scriptAction = subMenu->addAction(menuText, this, SLOT(slotExecuteScriptForSelectedCases())); - - QModelIndex mi; - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - mi = myModel->getModelIndexFromPdmObject(calcScript); - } - - QString encodedModelIndex; - RimTreeViewStateSerializer::encodeStringFromModelIndex(mi, encodedModelIndex); - - scriptAction->setData(QVariant(encodedModelIndex)); - } - - for (size_t i = 0; i < scriptCollection->subDirectories.size(); i++) - { - RimScriptCollection* subDir = scriptCollection->subDirectories[i]; - - appendScriptItems(subMenu, subDir); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE RicWellPathsDeleteAllFeature -void RimUiTreeView::slotDeleteAllWellPaths() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - if (myModel) - { - myModel->deleteAllWellPaths(currentIndex()); - - caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); - if (uiItem && uiItem->dataObject()) - { - RimWellPathCollection* wellPathCollection = dynamic_cast(uiItem->dataObject().p()); - if (wellPathCollection) - { - wellPathCollection->scheduleGeometryRegenAndRedrawViews(); - } - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimUiTreeView::selectedUiItems(std::vector& objects) -{ - RimUiTreeModelPdm* myModel = dynamic_cast(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 = uiObj(uiItem->dataObject()); - objects.push_back(item); - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -// OBSOLETE - See RicCloseCaseFeature -void RimUiTreeView::slotCloseGeomechCase() -{ - RimUiTreeModelPdm* myModel = dynamic_cast(model()); - std::vector selection; - this->selectedUiItems(selection); - myModel->deleteGeoMechCases(selection); - -} diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeView.h b/ApplicationCode/ProjectDataModel/RimUiTreeView.h deleted file mode 100644 index ce21d3e9aa..0000000000 --- a/ApplicationCode/ProjectDataModel/RimUiTreeView.h +++ /dev/null @@ -1,139 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2011-2012 Statoil ASA, Ceetron AS -// -// ResInsight is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. -// -// See the GNU General Public License at -// for more details. -// -///////////////////////////////////////////////////////////////////////////////// - -#pragma once - -#include "cafPdmObject.h" - -#include - -class QItemSelection; -class RimIdenticalGridCaseGroup; -class RimScriptCollection; - -namespace caf { - class PdmObjectGroup; -} - -//================================================================================================== -/// -/// -//================================================================================================== -class RimUiTreeView : public QTreeView -{ - Q_OBJECT - -public: - RimUiTreeView(QWidget *parent = 0); - ~RimUiTreeView(); - - virtual void setModel(QAbstractItemModel* model); - - void selectedUiItems(std::vector& objects); - - -protected: - void contextMenuEvent(QContextMenuEvent* event); - -private slots: - void slotAddChildItem(); - void slotDeleteItem(); - - void slotAddRangeFilter(); - void slotAddSliceFilterI(); - void slotAddSliceFilterJ(); - void slotAddSliceFilterK(); - void slotDeleteRangeFilter(); - - void slotAddPropertyFilter(); - void slotDeletePropertyFilter(); - void slotAddGeoMechPropertyFilter(); - void slotDeleteGeoMechPropertyFilter(); - - void slotEditScript(); - void slotNewScript(); - void slotExecuteScript(); - void slotExecuteScriptForSelectedCases(); - - void slotAddView(); - void slotDeleteView(); - - void slotAddInputProperty(); - void slotDeleteObjectFromContainer(); - void slotWriteInputProperty(); - void slotWriteBinaryResultAsInputProperty(); - - void slotCloseCase(); - void slotCloseGeomechCase(); - - void slotNewStatisticsCase(); - void slotComputeStatistics(); - - void slotAddCaseGroup(); - void slotDeleteObjectFromPdmChildArrayField(); - - void slotAddScriptPath(); - void slotDeleteScriptPath(); - - void slotCopyPdmObjectToClipboard(); - void slotPastePdmObjects(); - - void slotSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected); - - void slotToggleItems(); - void slotToggleItemsOn(); - void slotToggleItemsOff(); - - void slotDeleteAllWellPaths(); - -signals: - void selectedObjectChanged( caf::PdmObjectHandle* pdmObject ); - -public: - enum SelectionToggleType - { - TOGGLE_ON, - TOGGLE_OFF, - TOGGLE, - TOGGLE_UNDEFINED - }; - - -private: - bool userConfirmedGridCaseGroupChange(const QModelIndexList& itemIndexList); - bool hasAnyStatisticsResults(RimIdenticalGridCaseGroup* gridCaseGroup); - - void createPdmObjectsFromClipboard(caf::PdmObjectGroup* objectGroup); - bool hasClipboardValidData(); - - virtual void keyPressEvent(QKeyEvent* keyEvent); - virtual void mousePressEvent(QMouseEvent* mouseEvent); - - virtual void dropEvent(QDropEvent* dropEvent); - - void executeSelectionToggleOperation(SelectionToggleType toggleState); - void appendToggleItemActions(QMenu& contextMenu); - - void setExpandedUpToRoot(const QModelIndex& itemIndex); - - void appendScriptItems(QMenu* menu, RimScriptCollection* scriptCollection); -private: - QAction* m_pasteAction; -}; - -