Merge pull request #8732 from OPM/summarymultiplot_updates2

Summary Multiplot updates
This commit is contained in:
jonjenssen
2022-03-25 11:39:12 +01:00
committed by GitHub
parent 8feb0c363b
commit 8d3f41ded8
32 changed files with 423 additions and 316 deletions
@@ -18,8 +18,12 @@
#include "RicNewSummaryMultiPlotFeature.h"
#include "RimMultiPlotCollection.h"
#include "RicSummaryPlotBuilder.h"
#include "RimSummaryCase.h"
#include "RimSummaryCaseCollection.h"
#include "RimSummaryMultiPlot.h"
#include "RimSummaryMultiPlotCollection.h"
#include "RimSummaryPlot.h"
#include "RicSummaryPlotBuilder.h"
@@ -29,27 +33,23 @@
#include <QAction>
RICF_SOURCE_INIT( RicNewSummaryMultiPlotFeature, "RicNewSummaryMultiPlotFeature", "createSummaryMultiPlot" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RicNewSummaryMultiPlotFeature::RicNewSummaryMultiPlotFeature()
{
CAF_PDM_InitFieldNoDefault( &m_plots, "plots", "Plots" );
}
CAF_CMD_SOURCE_INIT( RicNewSummaryMultiPlotFeature, "RicNewSummaryMultiPlotFeature" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicNewSummaryMultiPlotFeature::isCommandEnabled()
{
auto plots = selectedPlots();
std::vector<caf::PdmUiItem*> selectedUiItems;
caf::SelectionManager::instance()->selectedItems( selectedUiItems );
return !plots.empty() && plots.size() == selectedUiItems.size();
if ( selectedCollection( selectedUiItems ) ) return true;
std::vector<RimSummaryCase*> selectedIndividualSummaryCases;
std::vector<RimSummaryCaseCollection*> selectedEnsembles;
if ( selectedCases( &selectedIndividualSummaryCases, &selectedEnsembles ) ) return true;
return false;
}
//--------------------------------------------------------------------------------------------------
@@ -57,13 +57,25 @@ bool RicNewSummaryMultiPlotFeature::isCommandEnabled()
//--------------------------------------------------------------------------------------------------
void RicNewSummaryMultiPlotFeature::onActionTriggered( bool isChecked )
{
m_plots.v().clear();
auto plots = selectedPlots();
for ( RimPlot* plot : plots )
std::vector<caf::PdmUiItem*> selectedUiItems;
caf::SelectionManager::instance()->selectedItems( selectedUiItems );
RimSummaryMultiPlotCollection* coll = selectedCollection( selectedUiItems );
if ( coll )
{
m_plots.v().push_back( reinterpret_cast<uintptr_t>( plot ) );
std::vector<caf::PdmObjectHandle*> objects = {};
RimSummaryMultiPlot* multiPlot = RicSummaryPlotBuilder::createAndAppendSummaryMultiPlot( objects );
return;
}
std::vector<RimSummaryCase*> selectedIndividualSummaryCases;
std::vector<RimSummaryCaseCollection*> selectedEnsembles;
if ( selectedCases( &selectedIndividualSummaryCases, &selectedEnsembles ) )
{
RicSummaryPlotBuilder::createAndAppendDefaultSummaryMultiPlot( selectedIndividualSummaryCases, selectedEnsembles );
}
execute();
}
//--------------------------------------------------------------------------------------------------
@@ -71,47 +83,42 @@ void RicNewSummaryMultiPlotFeature::onActionTriggered( bool isChecked )
//--------------------------------------------------------------------------------------------------
void RicNewSummaryMultiPlotFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setText( "Create Summary Multi Plot from Selected Plots" );
actionToSetup->setText( "New Summary Plot" );
actionToSetup->setIcon( QIcon( ":/MultiPlot16x16.png" ) );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimSummaryPlot*> RicNewSummaryMultiPlotFeature::selectedPlots()
RimSummaryMultiPlotCollection* RicNewSummaryMultiPlotFeature::selectedCollection( std::vector<caf::PdmUiItem*>& items )
{
std::vector<caf::PdmUiItem*> uiItems;
caf::SelectionManager::instance()->selectedItems( uiItems );
std::vector<RimSummaryPlot*> plots;
for ( caf::PdmUiItem* uiItem : uiItems )
for ( caf::PdmUiItem* uiItem : items )
{
RimSummaryPlot* summaryPlot = dynamic_cast<RimSummaryPlot*>( uiItem );
if ( summaryPlot )
{
plots.push_back( summaryPlot );
}
RimSummaryMultiPlotCollection* coll = dynamic_cast<RimSummaryMultiPlotCollection*>( uiItem );
if ( coll ) return coll;
}
return plots;
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
caf::PdmScriptResponse RicNewSummaryMultiPlotFeature::execute()
bool RicNewSummaryMultiPlotFeature::selectedCases( std::vector<RimSummaryCase*>* selectedIndividualSummaryCases,
std::vector<RimSummaryCaseCollection*>* selectedEnsembles )
{
if ( !m_plots().empty() )
CAF_ASSERT( selectedIndividualSummaryCases && selectedEnsembles );
caf::SelectionManager::instance()->objectsByTypeStrict( selectedEnsembles );
if ( !selectedEnsembles->empty() )
{
std::vector<RimSummaryPlot*> plots;
for ( auto ptr : m_plots() )
{
plots.push_back( reinterpret_cast<RimSummaryPlot*>( ptr ) );
}
auto copyOfPlots = RicSummaryPlotBuilder::duplicateSummaryPlots( plots );
RicSummaryPlotBuilder::createAndAppendSummaryMultiPlot( copyOfPlots );
return true;
}
// Second try selected summary cases
caf::SelectionManager::instance()->objectsByTypeStrict( selectedIndividualSummaryCases );
if ( !selectedIndividualSummaryCases->empty() )
{
return true;
}
return caf::PdmScriptResponse();
return false;
}
@@ -18,26 +18,22 @@
#pragma once
#include "RicfCommandObject.h"
#include "cafCmdFeature.h"
#include "cafPdmField.h"
#include "cafPdmUiItem.h"
#include <vector>
class RimSummaryPlot;
class RimSummaryMultiPlotCollection;
class RimSummaryCase;
class RimSummaryCaseCollection;
//==================================================================================================
///
//==================================================================================================
class RicNewSummaryMultiPlotFeature : public caf::CmdFeature, public RicfCommandObject
class RicNewSummaryMultiPlotFeature : public caf::CmdFeature
{
RICF_HEADER_INIT;
public:
RicNewSummaryMultiPlotFeature();
caf::PdmScriptResponse execute() override;
CAF_CMD_HEADER_INIT;
protected:
bool isCommandEnabled() override;
@@ -45,7 +41,8 @@ protected:
void setupActionLook( QAction* actionToSetup ) override;
private:
static std::vector<RimSummaryPlot*> selectedPlots();
RimSummaryMultiPlotCollection* selectedCollection( std::vector<caf::PdmUiItem*>& items );
caf::PdmField<std::vector<uint64_t>> m_plots;
bool selectedCases( std::vector<RimSummaryCase*>* selectedIndividualSummaryCases,
std::vector<RimSummaryCaseCollection*>* selectedEnsembles );
};
@@ -110,6 +110,6 @@ void RicNewSummaryMultiPlotFromDataVectorFeature::onActionTriggered( bool isChec
//--------------------------------------------------------------------------------------------------
void RicNewSummaryMultiPlotFromDataVectorFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setText( "New Multi Summary Plot" );
actionToSetup->setText( "New Summary Plot" );
actionToSetup->setIcon( QIcon( ":/SummaryPlotLight16x16.png" ) );
}
@@ -18,6 +18,9 @@
#include "RicSummaryPlotBuilder.h"
#include "SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.h"
#include "SummaryPlotCommands/RicSummaryPlotFeatureImpl.h"
#include "RiaSummaryAddressAnalyzer.h"
#include "RiaSummaryTools.h"
@@ -357,7 +360,8 @@ RimSummaryMultiPlot*
plotCollection->updateAllRequiredEditors();
plotWindow->loadDataAndUpdate();
RiuPlotMainWindowTools::selectAsCurrentItem( plotWindow, true );
RiuPlotMainWindowTools::selectAsCurrentItem( plotWindow );
RiuPlotMainWindowTools::setExpanded( plotWindow, true );
return plotWindow;
}
@@ -369,7 +373,7 @@ void RicSummaryPlotBuilder::appendPlotsToMultiPlot( RimMultiPlot* multiPlot, con
{
for ( auto plot : plots )
{
// Remove the currently window controller, as this will be managed by the multi plot
// Remove the current window controller, as this will be managed by the multi plot
// This must be done before adding the plot to the multi plot to ensure that the viewer widget is recreated
plot->revokeMdiWindowStatus();
@@ -382,6 +386,50 @@ void RicSummaryPlotBuilder::appendPlotsToMultiPlot( RimMultiPlot* multiPlot, con
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryMultiPlot*
RicSummaryPlotBuilder::createAndAppendDefaultSummaryMultiPlot( const std::vector<RimSummaryCase*>& cases,
const std::vector<RimSummaryCaseCollection*>& ensembles )
{
RimProject* project = RimProject::current();
auto* plotCollection = project->mainPlotCollection()->summaryMultiPlotCollection();
auto* plotWindow = new RimSummaryMultiPlot();
plotWindow->setAsPlotMdiWindow();
plotCollection->addSummaryMultiPlot( plotWindow );
RimSummaryPlot* plot = new RimSummaryPlot();
plot->setAsPlotMdiWindow();
plot->enableAutoPlotTitle( true );
for ( auto sumCase : cases )
{
RicSummaryPlotFeatureImpl::addDefaultCurvesToPlot( plot, sumCase );
}
for ( auto ensemble : ensembles )
{
RicNewSummaryEnsembleCurveSetFeature::addDefaultCurveSets( plot, ensemble );
}
plot->applyDefaultCurveAppearances();
plot->loadDataAndUpdate();
plotCollection->updateConnectedEditors();
appendPlotsToSummaryMultiPlot( plotWindow, { plot } );
plotCollection->updateAllRequiredEditors();
plotWindow->loadDataAndUpdate();
plotWindow->updateAllRequiredEditors();
RiuPlotMainWindowTools::selectAsCurrentItem( plotWindow );
return plotWindow;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -391,7 +439,6 @@ RimSummaryMultiPlot* RicSummaryPlotBuilder::createAndAppendSummaryMultiPlot( con
auto* plotCollection = project->mainPlotCollection()->summaryMultiPlotCollection();
auto* plotWindow = new RimSummaryMultiPlot();
plotWindow->setMultiPlotTitle( QString( "Multi Summary Plot %1" ).arg( plotCollection->multiPlots().size() + 1 ) );
plotWindow->setAsPlotMdiWindow();
plotCollection->addSummaryMultiPlot( plotWindow );
@@ -399,10 +446,10 @@ RimSummaryMultiPlot* RicSummaryPlotBuilder::createAndAppendSummaryMultiPlot( con
plotCollection->updateAllRequiredEditors();
plotWindow->loadDataAndUpdate();
RiuPlotMainWindowTools::selectAsCurrentItem( plotWindow, true );
plotWindow->updateAllRequiredEditors();
RiuPlotMainWindowTools::selectAsCurrentItem( plotWindow );
return plotWindow;
}
@@ -75,6 +75,10 @@ public:
static RimMultiPlot* createAndAppendMultiPlot( const std::vector<RimPlot*>& plots );
static void appendPlotsToMultiPlot( RimMultiPlot* multiPlot, const std::vector<RimPlot*>& plots );
static RimSummaryMultiPlot*
createAndAppendDefaultSummaryMultiPlot( const std::vector<RimSummaryCase*>& cases,
const std::vector<RimSummaryCaseCollection*>& ensembles );
static RimSummaryMultiPlot* createAndAppendSummaryMultiPlot( const std::vector<RimSummaryPlot*>& plots );
static RimSummaryMultiPlot* createAndAppendSummaryMultiPlot( const std::vector<caf::PdmObjectHandle*>& objects );
static void appendPlotsToSummaryMultiPlot( RimSummaryMultiPlot* multiPlot, const std::vector<RimSummaryPlot*>& plots );