mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Add support for giving all axes with the same label the same range.
This commit is contained in:
BIN
ApplicationExeCode/Resources/AxesSync16x16.png
Normal file
BIN
ApplicationExeCode/Resources/AxesSync16x16.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 263 B |
@@ -13,7 +13,8 @@
|
||||
<file>AnalysisPlotFilter16x16.png</file>
|
||||
<file>AppLogo48x48.png</file>
|
||||
<file>Axes16x16.png</file>
|
||||
<file>BottomAxis16x16.png</file>
|
||||
<file>AxesSync16x16.png</file>
|
||||
<file>BottomAxis16x16.png</file>
|
||||
<file>Bullet.png</file>
|
||||
<file>CascadeWindows.svg</file>
|
||||
<file>Case.svg</file>
|
||||
|
||||
@@ -87,7 +87,7 @@ RimMultiPlot::RimMultiPlot()
|
||||
CAF_PDM_InitFieldNoDefault( &m_subTitleFontSize, "SubTitleFontSize", "Sub Plot Title Font Size" );
|
||||
m_subTitleFontSize = caf::FontTools::RelativeSize::Large;
|
||||
|
||||
CAF_PDM_InitField( &m_pagePreviewMode, "PagePreviewMode", false, "Page Preview Mode" );
|
||||
CAF_PDM_InitField( &m_pagePreviewMode, "PagePreviewMode", false, "Page Preview Mode", "", "Page Preview" );
|
||||
m_pagePreviewMode.uiCapability()->setUiEditorTypeName( caf::PdmUiToolButtonEditor::uiEditorTypeName() );
|
||||
m_pagePreviewMode.uiCapability()->setUiIconFromResourceString( ":/PagePreview16x16.png" );
|
||||
m_viewer = nullptr;
|
||||
@@ -192,6 +192,8 @@ void RimMultiPlot::insertPlot( RimPlot* plot, size_t index )
|
||||
{
|
||||
setTickmarkCount( plot, m_majorTickmarkCount() );
|
||||
|
||||
if ( index > m_plots.size() ) index = m_plots.size();
|
||||
|
||||
m_plots.insert( index, plot );
|
||||
|
||||
if ( m_viewer )
|
||||
|
||||
@@ -39,9 +39,12 @@
|
||||
#include "RiuSummaryVectorSelectionUi.h"
|
||||
|
||||
#include "cafPdmUiComboBoxEditor.h"
|
||||
#include "cafPdmUiPushButtonEditor.h"
|
||||
#include "cafPdmUiTreeOrdering.h"
|
||||
#include "cafPdmUiTreeSelectionEditor.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
CAF_PDM_SOURCE_INIT( RimSummaryMultiPlot, "MultiSummaryPlot" );
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
@@ -54,6 +57,11 @@ RimSummaryMultiPlot::RimSummaryMultiPlot()
|
||||
CAF_PDM_InitField( &m_autoPlotTitles, "AutoPlotTitles", true, "Auto Plot Titles" );
|
||||
CAF_PDM_InitField( &m_autoPlotTitlesOnSubPlots, "AutoPlotTitlesSubPlots", true, "Auto Plot Titles Sub Plots" );
|
||||
|
||||
CAF_PDM_InitField( &m_syncAxisRanges, "SyncAxisRanges", false, "", "", "Sync Axis Ranges in All Plots" );
|
||||
m_syncAxisRanges.xmlCapability()->disableIO();
|
||||
m_syncAxisRanges.uiCapability()->setUiEditorTypeName( caf::PdmUiPushButtonEditor::uiEditorTypeName() );
|
||||
m_syncAxisRanges.uiCapability()->setUiIconFromResourceString( ":/AxesSync16x16.png" );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_sourceStepping, "SourceStepping", "" );
|
||||
m_sourceStepping = new RimSummaryPlotSourceStepping;
|
||||
m_sourceStepping->setSourceSteppingType( RimSummaryDataSourceStepping::Axis::Y_AXIS );
|
||||
@@ -222,12 +230,34 @@ void RimSummaryMultiPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFi
|
||||
onLoadDataAndUpdate();
|
||||
updateLayout();
|
||||
}
|
||||
else if ( changedField == &m_syncAxisRanges )
|
||||
{
|
||||
syncAxisRanges();
|
||||
m_syncAxisRanges = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
RimMultiPlot::fieldChangedByUi( changedField, oldValue, newValue );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimSummaryMultiPlot::defineEditorAttribute( const caf::PdmFieldHandle* field,
|
||||
QString uiConfigName,
|
||||
caf::PdmUiEditorAttribute* attribute )
|
||||
{
|
||||
if ( &m_syncAxisRanges == field )
|
||||
{
|
||||
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
|
||||
if ( attrib )
|
||||
{
|
||||
attrib->m_buttonText = "Sync Axes";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -360,6 +390,8 @@ std::vector<caf::PdmFieldHandle*> RimSummaryMultiPlot::fieldsToShowInToolbar()
|
||||
{
|
||||
std::vector<caf::PdmFieldHandle*> toolBarFields;
|
||||
|
||||
toolBarFields.push_back( &m_syncAxisRanges );
|
||||
|
||||
auto& sourceObject = m_sourceStepping();
|
||||
if ( sourceObject )
|
||||
{
|
||||
@@ -377,3 +409,45 @@ bool RimSummaryMultiPlot::handleGlobalKeyEvent( QKeyEvent* keyEvent )
|
||||
{
|
||||
return RimSummaryPlotControls::handleKeyEvents( m_sourceStepping(), keyEvent );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimSummaryMultiPlot::syncAxisRanges()
|
||||
{
|
||||
std::map<QString, std::pair<double, double>> axisRanges;
|
||||
|
||||
// gather current min/max values for each category (axis label)
|
||||
for ( auto plot : summaryPlots() )
|
||||
{
|
||||
for ( auto axis : plot->plotAxes() )
|
||||
{
|
||||
double minVal = axis->visibleRangeMin();
|
||||
double maxVal = axis->visibleRangeMax();
|
||||
|
||||
if ( axisRanges.count( axis->name() ) == 0 )
|
||||
{
|
||||
axisRanges[axis->name()] = std::make_pair( axis->visibleRangeMin(), axis->visibleRangeMax() );
|
||||
}
|
||||
else
|
||||
{
|
||||
auto& [currentMin, currentMax] = axisRanges[axis->name()];
|
||||
axisRanges[axis->name()] = std::make_pair( std::min( currentMin, minVal ), std::max( currentMax, maxVal ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// set all plots to use the global min/max values for each category
|
||||
for ( auto plot : summaryPlots() )
|
||||
{
|
||||
for ( auto axis : plot->plotAxes() )
|
||||
{
|
||||
const auto& [minVal, maxVal] = axisRanges[axis->name()];
|
||||
axis->setAutoZoom( false );
|
||||
axis->setVisibleRangeMin( minVal );
|
||||
axis->setVisibleRangeMax( maxVal );
|
||||
}
|
||||
|
||||
plot->updateAxes();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,8 @@ public:
|
||||
|
||||
std::vector<caf::PdmFieldHandle*> fieldsToShowInToolbar();
|
||||
|
||||
void syncAxisRanges();
|
||||
|
||||
protected:
|
||||
bool handleGlobalKeyEvent( QKeyEvent* keyEvent ) override;
|
||||
|
||||
@@ -66,6 +68,9 @@ private:
|
||||
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
|
||||
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
|
||||
void populateNameHelper( RimSummaryPlotNameHelper* nameHelper );
|
||||
void defineEditorAttribute( const caf::PdmFieldHandle* field,
|
||||
QString uiConfigName,
|
||||
caf::PdmUiEditorAttribute* attribute ) override;
|
||||
|
||||
std::vector<RimSummaryPlot*> summaryPlots() const;
|
||||
|
||||
@@ -76,6 +81,7 @@ private:
|
||||
private:
|
||||
caf::PdmField<bool> m_autoPlotTitles;
|
||||
caf::PdmField<bool> m_autoPlotTitlesOnSubPlots;
|
||||
caf::PdmField<bool> m_syncAxisRanges;
|
||||
|
||||
caf::PdmChildField<RimSummaryPlotSourceStepping*> m_sourceStepping;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user