From 828e8ec4406dd24e89dbbf3df1e76b566a21e3e8 Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Wed, 11 May 2022 19:46:17 +0200 Subject: [PATCH] Show templates as separate project explorer tab. (#8902) Add templates as separate project explorer tab. Add support for renaming and editing templates --- .../Application/CMakeLists_files.cmake | 1 - ...ummaryCurvesForSummaryAddressesFeature.cpp | 4 +- ...SummaryPlotsForSummaryAddressesFeature.cpp | 4 +- .../CMakeLists_files.cmake | 4 + .../RicEditPlotTemplateFeature.cpp | 92 +++++++++++++++++ .../RicEditPlotTemplateFeature.h | 34 +++++++ .../RicReloadPlotTemplatesFeature.h | 2 - .../RicRenamePlotTemplateFeature.cpp | 99 +++++++++++++++++++ .../RicRenamePlotTemplateFeature.h | 34 +++++++ .../RimPlotTemplateFolderItem.cpp | 2 +- .../RimContextCommandBuilder.cpp | 2 + .../ProjectDataModel/RimProject.cpp | 18 ++-- .../ProjectDataModel/RimProject.h | 2 +- .../UserInterface/RiuDockWidgetTools.cpp | 8 ++ .../UserInterface/RiuDockWidgetTools.h | 1 + .../UserInterface/RiuPlotMainWindow.cpp | 22 ++++- .../UserInterface/RiuPlotMainWindow.h | 2 + 17 files changed, 310 insertions(+), 21 deletions(-) create mode 100644 ApplicationLibCode/Commands/PlotTemplateCommands/RicEditPlotTemplateFeature.cpp create mode 100644 ApplicationLibCode/Commands/PlotTemplateCommands/RicEditPlotTemplateFeature.h create mode 100644 ApplicationLibCode/Commands/PlotTemplateCommands/RicRenamePlotTemplateFeature.cpp create mode 100644 ApplicationLibCode/Commands/PlotTemplateCommands/RicRenamePlotTemplateFeature.h diff --git a/ApplicationLibCode/Application/CMakeLists_files.cmake b/ApplicationLibCode/Application/CMakeLists_files.cmake index f69791efcb..6a3a6e2c22 100644 --- a/ApplicationLibCode/Application/CMakeLists_files.cmake +++ b/ApplicationLibCode/Application/CMakeLists_files.cmake @@ -73,7 +73,6 @@ set(QT_MOC_HEADERS ${CMAKE_CURRENT_LIST_DIR}/RiaConsoleApplication.h ${CMAKE_CURRENT_LIST_DIR}/RiaGuiApplication.h ${CMAKE_CURRENT_LIST_DIR}/RiaCompletionTypeCalculationScheduler.h - ${CMAKE_CURRENT_LIST_DIR}/RiaViewRedrawScheduler.h ${CMAKE_CURRENT_LIST_DIR}/RiaPlotWindowRedrawScheduler.h ${CMAKE_CURRENT_LIST_DIR}/RiaScheduler.h ) diff --git a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryCurvesForSummaryAddressesFeature.cpp b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryCurvesForSummaryAddressesFeature.cpp index ed05b092d0..b0009c0677 100644 --- a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryCurvesForSummaryAddressesFeature.cpp +++ b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryCurvesForSummaryAddressesFeature.cpp @@ -66,9 +66,7 @@ void RicAppendSummaryCurvesForSummaryAddressesFeature::onActionTriggered( bool i //-------------------------------------------------------------------------------------------------- void RicAppendSummaryCurvesForSummaryAddressesFeature::setupActionLook( QAction* actionToSetup ) { - QString objectType = "Addresses"; - - auto text = QString( "Append Curves For " ) + objectType; + auto text = QString( "Append Curves For Vector" ); actionToSetup->setText( text ); actionToSetup->setIcon( QIcon( ":/SummaryCurve16x16.png" ) ); } diff --git a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryAddressesFeature.cpp b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryAddressesFeature.cpp index e7f13dac50..76f5cce569 100644 --- a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryAddressesFeature.cpp +++ b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryAddressesFeature.cpp @@ -82,9 +82,7 @@ void RicAppendSummaryPlotsForSummaryAddressesFeature::onActionTriggered( bool is //-------------------------------------------------------------------------------------------------- void RicAppendSummaryPlotsForSummaryAddressesFeature::setupActionLook( QAction* actionToSetup ) { - QString objectType = "Addresses"; - - auto text = QString( "Append Plots For " ) + objectType; + auto text = QString( "Append Plots For Vector" ); actionToSetup->setText( text ); actionToSetup->setIcon( QIcon( ":/SummaryPlotLight16x16.png" ) ); } diff --git a/ApplicationLibCode/Commands/PlotTemplateCommands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/PlotTemplateCommands/CMakeLists_files.cmake index 6b7149beaa..40a576e918 100644 --- a/ApplicationLibCode/Commands/PlotTemplateCommands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/PlotTemplateCommands/CMakeLists_files.cmake @@ -6,6 +6,8 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicSaveMultiPlotTemplateFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicSaveMultiPlotTemplateFeatureSettings.h ${CMAKE_CURRENT_LIST_DIR}/RicCreateMultiPlotFromSelectionFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicRenamePlotTemplateFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicEditPlotTemplateFeature.h ) set(SOURCE_GROUP_SOURCE_FILES @@ -16,6 +18,8 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicSaveMultiPlotTemplateFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicSaveMultiPlotTemplateFeatureSettings.cpp ${CMAKE_CURRENT_LIST_DIR}/RicCreateMultiPlotFromSelectionFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicRenamePlotTemplateFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicEditPlotTemplateFeature.cpp ) list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) diff --git a/ApplicationLibCode/Commands/PlotTemplateCommands/RicEditPlotTemplateFeature.cpp b/ApplicationLibCode/Commands/PlotTemplateCommands/RicEditPlotTemplateFeature.cpp new file mode 100644 index 0000000000..7af55df646 --- /dev/null +++ b/ApplicationLibCode/Commands/PlotTemplateCommands/RicEditPlotTemplateFeature.cpp @@ -0,0 +1,92 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// 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 "RicEditPlotTemplateFeature.h" + +#include "RiaApplication.h" +#include "RiaLogging.h" + +#include "PlotTemplates/RimPlotTemplateFileItem.h" +#include "RimProject.h" + +#include "RiuPlotMainWindow.h" + +#include "cafSelectionManager.h" + +#include +#include +#include +#include +#include +#include + +CAF_CMD_SOURCE_INIT( RicEditPlotTemplateFeature, "RicEditPlotTemplateFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicEditPlotTemplateFeature::isCommandEnabled() +{ + std::vector uiItems; + caf::SelectionManager::instance()->selectedItems( uiItems ); + if ( uiItems.size() != 1 ) return false; + + RimPlotTemplateFileItem* file = dynamic_cast( uiItems[0] ); + return ( file != nullptr ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicEditPlotTemplateFeature::onActionTriggered( bool isChecked ) +{ + std::vector uiItems; + caf::SelectionManager::instance()->selectedItems( uiItems ); + + if ( uiItems.size() != 1 ) return; + + RimPlotTemplateFileItem* file = dynamic_cast( uiItems[0] ); + if ( file == nullptr ) return; + + RiaApplication* app = RiaApplication::instance(); + QString scriptEditor = app->scriptEditorPath(); + if ( !scriptEditor.isEmpty() ) + { + QStringList arguments; + arguments << file->absoluteFilePath(); + + QProcess* myProcess = new QProcess( this ); + myProcess->start( scriptEditor, arguments ); + + if ( !myProcess->waitForStarted( 1000 ) ) + { + RiaLogging::errorInMessageBox( RiuPlotMainWindow::instance(), + "Text editor", + "Failed to start text editor executable\n" + scriptEditor ); + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicEditPlotTemplateFeature::setupActionLook( QAction* actionToSetup ) +{ + actionToSetup->setText( "Edit" ); + actionToSetup->setIcon( QIcon( ":/SummaryTemplate16x16.png" ) ); +} diff --git a/ApplicationLibCode/Commands/PlotTemplateCommands/RicEditPlotTemplateFeature.h b/ApplicationLibCode/Commands/PlotTemplateCommands/RicEditPlotTemplateFeature.h new file mode 100644 index 0000000000..e348d29a27 --- /dev/null +++ b/ApplicationLibCode/Commands/PlotTemplateCommands/RicEditPlotTemplateFeature.h @@ -0,0 +1,34 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// 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" + +//================================================================================================== +/// +//================================================================================================== +class RicEditPlotTemplateFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + +protected: + bool isCommandEnabled() override; + void onActionTriggered( bool isChecked ) override; + void setupActionLook( QAction* actionToSetup ) override; +}; diff --git a/ApplicationLibCode/Commands/PlotTemplateCommands/RicReloadPlotTemplatesFeature.h b/ApplicationLibCode/Commands/PlotTemplateCommands/RicReloadPlotTemplatesFeature.h index c5c298de2d..4bb9f0c9e2 100644 --- a/ApplicationLibCode/Commands/PlotTemplateCommands/RicReloadPlotTemplatesFeature.h +++ b/ApplicationLibCode/Commands/PlotTemplateCommands/RicReloadPlotTemplatesFeature.h @@ -20,8 +20,6 @@ #include "cafCmdFeature.h" -class RimSummaryPlot; - //================================================================================================== /// //================================================================================================== diff --git a/ApplicationLibCode/Commands/PlotTemplateCommands/RicRenamePlotTemplateFeature.cpp b/ApplicationLibCode/Commands/PlotTemplateCommands/RicRenamePlotTemplateFeature.cpp new file mode 100644 index 0000000000..78672c3a31 --- /dev/null +++ b/ApplicationLibCode/Commands/PlotTemplateCommands/RicRenamePlotTemplateFeature.cpp @@ -0,0 +1,99 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// 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 "RicRenamePlotTemplateFeature.h" + +#include "PlotTemplates/RimPlotTemplateFileItem.h" + +#include "RiuPlotMainWindow.h" + +#include "cafSelectionManager.h" + +#include +#include +#include +#include +#include +#include + +CAF_CMD_SOURCE_INIT( RicRenamePlotTemplateFeature, "RicRenamePlotTemplateFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicRenamePlotTemplateFeature::isCommandEnabled() +{ + std::vector uiItems; + caf::SelectionManager::instance()->selectedItems( uiItems ); + if ( uiItems.size() != 1 ) return false; + + RimPlotTemplateFileItem* file = dynamic_cast( uiItems[0] ); + return ( file != nullptr ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicRenamePlotTemplateFeature::onActionTriggered( bool isChecked ) +{ + std::vector uiItems; + caf::SelectionManager::instance()->selectedItems( uiItems ); + + if ( uiItems.size() != 1 ) return; + + RimPlotTemplateFileItem* file = dynamic_cast( uiItems[0] ); + if ( file == nullptr ) return; + + QFileInfo fi( file->absoluteFilePath() ); + + QWidget* parent = RiuPlotMainWindow::instance(); + + bool ok; + QString newname = + QInputDialog::getText( parent, "Rename Plot Template", "Enter new name:", QLineEdit::Normal, fi.baseName(), &ok ); + + if ( !ok ) return; + + newname = newname.trimmed(); + + if ( newname.isEmpty() || newname.contains( "/" ) || newname.contains( "\\" ) ) + { + QMessageBox::critical( parent, "Rename failed", "Invalid name given.", QMessageBox::Ok ); + return; + } + + QString newPath = fi.absolutePath() + "/" + newname + "." + fi.completeSuffix(); + + if ( !QFile::rename( file->absoluteFilePath(), newPath ) ) + { + QMessageBox::critical( parent, "Rename failed", "Unable to rename the selected plot template.", QMessageBox::Ok ); + return; + } + + file->setFilePath( newPath ); + file->updateConnectedEditors(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicRenamePlotTemplateFeature::setupActionLook( QAction* actionToSetup ) +{ + actionToSetup->setText( "Rename" ); + actionToSetup->setIcon( QIcon( ":/SummaryTemplate16x16.png" ) ); +} diff --git a/ApplicationLibCode/Commands/PlotTemplateCommands/RicRenamePlotTemplateFeature.h b/ApplicationLibCode/Commands/PlotTemplateCommands/RicRenamePlotTemplateFeature.h new file mode 100644 index 0000000000..ff978988ec --- /dev/null +++ b/ApplicationLibCode/Commands/PlotTemplateCommands/RicRenamePlotTemplateFeature.h @@ -0,0 +1,34 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// 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" + +//================================================================================================== +/// +//================================================================================================== +class RicRenamePlotTemplateFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + +protected: + bool isCommandEnabled() override; + void onActionTriggered( bool isChecked ) override; + void setupActionLook( QAction* actionToSetup ) override; +}; diff --git a/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.cpp b/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.cpp index 1d964db4e6..89138401af 100644 --- a/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.cpp +++ b/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.cpp @@ -35,7 +35,7 @@ CAF_PDM_SOURCE_INIT( RimPlotTemplateFolderItem, "PlotTemplateCollection" ); //-------------------------------------------------------------------------------------------------- RimPlotTemplateFolderItem::RimPlotTemplateFolderItem() { - CAF_PDM_InitObject( "PlotTemplateCollection", ":/Folder.png" ); + CAF_PDM_InitObject( "Plot Templates", ":/Folder.png" ); CAF_PDM_InitFieldNoDefault( &m_folderName, "FolderName", "Folder" ); CAF_PDM_InitFieldNoDefault( &m_fileNames, "FileNames", "" ); diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index f8872c3b33..e24f84367c 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -1022,6 +1022,8 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() else if ( dynamic_cast( firstUiItem ) || dynamic_cast( firstUiItem ) ) { + menuBuilder << "RicRenamePlotTemplateFeature"; + menuBuilder << "RicEditPlotTemplateFeature"; menuBuilder << "RicReloadPlotTemplatesFeature"; } else if ( dynamic_cast( firstUiItem ) ) diff --git a/ApplicationLibCode/ProjectDataModel/RimProject.cpp b/ApplicationLibCode/ProjectDataModel/RimProject.cpp index ebd9780d3d..0934a8534f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimProject.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimProject.cpp @@ -214,9 +214,9 @@ RimProject::RimProject( void ) mainPlotCollection = new RimMainPlotCollection(); - CAF_PDM_InitFieldNoDefault( &m_plotTemplateFolderItem, "PlotTemplateCollection", "Plot Templates" ); - m_plotTemplateFolderItem = new RimPlotTemplateFolderItem(); - m_plotTemplateFolderItem.xmlCapability()->disableIO(); + CAF_PDM_InitFieldNoDefault( &m_plotTemplateTopFolder, "PlotTemplateCollection", "Plot Templates" ); + m_plotTemplateTopFolder = new RimPlotTemplateFolderItem(); + m_plotTemplateTopFolder.xmlCapability()->disableIO(); // For now, create a default first oilfield that contains the rest of the project oilFields.push_back( new RimOilField ); @@ -403,12 +403,12 @@ void RimProject::setScriptDirectories( const QString& scriptDirectories ) //-------------------------------------------------------------------------------------------------- void RimProject::setPlotTemplateFolders( const QStringList& plotTemplateFolders ) { - if ( !m_plotTemplateFolderItem() ) + if ( !m_plotTemplateTopFolder() ) { - m_plotTemplateFolderItem = new RimPlotTemplateFolderItem(); + m_plotTemplateTopFolder = new RimPlotTemplateFolderItem(); } - m_plotTemplateFolderItem->createRootFolderItemsFromFolderPaths( plotTemplateFolders ); + m_plotTemplateTopFolder->createRootFolderItemsFromFolderPaths( plotTemplateFolders ); } //-------------------------------------------------------------------------------------------------- @@ -1322,7 +1322,7 @@ RimMeasurement* RimProject::measurement() const //-------------------------------------------------------------------------------------------------- RimPlotTemplateFolderItem* RimProject::rootPlotTemlateItem() const { - return m_plotTemplateFolderItem; + return m_plotTemplateTopFolder; } //-------------------------------------------------------------------------------------------------- @@ -1461,6 +1461,10 @@ void RimProject::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, Q { uiTreeOrdering.add( scriptCollection() ); } + else if ( uiConfigName == "PlotWindow.Templates" ) + { + uiTreeOrdering.add( m_plotTemplateTopFolder ); + } else if ( uiConfigName == "MainWindow.DataSources" ) { RimOilField* oilField = activeOilField(); diff --git a/ApplicationLibCode/ProjectDataModel/RimProject.h b/ApplicationLibCode/ProjectDataModel/RimProject.h index 7a89de66a8..3e844e7c89 100644 --- a/ApplicationLibCode/ProjectDataModel/RimProject.h +++ b/ApplicationLibCode/ProjectDataModel/RimProject.h @@ -212,7 +212,7 @@ private: caf::PdmField m_projectFileVersionString; caf::PdmChildField m_dialogData; - caf::PdmChildField m_plotTemplateFolderItem; + caf::PdmChildField m_plotTemplateTopFolder; caf::PdmField m_show3DWindow; caf::PdmField m_showPlotWindow; diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp index b57bb66482..24f21e308d 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp @@ -148,6 +148,14 @@ QString RiuDockWidgetTools::plotMainWindowPlotsTreeName() return "plotMainWindow_dockPlotsTree"; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDockWidgetTools::plotMainWindowTemplateTreeName() +{ + return "plotMainWindow_dockTemplatesTree"; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h index 30b40243d3..dc96e9114b 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h @@ -54,6 +54,7 @@ public: static QString plotMainWindowDataSourceTreeName(); static QString plotMainWindowPlotsTreeName(); + static QString plotMainWindowTemplateTreeName(); static QString plotMainWindowScriptsTreeName(); static QString plotMainWindowPropertyEditorName(); diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp index d7f4361d5e..8ada2ed27a 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp @@ -121,6 +121,18 @@ QString RiuPlotMainWindow::mainWindowName() return "RiuPlotMainWindow"; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuPlotMainWindow* RiuPlotMainWindow::instance() +{ + if ( RiaGuiApplication::isRunning() ) + { + return RiaGuiApplication::instance()->mainPlotWindow(); + } + return nullptr; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -460,11 +472,15 @@ void RiuPlotMainWindow::refreshToolbars() //-------------------------------------------------------------------------------------------------- void RiuPlotMainWindow::createDockPanels() { - const int nTreeViews = 3; - const std::vector treeViewTitles = { "Plots", "Data Sources", "Scripts" }; - const std::vector treeViewConfigs = { "PlotWindow.Plots", "PlotWindow.DataSources", "PlotWindow.Scripts" }; + const int nTreeViews = 4; + const std::vector treeViewTitles = { "Plots", "Data Sources", "Templates", "Scripts" }; + const std::vector treeViewConfigs = { "PlotWindow.Plots", + "PlotWindow.DataSources", + "PlotWindow.Templates", + "PlotWindow.Scripts" }; const std::vector treeViewDockNames = { RiuDockWidgetTools::plotMainWindowPlotsTreeName(), RiuDockWidgetTools::plotMainWindowDataSourceTreeName(), + RiuDockWidgetTools::plotMainWindowTemplateTreeName(), RiuDockWidgetTools::plotMainWindowScriptsTreeName() }; createTreeViews( nTreeViews ); diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h index 29c94fedbc..53759b548e 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h @@ -58,6 +58,8 @@ public: RiuPlotMainWindow(); ~RiuPlotMainWindow() override; + static RiuPlotMainWindow* instance(); + QString mainWindowName() override; void initializeGuiNewProjectLoaded();