diff --git a/ApplicationCode/CMakeLists.txt b/ApplicationCode/CMakeLists.txt index 1e91d60ed5..86117aa398 100644 --- a/ApplicationCode/CMakeLists.txt +++ b/ApplicationCode/CMakeLists.txt @@ -141,6 +141,7 @@ list( APPEND REFERENCED_CMAKE_FILES Commands/ViewLink/CMakeLists_files.cmake Commands/WellLogCommands/CMakeLists_files.cmake Commands/WellPathCommands/CMakeLists_files.cmake + Commands/CrossSectionCommands/CMakeLists_files.cmake ) # Include source file lists from *.cmake files diff --git a/ApplicationCode/Commands/CrossSectionCommands/CMakeLists_files.cmake b/ApplicationCode/Commands/CrossSectionCommands/CMakeLists_files.cmake new file mode 100644 index 0000000000..cacef2158e --- /dev/null +++ b/ApplicationCode/Commands/CrossSectionCommands/CMakeLists_files.cmake @@ -0,0 +1,23 @@ + +# Use this workaround until we're on 2.8.3 on all platforms and can use CMAKE_CURRENT_LIST_DIR directly +if (${CMAKE_VERSION} VERSION_GREATER "2.8.2") + set(CEE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_DIR}/) +endif() + +set (SOURCE_GROUP_HEADER_FILES +${CEE_CURRENT_LIST_DIR}RicAppendCrossSectionFeature.h +) + +set (SOURCE_GROUP_SOURCE_FILES +${CEE_CURRENT_LIST_DIR}RicAppendCrossSectionFeature.cpp +) + +list(APPEND CODE_HEADER_FILES +${SOURCE_GROUP_HEADER_FILES} +) + +list(APPEND CODE_SOURCE_FILES +${SOURCE_GROUP_SOURCE_FILES} +) + +source_group( "CommandFeature\\CrossSection" FILES ${SOURCE_GROUP_HEADER_FILES} ${SOURCE_GROUP_SOURCE_FILES} ${CEE_CURRENT_LIST_DIR}CMakeLists_files.cmake ) diff --git a/ApplicationCode/Commands/CrossSectionCommands/RicAppendCrossSectionFeature.cpp b/ApplicationCode/Commands/CrossSectionCommands/RicAppendCrossSectionFeature.cpp new file mode 100644 index 0000000000..77c6b0a448 --- /dev/null +++ b/ApplicationCode/Commands/CrossSectionCommands/RicAppendCrossSectionFeature.cpp @@ -0,0 +1,111 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Statoil ASA +// Copyright (C) 2015- Ceetron Solutions 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 "RicAppendCrossSectionFeature.h" + +#include "RimCrossSection.h" +#include "RimCrossSectionCollection.h" + +#include "RiuMainWindow.h" + +#include "cafCmdExecCommandManager.h" +#include "cafSelectionManager.h" + +#include "cvfAssert.h" + +#include + +CAF_CMD_SOURCE_INIT(RicAppendCrossSectionFeature, "RicAppendCrossSectionFeature"); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicAppendCrossSectionFeature::isCommandEnabled() +{ + return true; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicAppendCrossSectionFeature::onActionTriggered(bool isChecked) +{ + std::vector collection; + caf::SelectionManager::instance()->objectsByType(&collection); + + CVF_ASSERT(collection.size() == 1); + + RicAppendCrossSectionFeatureCmd* cmd = new RicAppendCrossSectionFeatureCmd(collection[0]); + caf::CmdExecCommandManager::instance()->processExecuteCommand(cmd); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicAppendCrossSectionFeature::setupActionLook(QAction* actionToSetup) +{ +// actionToSetup->setIcon(QIcon(":/CellFilter_Values.png")); + actionToSetup->setText("New Cross Section"); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RicAppendCrossSectionFeatureCmd::RicAppendCrossSectionFeatureCmd(RimCrossSectionCollection* crossSectionCollection) + : CmdExecuteCommand(NULL), + m_crossSectionCollection(crossSectionCollection) +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RicAppendCrossSectionFeatureCmd::~RicAppendCrossSectionFeatureCmd() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RicAppendCrossSectionFeatureCmd::name() +{ + return "New Cross Section"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicAppendCrossSectionFeatureCmd::redo() +{ + CVF_ASSERT(m_crossSectionCollection); + + RimCrossSection* crossSection = new RimCrossSection(); + crossSection->name = QString("Cross Section (%1)").arg(m_crossSectionCollection->crossSections.size() + 1); + m_crossSectionCollection->crossSections.push_back(crossSection); + + m_crossSectionCollection->updateConnectedEditors(); + RiuMainWindow::instance()->setCurrentObjectInTreeView(crossSection); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicAppendCrossSectionFeatureCmd::undo() +{ +} diff --git a/ApplicationCode/Commands/CrossSectionCommands/RicAppendCrossSectionFeature.h b/ApplicationCode/Commands/CrossSectionCommands/RicAppendCrossSectionFeature.h new file mode 100644 index 0000000000..5d65cb6715 --- /dev/null +++ b/ApplicationCode/Commands/CrossSectionCommands/RicAppendCrossSectionFeature.h @@ -0,0 +1,62 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Statoil ASA +// Copyright (C) 2015- Ceetron Solutions 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 "cafCmdFeature.h" +#include "cafCmdExecuteCommand.h" +#include "cafPdmPointer.h" + +class RimCrossSectionCollection; + + +//================================================================================================== +/// +//================================================================================================== +class RicAppendCrossSectionFeatureCmd : public caf::CmdExecuteCommand +{ +public: + RicAppendCrossSectionFeatureCmd(RimCrossSectionCollection* crossSectionCollection); + virtual ~RicAppendCrossSectionFeatureCmd(); + + virtual QString name(); + virtual void redo(); + virtual void undo(); + +private: + caf::PdmPointer m_crossSectionCollection; +}; + + + +//================================================================================================== +/// +//================================================================================================== +class RicAppendCrossSectionFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + +protected: + // Overrides + virtual bool isCommandEnabled(); + virtual void onActionTriggered( bool isChecked ); + virtual void setupActionLook( QAction* actionToSetup ); +}; + + diff --git a/ApplicationCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationCode/ProjectDataModel/RimContextCommandBuilder.cpp index 68ff16993d..4ac94d6ceb 100644 --- a/ApplicationCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -23,6 +23,8 @@ #include "RimCaseCollection.h" #include "RimCellRangeFilter.h" #include "RimCellRangeFilterCollection.h" +#include "RimCrossSection.h" +#include "RimCrossSectionCollection.h" #include "RimEclipseCase.h" #include "RimEclipseCaseCollection.h" #include "RimEclipseCellColors.h" @@ -254,6 +256,15 @@ QStringList RimContextCommandBuilder::commandsFromSelection() { commandIds << "RicAddWellLogToPlotFeature"; } + else if (dynamic_cast(uiItem)) + { + commandIds << "RicAppendCrossSectionFeature"; + } + else if (dynamic_cast(uiItem)) + { + commandIds << "RicAppendCrossSectionFeature"; + commandIds << "RicDeleteItemFeature"; + } if (dynamic_cast(uiItem)) { diff --git a/ApplicationCode/ProjectDataModel/RimCrossSection.cpp b/ApplicationCode/ProjectDataModel/RimCrossSection.cpp index 24e11fbcc6..b34d515aed 100644 --- a/ApplicationCode/ProjectDataModel/RimCrossSection.cpp +++ b/ApplicationCode/ProjectDataModel/RimCrossSection.cpp @@ -24,21 +24,20 @@ namespace caf { - template<> - void caf::AppEnum< RimCrossSection::CrossSectionEnum >::setUp() - { - addItem(RimCrossSection::CS_WELL_PATH, "WELL_PATH", "Well Path"); - addItem(RimCrossSection::CS_SIMULATION_WELL, "SIMULATION_WELL", "Simulation Well"); - addItem(RimCrossSection::CS_USER_DEFINED, "USER_DEFINED", "User defined"); - setDefault(RimCrossSection::CS_WELL_PATH); - } +template<> +void caf::AppEnum< RimCrossSection::CrossSectionEnum >::setUp() +{ + addItem(RimCrossSection::CS_WELL_PATH, "WELL_PATH", "Well Path"); + addItem(RimCrossSection::CS_SIMULATION_WELL, "SIMULATION_WELL", "Simulation Well"); + addItem(RimCrossSection::CS_USER_DEFINED, "USER_DEFINED", "User defined"); + setDefault(RimCrossSection::CS_WELL_PATH); +} } CAF_PDM_SOURCE_INIT(RimCrossSection, "CrossSection"); - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -101,3 +100,19 @@ QList RimCrossSection::calculateValueOptions(const caf:: */ return options; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmFieldHandle* RimCrossSection::userDescriptionField() +{ + return &name; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmFieldHandle* RimCrossSection::objectToggleField() +{ + return &isActive; +} diff --git a/ApplicationCode/ProjectDataModel/RimCrossSection.h b/ApplicationCode/ProjectDataModel/RimCrossSection.h index 40144aa18c..f92849db46 100644 --- a/ApplicationCode/ProjectDataModel/RimCrossSection.h +++ b/ApplicationCode/ProjectDataModel/RimCrossSection.h @@ -55,6 +55,9 @@ public: caf::PdmPtrField wellPath; caf::PdmPtrField simulationWell; + virtual caf::PdmFieldHandle* userDescriptionField(); + virtual caf::PdmFieldHandle* objectToggleField(); + protected: virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue); // virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute); @@ -62,7 +65,6 @@ protected: // virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName); virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly); - - private: + };