Show progress bar when appending plots to multiplot (#8976)

* Show progress bar when appending plots to multiplot
* Stop plot manager from going crazy creating plots when filter text is blank
* Speed up plot manager create plot
This commit is contained in:
jonjenssen 2022-05-30 11:39:05 +02:00 committed by GitHub
parent 17f169e513
commit db589c7e32
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 23 deletions

View File

@ -35,6 +35,7 @@
#include "RimSummaryPlot.h"
#include "cafAssert.h"
#include "cafProgressInfo.h"
#include "cafSelectionManager.h"
#include <QAction>
@ -63,6 +64,8 @@ void RicAppendSummaryPlotsForObjectsFeature::appendPlots( RimSummaryMultiPlot* s
auto sourcePlots = summaryMultiPlot->summaryPlots();
auto plotsForOneInstance = plotsForOneInstanceOfObjectType( sourcePlots, selectionType );
caf::ProgressInfo info( sumAddressCollections.size(), "Appending plots..." );
for ( auto summaryAdrCollection : sumAddressCollections )
{
auto duplicatedPlots = RicSummaryPlotBuilder::duplicateSummaryPlots( plotsForOneInstance );
@ -94,6 +97,7 @@ void RicAppendSummaryPlotsForObjectsFeature::appendPlots( RimSummaryMultiPlot* s
duplicatedPlot->resolveReferencesRecursively();
}
}
info.incrementProgress();
}
summaryMultiPlot->loadDataAndUpdate();

View File

@ -28,6 +28,7 @@
#include "RimSummaryMultiPlot.h"
#include "RimSummaryPlot.h"
#include "cafProgressInfo.h"
#include "cafSelectionManager.h"
#include <QAction>
@ -43,6 +44,8 @@ void RicAppendSummaryPlotsForSummaryAddressesFeature::appendPlotsForAddresses( R
if ( !summaryMultiPlot ) return;
if ( addresses.empty() ) return;
caf::ProgressInfo info( addresses.size(), "Appending plots..." );
for ( auto adr : addresses )
{
auto* plot = new RimSummaryPlot();
@ -50,6 +53,8 @@ void RicAppendSummaryPlotsForSummaryAddressesFeature::appendPlotsForAddresses( R
plot->handleDroppedObjects( { adr } );
summaryMultiPlot->addPlot( plot );
info.incrementProgress();
}
}

View File

@ -478,11 +478,11 @@ RimSummaryMultiPlot* RicSummaryPlotBuilder::createAndAppendSummaryMultiPlot( con
appendPlotsToSummaryMultiPlot( summaryMultiPlot, plots );
summaryMultiPlot->setDefaultRangeAggregationSteppingDimension();
summaryMultiPlot->zoomAll();
plotCollection->updateAllRequiredEditors();
summaryMultiPlot->loadDataAndUpdate();
summaryMultiPlot->updateAllRequiredEditors();
summaryMultiPlot->zoomAll();
if ( !plots.empty() )
{
@ -527,6 +527,7 @@ RimSummaryMultiPlot* RicSummaryPlotBuilder::createAndAppendSingleSummaryMultiPlo
void RicSummaryPlotBuilder::appendPlotsToSummaryMultiPlot( RimSummaryMultiPlot* multiPlot,
const std::vector<RimSummaryPlot*>& plots )
{
multiPlot->startBatchAddOperation();
for ( auto plot : plots )
{
plot->revokeMdiWindowStatus();
@ -535,9 +536,8 @@ void RicSummaryPlotBuilder::appendPlotsToSummaryMultiPlot( RimSummaryMultiPlot*
plot->resolveReferencesRecursively();
plot->setShowWindow( true );
plot->loadDataAndUpdate();
}
multiPlot->endBatchAddOperation();
}
//--------------------------------------------------------------------------------------------------

View File

@ -46,6 +46,7 @@ CAF_PDM_SOURCE_INIT( RimMultiPlot, "MultiPlot" );
//--------------------------------------------------------------------------------------------------
RimMultiPlot::RimMultiPlot()
: m_isValid( true )
, m_delayPlotUpdatesDuringBatchAdd( false )
{
CAF_PDM_InitObject( "Multi Plot", ":/MultiPlot16x16.png" );
@ -197,9 +198,12 @@ void RimMultiPlot::insertPlot( RimPlot* plot, size_t index )
plot->createPlotWidget( m_viewer );
m_viewer->insertPlot( plot->plotWidget(), index );
}
plot->updateAfterInsertingIntoMultiPlot();
onPlotAdditionOrRemoval();
if ( !m_delayPlotUpdatesDuringBatchAdd )
{
plot->updateAfterInsertingIntoMultiPlot();
onPlotAdditionOrRemoval();
}
}
}
@ -916,3 +920,20 @@ bool RimMultiPlot::isValid() const
{
return m_isValid;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimMultiPlot::startBatchAddOperation()
{
m_delayPlotUpdatesDuringBatchAdd = true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimMultiPlot::endBatchAddOperation()
{
m_delayPlotUpdatesDuringBatchAdd = false;
onPlotAdditionOrRemoval();
}

View File

@ -69,6 +69,9 @@ public:
void removePlot( RimPlot* plot ) override;
void movePlotsToThis( const std::vector<RimPlot*>& plots, int insertAtPosition );
virtual void startBatchAddOperation();
virtual void endBatchAddOperation();
virtual void removePlotNoUpdate( RimPlot* plot );
virtual void updateAfterPlotRemove();
@ -169,6 +172,8 @@ protected:
friend class RiuMultiPlotBook;
QPointer<RiuMultiPlotBook> m_viewer;
bool m_delayPlotUpdatesDuringBatchAdd;
private:
caf::PdmChildArrayField<RimPlot*> m_plots;

View File

@ -382,6 +382,8 @@ void RimSummaryPlotManager::replaceCurves()
//--------------------------------------------------------------------------------------------------
void RimSummaryPlotManager::createNewPlot()
{
if ( m_filterText().trimmed().isEmpty() ) return;
std::vector<RimSummaryCase*> summaryCases;
std::vector<RimSummaryCaseCollection*> ensembles;
findFilteredSummaryCasesAndEnsembles( summaryCases, ensembles );
@ -400,24 +402,8 @@ void RimSummaryPlotManager::createNewPlot()
auto plots = plotBuilder.createPlots();
if ( m_createMultiPlot )
{
{
auto summaryPlots = plotBuilder.createPlots();
RicSummaryPlotBuilder::createAndAppendSummaryMultiPlot( summaryPlots );
}
bool createStandardMultiPlot = false;
if ( createStandardMultiPlot )
{
// Code to generate a standard multi plot
std::vector<RimPlot*> plotsForMultiPlot;
for ( auto p : plots )
{
p->loadDataAndUpdate();
plotsForMultiPlot.push_back( dynamic_cast<RimPlot*>( p ) );
}
RicSummaryPlotBuilder::createAndAppendMultiPlot( plotsForMultiPlot );
}
auto summaryPlots = plotBuilder.createPlots();
RicSummaryPlotBuilder::createAndAppendSummaryMultiPlot( summaryPlots );
}
else
{