Summary Multiplot: add button to create plot copy (#8698)

* Add button to create a duplicate of the active summary multiplot
* Block dropping other things than RimSummaryAddress objects in empty areas
This commit is contained in:
jonjenssen 2022-03-16 14:14:14 +01:00 committed by GitHub
parent 75a3d3d8f1
commit ffc84457c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 79 additions and 5 deletions

View File

@ -32,6 +32,7 @@
#include "RimSummaryPlotControls.h"
#include "RimMultiPlot.h"
#include "RimSummaryAddress.h"
#include "RimSummaryPlot.h"
#include "RimSummaryPlotNameHelper.h"
#include "RimSummaryPlotSourceStepping.h"
@ -50,6 +51,7 @@ CAF_PDM_SOURCE_INIT( RimSummaryMultiPlot, "MultiSummaryPlot" );
///
//--------------------------------------------------------------------------------------------------
RimSummaryMultiPlot::RimSummaryMultiPlot()
: duplicatePlot( this )
{
CAF_PDM_InitObject( "Multi Summary Plot" );
this->setDeletable( true );
@ -62,6 +64,11 @@ RimSummaryMultiPlot::RimSummaryMultiPlot()
m_syncAxisRanges.uiCapability()->setUiEditorTypeName( caf::PdmUiPushButtonEditor::uiEditorTypeName() );
m_syncAxisRanges.uiCapability()->setUiIconFromResourceString( ":/AxesSync16x16.png" );
CAF_PDM_InitField( &m_createPlotDuplicate, "DuplicatePlot", false, "", "", "Duplicate Plot" );
m_createPlotDuplicate.xmlCapability()->disableIO();
m_createPlotDuplicate.uiCapability()->setUiEditorTypeName( caf::PdmUiPushButtonEditor::uiEditorTypeName() );
m_createPlotDuplicate.uiCapability()->setUiIconFromResourceString( ":/Copy.svg" );
CAF_PDM_InitField( &m_disableWheelZoom, "DisableWheelZoom", true, "", "", "Disable Mouse Wheel Zooming in Multi Summary Plot" );
m_disableWheelZoom.xmlCapability()->disableIO();
m_disableWheelZoom.uiCapability()->setUiEditorTypeName( caf::PdmUiPushButtonEditor::uiEditorTypeName() );
@ -116,12 +123,18 @@ void RimSummaryMultiPlot::insertPlot( RimPlot* plot, size_t index )
//--------------------------------------------------------------------------------------------------
void RimSummaryMultiPlot::addPlot( const std::vector<caf::PdmObjectHandle*>& objects )
{
RimSummaryPlot* plot = new RimSummaryPlot();
plot->enableAutoPlotTitle( true );
if ( objects.empty() ) return;
addPlot( plot );
RimSummaryAddress* addr = dynamic_cast<RimSummaryAddress*>( objects[0] );
if ( addr )
{
RimSummaryPlot* plot = new RimSummaryPlot();
plot->enableAutoPlotTitle( true );
plot->handleDroppedObjects( objects );
addPlot( plot );
plot->handleDroppedObjects( objects );
}
}
//--------------------------------------------------------------------------------------------------
@ -269,8 +282,13 @@ void RimSummaryMultiPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFi
}
else if ( changedField == &m_syncAxisRanges )
{
syncAxisRanges();
m_syncAxisRanges = false;
syncAxisRanges();
}
else if ( changedField == &m_createPlotDuplicate )
{
m_createPlotDuplicate = false;
duplicate();
}
else
{
@ -429,6 +447,7 @@ std::vector<caf::PdmFieldHandle*> RimSummaryMultiPlot::fieldsToShowInToolbar()
toolBarFields.push_back( &m_disableWheelZoom );
toolBarFields.push_back( &m_syncAxisRanges );
toolBarFields.push_back( &m_createPlotDuplicate );
auto& sourceObject = m_sourceStepping();
if ( sourceObject )
@ -533,3 +552,11 @@ void RimSummaryMultiPlot::syncAxisRanges()
plot->updateAxes();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryMultiPlot::duplicate()
{
duplicatePlot.send( this );
}

View File

@ -41,6 +41,9 @@ class RimSummaryMultiPlot : public RimMultiPlot, public RimSummaryDataSourceStep
{
CAF_PDM_HEADER_INIT;
public:
caf::Signal<RimSummaryMultiPlot*> duplicatePlot;
public:
RimSummaryMultiPlot();
~RimSummaryMultiPlot() override;
@ -83,11 +86,14 @@ private:
void updatePlotWindowTitle() override;
void duplicate();
private:
caf::PdmField<bool> m_autoPlotTitles;
caf::PdmField<bool> m_autoPlotTitlesOnSubPlots;
caf::PdmField<bool> m_syncAxisRanges;
caf::PdmField<bool> m_disableWheelZoom;
caf::PdmField<bool> m_createPlotDuplicate;
caf::PdmChildField<RimSummaryPlotSourceStepping*> m_sourceStepping;

View File

@ -20,6 +20,8 @@
#include "RimProject.h"
#include "RimSummaryMultiPlot.h"
#include "RiuPlotMainWindowTools.h"
#include "cafPdmFieldReorderCapability.h"
CAF_PDM_SOURCE_INIT( RimSummaryMultiPlotCollection, "RimSummaryMultiPlotCollection" );
@ -43,6 +45,17 @@ RimSummaryMultiPlotCollection::~RimSummaryMultiPlotCollection()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryMultiPlotCollection::initAfterRead()
{
for ( auto& plot : m_summaryMultiPlots )
{
plot->duplicatePlot.connect( this, &RimSummaryMultiPlotCollection::onDuplicatePlot );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -65,6 +78,7 @@ std::vector<RimSummaryMultiPlot*> RimSummaryMultiPlotCollection::multiPlots() co
void RimSummaryMultiPlotCollection::addMultiSummaryPlot( RimSummaryMultiPlot* plot )
{
m_summaryMultiPlots().push_back( plot );
plot->duplicatePlot.connect( this, &RimSummaryMultiPlotCollection::onDuplicatePlot );
}
//--------------------------------------------------------------------------------------------------
@ -83,3 +97,25 @@ size_t RimSummaryMultiPlotCollection::plotCount() const
{
return m_summaryMultiPlots.size();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryMultiPlotCollection::onDuplicatePlot( const caf::SignalEmitter* emitter, RimSummaryMultiPlot* plotToDuplicate )
{
if ( !plotToDuplicate ) return;
auto plotCopy = dynamic_cast<RimSummaryMultiPlot*>(
plotToDuplicate->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) );
addMultiSummaryPlot( plotCopy );
plotCopy->resolveReferencesRecursively();
plotCopy->initAfterReadRecursively();
plotCopy->updateAllRequiredEditors();
plotCopy->loadDataAndUpdate();
updateConnectedEditors();
RiuPlotMainWindowTools::selectAsCurrentItem( plotCopy, true );
}

View File

@ -44,6 +44,11 @@ public:
void addMultiSummaryPlot( RimSummaryMultiPlot* plot );
protected:
void onDuplicatePlot( const caf::SignalEmitter* emitter, RimSummaryMultiPlot* plotToDuplicate );
void initAfterRead() override;
private:
caf::PdmChildArrayField<RimSummaryMultiPlot*> m_summaryMultiPlots;
};