#860 Added Center /At End option for axis titles

This commit is contained in:
Jacob Støren 2016-11-18 15:03:35 +01:00
parent 4ed6076750
commit 3d1bad978f
7 changed files with 129 additions and 39 deletions

View File

@ -97,7 +97,7 @@ public:
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimSummaryCurvesCalculator::RimSummaryCurvesCalculator(RimSummaryYAxisProperties* axisProperties, RimSummaryPlotYAxisFormater::RimSummaryPlotYAxisFormater(RimSummaryYAxisProperties* axisProperties,
const std::vector<RimSummaryCurve*>& curves, const std::vector<RimSummaryCurve*>& curves,
const std::vector<RimSummaryCurveFilter*>& curveFilters) const std::vector<RimSummaryCurveFilter*>& curveFilters)
: m_axisProperties(axisProperties), : m_axisProperties(axisProperties),
@ -106,27 +106,19 @@ RimSummaryCurvesCalculator::RimSummaryCurvesCalculator(RimSummaryYAxisProperties
{ {
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryCurvesCalculator::RimSummaryCurvesCalculator(RimSummaryYAxisProperties* axisProperties, const std::vector<RimSummaryCurve*>& curves)
: m_axisProperties(axisProperties),
m_singleCurves(curves)
{
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtPlot) void RimSummaryPlotYAxisFormater::applyYAxisPropertiesToPlot(RiuSummaryQwtPlot* qwtPlot)
{ {
if (!m_qwtPlot) return; if (!qwtPlot) return;
{ {
QString axisTitle = m_axisProperties->customTitle; QString axisTitle = m_axisProperties->customTitle;
if (m_axisProperties->isAutoTitle) axisTitle = autoAxisTitle(); if (m_axisProperties->isAutoTitle) axisTitle = autoAxisTitle();
QwtText axisTitleY = m_qwtPlot->axisTitle(m_axisProperties->axis()); QwtText axisTitleY = qwtPlot->axisTitle(m_axisProperties->axis());
QFont axisTitleYFont = axisTitleY.font(); QFont axisTitleYFont = axisTitleY.font();
axisTitleYFont.setBold(true); axisTitleYFont.setBold(true);
@ -134,28 +126,39 @@ void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtP
axisTitleY.setFont(axisTitleYFont); axisTitleY.setFont(axisTitleYFont);
axisTitleY.setText(axisTitle); axisTitleY.setText(axisTitle);
m_qwtPlot->setAxisTitle(m_axisProperties->axis(), axisTitleY);
switch (m_axisProperties->titlePositionEnum())
{
case RimSummaryYAxisProperties::AXIS_TITLE_CENTER:
axisTitleY.setRenderFlags(Qt::AlignCenter);
break;
case RimSummaryYAxisProperties::AXIS_TITLE_END:
axisTitleY.setRenderFlags(Qt::AlignRight);
break;
}
qwtPlot->setAxisTitle(m_axisProperties->axis(), axisTitleY);
} }
{ {
QFont yAxisFont = m_qwtPlot->axisFont(m_axisProperties->axis()); QFont yAxisFont = qwtPlot->axisFont(m_axisProperties->axis());
yAxisFont.setBold(false); yAxisFont.setBold(false);
yAxisFont.setPixelSize(m_axisProperties->fontSize); yAxisFont.setPixelSize(m_axisProperties->fontSize);
m_qwtPlot->setAxisFont(m_axisProperties->axis(), yAxisFont); qwtPlot->setAxisFont(m_axisProperties->axis(), yAxisFont);
} }
{ {
if (m_axisProperties->numberFormat == RimSummaryYAxisProperties::NUMBER_FORMAT_AUTO) if (m_axisProperties->numberFormat == RimSummaryYAxisProperties::NUMBER_FORMAT_AUTO)
{ {
m_qwtPlot->setAxisScaleDraw(m_axisProperties->axis(), new QwtScaleDraw); qwtPlot->setAxisScaleDraw(m_axisProperties->axis(), new QwtScaleDraw);
} }
else if (m_axisProperties->numberFormat == RimSummaryYAxisProperties::NUMBER_FORMAT_DECIMAL) else if (m_axisProperties->numberFormat == RimSummaryYAxisProperties::NUMBER_FORMAT_DECIMAL)
{ {
m_qwtPlot->setAxisScaleDraw(m_axisProperties->axis(), new DecimalScaleDraw); qwtPlot->setAxisScaleDraw(m_axisProperties->axis(), new DecimalScaleDraw);
} }
else if (m_axisProperties->numberFormat == RimSummaryYAxisProperties::NUMBER_FORMAT_SCIENTIFIC) else if (m_axisProperties->numberFormat == RimSummaryYAxisProperties::NUMBER_FORMAT_SCIENTIFIC)
{ {
m_qwtPlot->setAxisScaleDraw(m_axisProperties->axis(), new ScientificScaleDraw()); qwtPlot->setAxisScaleDraw(m_axisProperties->axis(), new ScientificScaleDraw());
} }
} }
@ -163,21 +166,21 @@ void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtP
{ {
if (m_axisProperties->isLogarithmicScaleEnabled) if (m_axisProperties->isLogarithmicScaleEnabled)
{ {
QwtLogScaleEngine* currentScaleEngine = dynamic_cast<QwtLogScaleEngine*>(m_qwtPlot->axisScaleEngine(m_axisProperties->axis())); QwtLogScaleEngine* currentScaleEngine = dynamic_cast<QwtLogScaleEngine*>(qwtPlot->axisScaleEngine(m_axisProperties->axis()));
if (!currentScaleEngine) if (!currentScaleEngine)
{ {
m_qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLogScaleEngine); qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLogScaleEngine);
m_qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 5); qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 5);
} }
} }
else else
{ {
QwtLinearScaleEngine* currentScaleEngine = dynamic_cast<QwtLinearScaleEngine*>(m_qwtPlot->axisScaleEngine(m_axisProperties->axis())); QwtLinearScaleEngine* currentScaleEngine = dynamic_cast<QwtLinearScaleEngine*>(qwtPlot->axisScaleEngine(m_axisProperties->axis()));
if (!currentScaleEngine) if (!currentScaleEngine)
{ {
m_qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLinearScaleEngine); qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLinearScaleEngine);
m_qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 3); qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 3);
} }
} }
} }
@ -186,7 +189,7 @@ void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtP
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
QString RimSummaryCurvesCalculator::autoAxisTitle() const QString RimSummaryPlotYAxisFormater::autoAxisTitle() const
{ {
std::set<std::string> unitNames; std::set<std::string> unitNames;
@ -211,10 +214,26 @@ QString RimSummaryCurvesCalculator::autoAxisTitle() const
return assembledYAxisText; return assembledYAxisText;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimSummaryCurvesCalculator::computeYRange(double* min, double* max) const RimSummaryPlotYAxisRangeCalculator::RimSummaryPlotYAxisRangeCalculator(RimSummaryYAxisProperties* axisProperties, const std::vector<RimSummaryCurve*>& curves)
: m_axisProperties(axisProperties),
m_singleCurves(curves)
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryPlotYAxisRangeCalculator::computeYRange(double* min, double* max) const
{ {
double minValue = HUGE_VAL; double minValue = HUGE_VAL;
double maxValue = -HUGE_VAL; double maxValue = -HUGE_VAL;
@ -273,7 +292,7 @@ void RimSummaryCurvesCalculator::computeYRange(double* min, double* max) const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RimSummaryCurvesCalculator::curveValueRangeY(const QwtPlotCurve* qwtCurve, double* min, double* max) const bool RimSummaryPlotYAxisRangeCalculator::curveValueRangeY(const QwtPlotCurve* qwtCurve, double* min, double* max) const
{ {
if (!qwtCurve) return false; if (!qwtCurve) return false;

View File

@ -29,22 +29,17 @@ class RiuSummaryQwtPlot;
class QwtPlotCurve; class QwtPlotCurve;
class RimSummaryCurvesCalculator class RimSummaryPlotYAxisFormater
{ {
public: public:
RimSummaryCurvesCalculator(RimSummaryYAxisProperties* axisProperties, RimSummaryPlotYAxisFormater(RimSummaryYAxisProperties* axisProperties,
const std::vector<RimSummaryCurve*>& curves, const std::vector<RimSummaryCurve*>& curves,
const std::vector<RimSummaryCurveFilter*>& curveFilters); const std::vector<RimSummaryCurveFilter*>& curveFilters);
RimSummaryCurvesCalculator(RimSummaryYAxisProperties* axisProperties, void applyYAxisPropertiesToPlot(RiuSummaryQwtPlot* qwtPlot);
const std::vector<RimSummaryCurve*>& curves);
void applyPropertiesToPlot(RiuSummaryQwtPlot* qwtPlot);
void computeYRange(double* min, double* max) const;
private: private:
QString autoAxisTitle() const; QString autoAxisTitle() const;
bool curveValueRangeY(const QwtPlotCurve* qwtCurve, double* min, double* max) const;
private: private:
RimSummaryYAxisProperties* m_axisProperties; RimSummaryYAxisProperties* m_axisProperties;
@ -52,3 +47,20 @@ private:
std::vector<RimSummaryCurveFilter*> m_curveFilters; std::vector<RimSummaryCurveFilter*> m_curveFilters;
}; };
class RimSummaryPlotYAxisRangeCalculator
{
public:
RimSummaryPlotYAxisRangeCalculator(RimSummaryYAxisProperties* axisProperties,
const std::vector<RimSummaryCurve*>& curves);
void computeYRange(double* min, double* max) const;
private:
bool curveValueRangeY(const QwtPlotCurve* qwtCurve, double* min, double* max) const;
private:
RimSummaryYAxisProperties* m_axisProperties;
std::vector<RimSummaryCurve*> m_singleCurves;
};

View File

@ -212,8 +212,8 @@ void RimSummaryPlot::updateAxis(RimDefines::PlotAxis plotAxis)
{ {
m_qwtPlot->enableAxis(qwtAxis, true); m_qwtPlot->enableAxis(qwtAxis, true);
RimSummaryCurvesCalculator calc(yAxisProperties, curves, curveFiltersForAxis); RimSummaryPlotYAxisFormater calc(yAxisProperties, curves, curveFiltersForAxis);
calc.applyPropertiesToPlot(m_qwtPlot); calc.applyYAxisPropertiesToPlot(m_qwtPlot);
} }
else else
{ {
@ -272,6 +272,16 @@ void RimSummaryPlot::updateTimeAxis()
timeAxisTitle.setText(axisTitle); timeAxisTitle.setText(axisTitle);
switch ( m_timeAxisProperties->titlePositionEnum() )
{
case RimSummaryTimeAxisProperties::AXIS_TITLE_CENTER:
timeAxisTitle.setRenderFlags(Qt::AlignCenter);
break;
case RimSummaryTimeAxisProperties::AXIS_TITLE_END:
timeAxisTitle.setRenderFlags(Qt::AlignRight);
break;
}
m_qwtPlot->setAxisTitle(QwtPlot::xBottom, timeAxisTitle); m_qwtPlot->setAxisTitle(QwtPlot::xBottom, timeAxisTitle);
} }
@ -281,6 +291,7 @@ void RimSummaryPlot::updateTimeAxis()
timeAxisFont.setPixelSize(m_timeAxisProperties->fontSize); timeAxisFont.setPixelSize(m_timeAxisProperties->fontSize);
m_qwtPlot->setAxisFont(QwtPlot::xBottom, timeAxisFont); m_qwtPlot->setAxisFont(QwtPlot::xBottom, timeAxisFont);
} }
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -350,7 +361,7 @@ void RimSummaryPlot::zoomAll()
std::vector<RimSummaryCurve*> curves = curvesForAxis(RimDefines::PLOT_AXIS_LEFT); std::vector<RimSummaryCurve*> curves = curvesForAxis(RimDefines::PLOT_AXIS_LEFT);
double min, max; double min, max;
RimSummaryCurvesCalculator calc(m_leftYAxisProperties, curves); RimSummaryPlotYAxisRangeCalculator calc(m_leftYAxisProperties, curves);
calc.computeYRange(&min, &max); calc.computeYRange(&min, &max);
m_qwtPlot->setAxisScale(m_leftYAxisProperties->axis(), min, max); m_qwtPlot->setAxisScale(m_leftYAxisProperties->axis(), min, max);
@ -365,7 +376,7 @@ void RimSummaryPlot::zoomAll()
std::vector<RimSummaryCurve*> curves = curvesForAxis(RimDefines::PLOT_AXIS_RIGHT); std::vector<RimSummaryCurve*> curves = curvesForAxis(RimDefines::PLOT_AXIS_RIGHT);
double min, max; double min, max;
RimSummaryCurvesCalculator calc(m_rightYAxisProperties, curves); RimSummaryPlotYAxisRangeCalculator calc(m_rightYAxisProperties, curves);
calc.computeYRange(&min, &max); calc.computeYRange(&min, &max);
m_qwtPlot->setAxisScale(m_rightYAxisProperties->axis(), min, max); m_qwtPlot->setAxisScale(m_rightYAxisProperties->axis(), min, max);

View File

@ -25,6 +25,20 @@
#include "qwt_date.h" #include "qwt_date.h"
namespace caf
{
template<>
void caf::AppEnum< RimSummaryTimeAxisProperties::AxisTitlePositionType >::setUp()
{
addItem(RimSummaryTimeAxisProperties::AXIS_TITLE_CENTER, "AXIS_TITLE_CENTER", "Center");
addItem(RimSummaryTimeAxisProperties::AXIS_TITLE_END, "AXIS_TITLE_END", "At End");
setDefault(RimSummaryTimeAxisProperties::AXIS_TITLE_CENTER);
}
}
CAF_PDM_SOURCE_INIT(RimSummaryTimeAxisProperties, "SummaryTimeAxisProperties"); CAF_PDM_SOURCE_INIT(RimSummaryTimeAxisProperties, "SummaryTimeAxisProperties");
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -39,6 +53,8 @@ RimSummaryTimeAxisProperties::RimSummaryTimeAxisProperties()
CAF_PDM_InitField(&showTitle, "ShowTitle", false, "Show Title", "", "", ""); CAF_PDM_InitField(&showTitle, "ShowTitle", false, "Show Title", "", "", "");
CAF_PDM_InitField(&title, "Title", QString("Time"), "Title", "", "", ""); CAF_PDM_InitField(&title, "Title", QString("Time"), "Title", "", "", "");
CAF_PDM_InitFieldNoDefault(&titlePositionEnum, "TitlePosition", "Title Position", "", "", "");
CAF_PDM_InitField(&fontSize, "FontSize", 11, "Font Size", "", "", ""); CAF_PDM_InitField(&fontSize, "FontSize", 11, "Font Size", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_visibleRangeMax, "VisibleRangeMax", "Max", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_visibleRangeMax, "VisibleRangeMax", "Max", "", "", "");

View File

@ -35,12 +35,21 @@ class RimSummaryTimeAxisProperties : public caf::PdmObject
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
public:
enum AxisTitlePositionType
{
AXIS_TITLE_CENTER,
AXIS_TITLE_END
};
public: public:
RimSummaryTimeAxisProperties(); RimSummaryTimeAxisProperties();
caf::PdmField<int> fontSize; caf::PdmField<int> fontSize;
caf::PdmField<QString> title; caf::PdmField<QString> title;
caf::PdmField<bool> showTitle; caf::PdmField<bool> showTitle;
caf::PdmField< caf::AppEnum< AxisTitlePositionType > > titlePositionEnum;
double visibleRangeMin() const; double visibleRangeMin() const;
double visibleRangeMax() const; double visibleRangeMax() const;

View File

@ -35,6 +35,19 @@ namespace caf
} }
} }
namespace caf
{
template<>
void caf::AppEnum< RimSummaryYAxisProperties::AxisTitlePositionType >::setUp()
{
addItem(RimSummaryYAxisProperties::AXIS_TITLE_CENTER, "AXIS_TITLE_CENTER", "Center");
addItem(RimSummaryYAxisProperties::AXIS_TITLE_END, "AXIS_TITLE_END", "At End");
setDefault(RimSummaryYAxisProperties::AXIS_TITLE_CENTER);
}
}
CAF_PDM_SOURCE_INIT(RimSummaryYAxisProperties, "SummaryYAxisProperties"); CAF_PDM_SOURCE_INIT(RimSummaryYAxisProperties, "SummaryYAxisProperties");
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -52,6 +65,7 @@ RimSummaryYAxisProperties::RimSummaryYAxisProperties()
CAF_PDM_InitField(&isAutoTitle, "AutoTitle", true, "Auto Title", "", "", ""); CAF_PDM_InitField(&isAutoTitle, "AutoTitle", true, "Auto Title", "", "", "");
CAF_PDM_InitFieldNoDefault(&customTitle, "CustomTitle", "Title", "", "", ""); CAF_PDM_InitFieldNoDefault(&customTitle, "CustomTitle", "Title", "", "", "");
CAF_PDM_InitFieldNoDefault(&titlePositionEnum, "TitlePosition", "Title Position", "", "", "");
CAF_PDM_InitField(&fontSize, "FontSize", 11, "Font Size", "", "", ""); CAF_PDM_InitField(&fontSize, "FontSize", 11, "Font Size", "", "", "");
CAF_PDM_InitField(&visibleRangeMax, "VisibleRangeMax", RimDefines::maximumDefaultValuePlot(), "Max", "", "", ""); CAF_PDM_InitField(&visibleRangeMax, "VisibleRangeMax", RimDefines::maximumDefaultValuePlot(), "Max", "", "", "");

View File

@ -28,6 +28,8 @@
#include <QString> #include <QString>
//================================================================================================== //==================================================================================================
/// ///
/// ///
@ -44,6 +46,12 @@ public:
NUMBER_FORMAT_SCIENTIFIC NUMBER_FORMAT_SCIENTIFIC
}; };
enum AxisTitlePositionType
{
AXIS_TITLE_CENTER,
AXIS_TITLE_END
};
public: public:
RimSummaryYAxisProperties(); RimSummaryYAxisProperties();
@ -53,6 +61,7 @@ public:
caf::PdmField<bool> isAutoTitle; caf::PdmField<bool> isAutoTitle;
caf::PdmField<QString> customTitle; caf::PdmField<QString> customTitle;
caf::PdmField<int> fontSize; caf::PdmField<int> fontSize;
caf::PdmField< caf::AppEnum< AxisTitlePositionType > > titlePositionEnum;
caf::PdmField<double> visibleRangeMin; caf::PdmField<double> visibleRangeMin;
caf::PdmField<double> visibleRangeMax; caf::PdmField<double> visibleRangeMax;