From 2f8ec7785109bf840260d1d9770c91830e98f461 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 28 May 2026 16:06:39 +0200 Subject: [PATCH] #14061 Reorder user interface for summary/grid ensemble import * Agent docs: Recommend cmake --build over ninja when sharing build/ with Visual Studio * Disable Create Well Target Mapping for grid ensembles with individual grids * Move RimSummaryCaseMainCollection context menu items into appendMenuItems override * Reorganize import menus: split per-window, group submenus, rename actions, add Import/Export icons * Show icons on "New Statistics Case" and "New Grid Case Group" menu actions * Rename grid/summary import submenus to "More" and use the import icon --- ApplicationExeCode/Resources/ResInsight.qrc | 2 + ApplicationExeCode/Resources/export.svg | 1 + ApplicationExeCode/Resources/import.svg | 1 + .../RicEclipseCaseNewGroupFeature.cpp | 1 + .../RicImportEclipseCaseFeature.cpp | 2 +- .../RicNewStatisticsCaseFeature.cpp | 1 + .../Commands/RicImportEnsembleFeature.cpp | 5 +- ...RicImportGridAndSummaryEnsembleFeature.cpp | 2 +- .../RicNewWellTargetMappingFeature.cpp | 21 ++++++++ .../Commands/RicNewWellTargetMappingFeature.h | 1 + .../RimContextCommandBuilder.cpp | 14 ----- .../RimContextCommandBuilder.h | 1 - .../RimEclipseCaseCollection.cpp | 15 ++++-- .../ProjectDataModel/RimWellTargetMapping.cpp | 14 ++--- .../Summary/RimSummaryCaseMainCollection.cpp | 24 +++++++++ .../Summary/RimSummaryCaseMainCollection.h | 2 + .../UserInterface/RiuMainWindow.cpp | 4 +- .../UserInterface/RiuMenuBarBuildTools.cpp | 52 ++++++++++++------- .../UserInterface/RiuMenuBarBuildTools.h | 3 +- .../UserInterface/RiuPlotMainWindow.cpp | 4 +- docs/agents/build.md | 3 ++ 21 files changed, 119 insertions(+), 54 deletions(-) create mode 100644 ApplicationExeCode/Resources/export.svg create mode 100644 ApplicationExeCode/Resources/import.svg diff --git a/ApplicationExeCode/Resources/ResInsight.qrc b/ApplicationExeCode/Resources/ResInsight.qrc index a639764a1c..c28205b776 100644 --- a/ApplicationExeCode/Resources/ResInsight.qrc +++ b/ApplicationExeCode/Resources/ResInsight.qrc @@ -296,6 +296,8 @@ Cloud.svg CloudBlobs.svg arrow-swap.svg + export.svg + import.svg inspect.svg pin.svg Play.svg diff --git a/ApplicationExeCode/Resources/export.svg b/ApplicationExeCode/Resources/export.svg new file mode 100644 index 0000000000..1bea4212a7 --- /dev/null +++ b/ApplicationExeCode/Resources/export.svg @@ -0,0 +1 @@ + diff --git a/ApplicationExeCode/Resources/import.svg b/ApplicationExeCode/Resources/import.svg new file mode 100644 index 0000000000..9be38eddac --- /dev/null +++ b/ApplicationExeCode/Resources/import.svg @@ -0,0 +1 @@ + diff --git a/ApplicationLibCode/Commands/EclipseCommands/RicEclipseCaseNewGroupFeature.cpp b/ApplicationLibCode/Commands/EclipseCommands/RicEclipseCaseNewGroupFeature.cpp index 5bb9f0dcd9..5910534b2e 100644 --- a/ApplicationLibCode/Commands/EclipseCommands/RicEclipseCaseNewGroupFeature.cpp +++ b/ApplicationLibCode/Commands/EclipseCommands/RicEclipseCaseNewGroupFeature.cpp @@ -56,5 +56,6 @@ void RicEclipseCaseNewGroupFeature::onActionTriggered( bool isChecked ) //-------------------------------------------------------------------------------------------------- void RicEclipseCaseNewGroupFeature::setupActionLook( QAction* actionToSetup ) { + actionToSetup->setIcon( QIcon( ":/CreateGridCaseGroup16x16.png" ) ); actionToSetup->setText( "New Grid Case Group" ); } diff --git a/ApplicationLibCode/Commands/EclipseCommands/RicImportEclipseCaseFeature.cpp b/ApplicationLibCode/Commands/EclipseCommands/RicImportEclipseCaseFeature.cpp index 0fd4c59e03..43d1c06b30 100644 --- a/ApplicationLibCode/Commands/EclipseCommands/RicImportEclipseCaseFeature.cpp +++ b/ApplicationLibCode/Commands/EclipseCommands/RicImportEclipseCaseFeature.cpp @@ -252,5 +252,5 @@ QStringList RicImportEclipseCaseFeature::findPvdFilesToImport( const QStringList void RicImportEclipseCaseFeature::setupActionLook( QAction* actionToSetup ) { actionToSetup->setIcon( QIcon( ":/Case.svg" ) ); - actionToSetup->setText( "Import Eclipse Case" ); + actionToSetup->setText( "Import Simulation Grid" ); } diff --git a/ApplicationLibCode/Commands/EclipseCommands/RicNewStatisticsCaseFeature.cpp b/ApplicationLibCode/Commands/EclipseCommands/RicNewStatisticsCaseFeature.cpp index 51871357a2..e291e32752 100644 --- a/ApplicationLibCode/Commands/EclipseCommands/RicNewStatisticsCaseFeature.cpp +++ b/ApplicationLibCode/Commands/EclipseCommands/RicNewStatisticsCaseFeature.cpp @@ -64,6 +64,7 @@ void RicNewStatisticsCaseFeature::onActionTriggered( bool isChecked ) void RicNewStatisticsCaseFeature::setupActionLook( QAction* actionToSetup ) { actionToSetup->setText( "New Statistics Case" ); + actionToSetup->setIcon( QIcon( ":/Histogram16x16.png" ) ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicImportEnsembleFeature.cpp b/ApplicationLibCode/Commands/RicImportEnsembleFeature.cpp index c057053df3..21ac1b258f 100644 --- a/ApplicationLibCode/Commands/RicImportEnsembleFeature.cpp +++ b/ApplicationLibCode/Commands/RicImportEnsembleFeature.cpp @@ -75,7 +75,8 @@ RimSummaryEnsemble* RicImportEnsembleFeature::createSummaryEnsemble( std::vector void RicImportEnsembleFeature::onActionTriggered( bool isChecked ) { QString pathCacheName = "ENSEMBLE_FILES"; - auto result = RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialogWithGrouping( "Import Ensemble", pathCacheName ); + auto result = + RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialogWithGrouping( "Custom Summary Ensemble Import", pathCacheName ); QStringList fileNames = result.files; RiaDefines::EnsembleGroupingMode ensembleGroupingMode = result.groupingMode; RiaDefines::FileType fileType = RicRecursiveFileSearchDialog::mapSummaryFileType( result.fileType ); @@ -215,7 +216,7 @@ RimSummaryEnsemble* RicImportEnsembleFeature::groupSummaryCases( std::vectorsetIcon( QIcon( ":/SummaryEnsemble.svg" ) ); - actionToSetup->setText( "Import Ensemble" ); + actionToSetup->setText( "Custom Summary Ensemble Import..." ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicImportGridAndSummaryEnsembleFeature.cpp b/ApplicationLibCode/Commands/RicImportGridAndSummaryEnsembleFeature.cpp index 53387a4fe3..3133110568 100644 --- a/ApplicationLibCode/Commands/RicImportGridAndSummaryEnsembleFeature.cpp +++ b/ApplicationLibCode/Commands/RicImportGridAndSummaryEnsembleFeature.cpp @@ -236,5 +236,5 @@ void RicImportGridAndSummaryEnsembleFeature::onActionTriggered( bool isChecked ) void RicImportGridAndSummaryEnsembleFeature::setupActionLook( QAction* actionToSetup ) { actionToSetup->setIcon( QIcon( ":/GridAndSummaryEnsemble.svg" ) ); - actionToSetup->setText( "Grid and Summary Ensemble" ); + actionToSetup->setText( "Import Grid and Summary Ensemble" ); } diff --git a/ApplicationLibCode/Commands/RicNewWellTargetMappingFeature.cpp b/ApplicationLibCode/Commands/RicNewWellTargetMappingFeature.cpp index 6e31b4caa6..c167565718 100644 --- a/ApplicationLibCode/Commands/RicNewWellTargetMappingFeature.cpp +++ b/ApplicationLibCode/Commands/RicNewWellTargetMappingFeature.cpp @@ -31,6 +31,27 @@ CAF_CMD_SOURCE_INIT( RicNewWellTargetMappingFeature, "RicNewWellTargetMappingFeature" ); +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicNewWellTargetMappingFeature::isCommandEnabled() const +{ + if ( auto gridEnsembles = caf::selectedObjectsByTypeStrict(); !gridEnsembles.empty() ) + { + // Computation of well target mappings for individual grids is implemented in RimWellTargetMapping::generateEnsembleStatistics(). + // + // If there is a future need to support well target mappings for ensembles with individual grids, the implementation in + // RimWellTargetMapping::generateEnsembleStatistics() will need to be updated, and this check can be removed. + // + // The main performance reason is the memory consumption of loading all grids in the ensemble into memory at the same time, which is + // currently needed in order to compute the well target mapping for ensembles with individual grids. For ensembles with shared grid, + // only the shared grid needs to be loaded, which is much more memory efficient. + + return false; + } + return true; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicNewWellTargetMappingFeature.h b/ApplicationLibCode/Commands/RicNewWellTargetMappingFeature.h index 2e98e73f16..37d360adcb 100644 --- a/ApplicationLibCode/Commands/RicNewWellTargetMappingFeature.h +++ b/ApplicationLibCode/Commands/RicNewWellTargetMappingFeature.h @@ -28,6 +28,7 @@ class RicNewWellTargetMappingFeature : public caf::CmdFeature CAF_CMD_HEADER_INIT; private: + bool isCommandEnabled() const override; void onActionTriggered( bool isChecked ) override; void setupActionLook( QAction* actionToSetup ) override; }; diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index 89a277c4b5..83d87b57b7 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -127,7 +127,6 @@ #include "RimSummaryAddress.h" #include "RimSummaryAddressCollection.h" #include "RimSummaryCase.h" -#include "RimSummaryCaseMainCollection.h" #include "RimSummaryCurve.h" #include "RimSummaryCurveCollection.h" #include "RimSummaryMultiPlot.h" @@ -759,19 +758,6 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() { menuBuilder << "RicNewEnsembleCurveFilterFeature"; } - else if ( dynamic_cast( firstUiItem ) ) - { - menuBuilder << "RicImportSummaryCaseFeature"; - menuBuilder << "RicImportRevealSummaryCaseFeature"; - menuBuilder << "RicImportStimPlanSummaryCaseFeature"; - menuBuilder << "RicImportSummaryCasesFeature"; - menuBuilder << "RicImportSummaryGroupFeature"; - menuBuilder << "RicImportEnsembleFeature"; - menuBuilder << "RicNewDerivedEnsembleFeature"; - menuBuilder << "RicNewDerivedSummaryFeature"; - menuBuilder << "Separator"; - menuBuilder << "RicShowSummaryCurveCalculatorFeature"; - } else if ( dynamic_cast( firstUiItem ) ) { menuBuilder << "RicAddWellLogToPlotFeature"; diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.h b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.h index aef887348a..d8dae80087 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.h +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.h @@ -49,7 +49,6 @@ private: static void createExecuteScriptForCasesFeatureMenu( caf::CmdFeatureMenuBuilder& menuBuilder ); static void appendScriptItems( caf::CmdFeatureMenuBuilder& menuBuilder, RimScriptCollection* scriptCollection ); - static void appendPlotTemplateItems( caf::CmdFeatureMenuBuilder& menuBuilder, RimPlotTemplateFolderItem* plotTemplateRoot ); static int appendImportMenu( caf::CmdFeatureMenuBuilder& menuBuilder, bool addSeparatorBeforeMenu = false, bool addOsduMenuItem = false ); static int appendCreateCompletions( caf::CmdFeatureMenuBuilder& menuBuilder, bool addSeparatorBeforeMenu = false ); diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.cpp index b7fcde1c87..f279bfae03 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseCaseCollection.cpp @@ -121,10 +121,13 @@ void RimEclipseCaseCollection::removeCaseFromAllGroups( RimEclipseCase* reservoi //-------------------------------------------------------------------------------------------------- void RimEclipseCaseCollection::appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const { - menuBuilder.subMenuStart( "Import" ); + menuBuilder << "RicImportEclipseCaseFeature"; + menuBuilder << "RicImportGridAndSummaryEnsembleFeature"; + menuBuilder << "Separator"; + + menuBuilder.subMenuStart( "More", QIcon( ":/import.svg" ) ); menuBuilder << importMenuFeatureNames(); menuBuilder.subMenuEnd(); - menuBuilder << "RicEclipseCaseNewGroupFeature"; } //-------------------------------------------------------------------------------------------------- @@ -197,11 +200,13 @@ void RimEclipseCaseCollection::recomputeStatisticsForAllCaseGroups() //-------------------------------------------------------------------------------------------------- QStringList RimEclipseCaseCollection::importMenuFeatureNames() { - return { "RicImportEclipseCaseFeature", - "RicImportEclipseCasesFeature", + return { "RicImportEclipseCasesFeature", "RicImportEclipseCaseTimeStepFilterFeature", + "Separator", "RicImportInputEclipseCaseFeature", + "RicImportRoffCaseFeature", "Separator", "RicCreateGridCaseGroupFromFilesFeature", - "RicCreateGridCaseEnsemblesFromFilesFeature" }; + "RicCreateGridCaseEnsemblesFromFilesFeature", + "RicEclipseCaseNewGroupFeature" }; } diff --git a/ApplicationLibCode/ProjectDataModel/RimWellTargetMapping.cpp b/ApplicationLibCode/ProjectDataModel/RimWellTargetMapping.cpp index c05d8883e8..83ec6c3726 100644 --- a/ApplicationLibCode/ProjectDataModel/RimWellTargetMapping.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimWellTargetMapping.cpp @@ -386,6 +386,8 @@ void RimWellTargetMapping::generateCandidates( RimEclipseCase* eclipseCase, bool //-------------------------------------------------------------------------------------------------- void RimWellTargetMapping::generateEnsembleStatistics() { + // See RicNewWellTargetMappingFeature::isCommandEnabled() for comment on future support for ensembles with varying geometry. + auto ensemble = firstAncestorOrThisOfType(); if ( !ensemble ) return; @@ -649,13 +651,11 @@ void RimWellTargetMapping::onGenerateButtonClicked() } else if ( hasGridEnsembleParent ) { - // For RimReservoirGridEnsemble, generate for first case - // Full ensemble statistics support can be added later - if ( auto eclipseCase = firstCase() ) - { - bool setTimeStepInView = true; - generateCandidates( eclipseCase, setTimeStepInView ); - } + // For RimReservoirGridEnsemble implement two variants, shared grid and individual grids. Individual grids variant will require more + // work, and is not currently prioritized, so for now just show a warning if user tries to generate candidates for a + // RimReservoirGridEnsemble + // + // See RicNewWellTargetMappingFeature::isCommandEnabled() for comment on future support for ensembles with varying geometry. } else if ( auto eclipseCase = firstCase() ) { diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp index 63a9dc7547..2ba41c4799 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp @@ -53,6 +53,7 @@ #include "RimSummaryPlot.h" #include "RimWellRftPlot.h" +#include "cafCmdFeatureMenuBuilder.h" #include "cafPdmFieldReorderCapability.h" #include "cafProgressInfo.h" @@ -407,6 +408,29 @@ void RimSummaryCaseMainCollection::loadAllSummaryCaseData() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCaseMainCollection::appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const +{ + menuBuilder << "RicImportSummaryCaseFeature"; + menuBuilder << "RicImportGridAndSummaryEnsembleFeature"; + + menuBuilder.subMenuStart( "More", QIcon( ":/import.svg" ) ); + menuBuilder << "RicImportRevealSummaryCaseFeature"; + menuBuilder << "RicImportStimPlanSummaryCaseFeature"; + menuBuilder << "RicImportSummaryCasesFeature"; + menuBuilder << "RicImportSummaryGroupFeature"; + menuBuilder << "RicImportEnsembleFeature"; + menuBuilder.subMenuEnd(); + + menuBuilder << "Separator"; + menuBuilder << "RicNewDerivedEnsembleFeature"; + menuBuilder << "RicNewDerivedSummaryFeature"; + menuBuilder << "Separator"; + menuBuilder << "RicShowSummaryCurveCalculatorFeature"; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h index 03183f2d13..a6e44e950a 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h @@ -81,6 +81,8 @@ public: void updateEnsembleNames(); private: + void appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const override; + void initAfterRead() override; static void loadSummaryCaseData( const std::vector& summaryCases, bool extractStateFromFirstCase ); diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp index 5915dd28ae..bb3398653c 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp @@ -499,10 +499,10 @@ void RiuMainWindow::createMenus() fileMenu->addSeparator(); // Import menu actions - RiuMenuBarBuildTools::addImportMenuWithActions( this, fileMenu ); + RiuMenuBarBuildTools::addImportMenuForMainWindow( this, fileMenu ); // Export menu actions - QMenu* exportMenu = fileMenu->addMenu( "&Export" ); + QMenu* exportMenu = fileMenu->addMenu( QIcon( ":/export.svg" ), "&Export" ); exportMenu->addAction( cmdFeatureMgr->action( "RicSnapshotViewToFileFeature" ) ); exportMenu->addAction( m_snapshotAllViewsToFile ); exportMenu->addAction( cmdFeatureMgr->action( "RicAdvancedSnapshotExportFeature" ) ); diff --git a/ApplicationLibCode/UserInterface/RiuMenuBarBuildTools.cpp b/ApplicationLibCode/UserInterface/RiuMenuBarBuildTools.cpp index c43784150c..5013cd7750 100644 --- a/ApplicationLibCode/UserInterface/RiuMenuBarBuildTools.cpp +++ b/ApplicationLibCode/UserInterface/RiuMenuBarBuildTools.cpp @@ -109,32 +109,23 @@ QMenu* RiuMenuBarBuildTools::createDefaultHelpMenu( QMenuBar* menuBar ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuMenuBarBuildTools::addImportMenuWithActions( QObject* parent, QMenu* menu ) +void RiuMenuBarBuildTools::addImportMenuForMainWindow( QObject* parent, QMenu* menu ) { caf::CmdFeatureManager* cmdFeatureMgr = caf::CmdFeatureManager::instance(); if ( !parent || !menu || !cmdFeatureMgr ) return; - QMenu* importMenu = menu->addMenu( "&Import" ); + QMenu* importMenu = menu->addMenu( QIcon( ":/import.svg" ), "&Import" ); - QMenu* importEclipseMenu = importMenu->addMenu( QIcon( ":/Case48x48.png" ), "Eclipse Cases" ); - caf::CmdFeatureMenuBuilder::appendToMenu( importEclipseMenu, RimEclipseCaseCollection::importMenuFeatureNames() ); - - QMenu* importRoffMenu = importMenu->addMenu( QIcon( ":/Case48x48.png" ), "Roff Grid Models" ); - importRoffMenu->addAction( cmdFeatureMgr->action( "RicImportRoffCaseFeature" ) ); - - importMenu->addSeparator(); + importMenu->addAction( cmdFeatureMgr->action( "RicImportEclipseCaseFeature" ) ); importMenu->addAction( cmdFeatureMgr->action( "RicImportGridAndSummaryEnsembleFeature" ) ); importMenu->addSeparator(); - QMenu* importSummaryMenu = importMenu->addMenu( QIcon( ":/SummaryCase.svg" ), "Summary Cases" ); - importSummaryMenu->addAction( cmdFeatureMgr->action( "RicImportSummaryCaseFeature" ) ); - importSummaryMenu->addAction( cmdFeatureMgr->action( "RicImportSummaryCasesFeature" ) ); - importSummaryMenu->addAction( cmdFeatureMgr->action( "RicImportSummaryGroupFeature" ) ); - importSummaryMenu->addAction( cmdFeatureMgr->action( "RicImportEnsembleFeature" ) ); + QMenu* importEclipseMenu = importMenu->addMenu( QIcon( ":/import.svg" ), "More" ); + caf::CmdFeatureMenuBuilder::appendToMenu( importEclipseMenu, RimEclipseCaseCollection::importMenuFeatureNames() ); importMenu->addSeparator(); - QMenu* importGeoMechMenu = importMenu->addMenu( QIcon( ":/GeoMechCase24x24.png" ), "Geo Mechanical Cases" ); + QMenu* importGeoMechMenu = importMenu->addMenu( QIcon( ":/GeoMechCase24x24.png" ), "Geo Mechanical Models" ); importGeoMechMenu->addAction( cmdFeatureMgr->action( "RicImportGeoMechCaseFeature" ) ); importGeoMechMenu->addAction( cmdFeatureMgr->action( "RicImportGeoMechCaseTimeStepFilterFeature" ) ); importGeoMechMenu->addAction( cmdFeatureMgr->action( "RicImportElementPropertyFeature" ) ); @@ -148,9 +139,6 @@ void RiuMenuBarBuildTools::addImportMenuWithActions( QObject* parent, QMenu* men importWellMenu->addAction( cmdFeatureMgr->action( "RicImportWellMeasurementsFeature" ) ); importMenu->addSeparator(); - importMenu->addAction( cmdFeatureMgr->action( "RicImportObservedDataFeature" ) ); - importMenu->addAction( cmdFeatureMgr->action( "RicImportObservedFmuDataFeature" ) ); - importMenu->addAction( cmdFeatureMgr->action( "RicImportPressureDepthDataFeature" ) ); importMenu->addAction( cmdFeatureMgr->action( "RicImportFormationNamesFeature" ) ); importMenu->addAction( cmdFeatureMgr->action( "RicImportSurfacesFeature" ) ); importMenu->addAction( cmdFeatureMgr->action( "RicImportSeismicFeature" ) ); @@ -158,6 +146,34 @@ void RiuMenuBarBuildTools::addImportMenuWithActions( QObject* parent, QMenu* men RiuTools::enableAllActionsOnShow( parent, importMenu ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMenuBarBuildTools::addImportMenuForPlotWindow( QObject* parent, QMenu* menu ) +{ + caf::CmdFeatureManager* cmdFeatureMgr = caf::CmdFeatureManager::instance(); + + if ( !parent || !menu || !cmdFeatureMgr ) return; + + QMenu* importMenu = menu->addMenu( QIcon( ":/import.svg" ), "&Import" ); + + importMenu->addAction( cmdFeatureMgr->action( "RicImportSummaryCaseFeature" ) ); + importMenu->addAction( cmdFeatureMgr->action( "RicImportGridAndSummaryEnsembleFeature" ) ); + QMenu* importSummaryMenu = importMenu->addMenu( QIcon( ":/import.svg" ), "More" ); + importSummaryMenu->addAction( cmdFeatureMgr->action( "RicImportRevealSummaryCaseFeature" ) ); + importSummaryMenu->addAction( cmdFeatureMgr->action( "RicImportStimPlanSummaryCaseFeature" ) ); + importSummaryMenu->addAction( cmdFeatureMgr->action( "RicImportSummaryCasesFeature" ) ); + importSummaryMenu->addAction( cmdFeatureMgr->action( "RicImportSummaryGroupFeature" ) ); + importSummaryMenu->addAction( cmdFeatureMgr->action( "RicImportEnsembleFeature" ) ); + + importMenu->addSeparator(); + importMenu->addAction( cmdFeatureMgr->action( "RicImportObservedDataFeature" ) ); + importMenu->addAction( cmdFeatureMgr->action( "RicImportObservedFmuDataFeature" ) ); + importMenu->addAction( cmdFeatureMgr->action( "RicImportPressureDepthDataFeature" ) ); + + RiuTools::enableAllActionsOnShow( parent, importMenu ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuMenuBarBuildTools.h b/ApplicationLibCode/UserInterface/RiuMenuBarBuildTools.h index da16e49502..54ee494b40 100644 --- a/ApplicationLibCode/UserInterface/RiuMenuBarBuildTools.h +++ b/ApplicationLibCode/UserInterface/RiuMenuBarBuildTools.h @@ -33,7 +33,8 @@ QMenu* createDefaultEditMenu( QMenuBar* menuBar ); QMenu* createDefaultViewMenu( QMenuBar* menuBar ); QMenu* createDefaultHelpMenu( QMenuBar* menuBar ); -void addImportMenuWithActions( QObject* parent, QMenu* menu ); +void addImportMenuForMainWindow( QObject* parent, QMenu* menu ); +void addImportMenuForPlotWindow( QObject* parent, QMenu* menu ); void addSaveProjectActions( QMenu* menu ); void addCloseAndExitActions( QMenu* menu ); diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp index 3d0ca43809..9da72176aa 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp @@ -340,10 +340,10 @@ void RiuPlotMainWindow::createMenus() fileMenu->addSeparator(); // Import menu actions - RiuMenuBarBuildTools::addImportMenuWithActions( this, fileMenu ); + RiuMenuBarBuildTools::addImportMenuForPlotWindow( this, fileMenu ); // Export menu actions - QMenu* exportMenu = fileMenu->addMenu( "&Export" ); + QMenu* exportMenu = fileMenu->addMenu( QIcon( ":/export.svg" ), "&Export" ); exportMenu->addAction( cmdFeatureMgr->action( "RicSnapshotViewToFileFeature" ) ); exportMenu->addAction( cmdFeatureMgr->action( "RicSnapshotViewToPdfFeature" ) ); exportMenu->addAction( cmdFeatureMgr->action( "RicSnapshotAllPlotsToFileFeature" ) ); diff --git a/docs/agents/build.md b/docs/agents/build.md index a5ba448aa7..1496b4584b 100644 --- a/docs/agents/build.md +++ b/docs/agents/build.md @@ -91,6 +91,9 @@ cmake --build --preset x64-relwithdebinfo --target ResInsight cmake --build --preset x64-relwithdebinfo --target extract-projectfile-versions ``` +**Important — use `cmake --build`, not `ninja` directly, when sharing `build/` with Visual Studio:** +Visual Studio's "Open Folder" CMake integration uses its own bundled ninja (under `Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe`) and writes that path into `CMAKE_MAKE_PROGRAM`. If a CLI shell has a different `ninja.exe` first on `PATH`, invoking `ninja` directly produces a `.ninja_log` whose format the other ninja can't read (`ninja: warning: build log version is too old; starting over`), so both VS and the CLI repeatedly rebuild everything from scratch. `cmake --build build` dispatches to `CMAKE_MAKE_PROGRAM`, guaranteeing the same ninja binary as VS. If a build unexpectedly rebuilds far more than expected, verify with `where ninja` and `grep CMAKE_MAKE_PROGRAM build/CMakeCache.txt`. + ## Build Presets Available CMake presets in `CMakePresets.json`: