#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<RimSummaryCurveFilter*>& curveFilters)
: 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;
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();
axisTitleYFont.setBold(true);
@ -134,28 +126,39 @@ void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtP
axisTitleY.setFont(axisTitleYFont);
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.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)
{
m_qwtPlot->setAxisScaleDraw(m_axisProperties->axis(), new QwtScaleDraw);
qwtPlot->setAxisScaleDraw(m_axisProperties->axis(), new QwtScaleDraw);
}
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)
{
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)
{
QwtLogScaleEngine* currentScaleEngine = dynamic_cast<QwtLogScaleEngine*>(m_qwtPlot->axisScaleEngine(m_axisProperties->axis()));
QwtLogScaleEngine* currentScaleEngine = dynamic_cast<QwtLogScaleEngine*>(qwtPlot->axisScaleEngine(m_axisProperties->axis()));
if (!currentScaleEngine)
{
m_qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLogScaleEngine);
m_qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 5);
qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLogScaleEngine);
qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 5);
}
}
else
{
QwtLinearScaleEngine* currentScaleEngine = dynamic_cast<QwtLinearScaleEngine*>(m_qwtPlot->axisScaleEngine(m_axisProperties->axis()));
QwtLinearScaleEngine* currentScaleEngine = dynamic_cast<QwtLinearScaleEngine*>(qwtPlot->axisScaleEngine(m_axisProperties->axis()));
if (!currentScaleEngine)
{
m_qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLinearScaleEngine);
m_qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 3);
qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLinearScaleEngine);
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;
@ -211,10 +214,26 @@ QString RimSummaryCurvesCalculator::autoAxisTitle() const
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 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;

View File

@ -29,22 +29,17 @@ class RiuSummaryQwtPlot;
class QwtPlotCurve;
class RimSummaryCurvesCalculator
class RimSummaryPlotYAxisFormater
{
public:
RimSummaryCurvesCalculator(RimSummaryYAxisProperties* axisProperties,
RimSummaryPlotYAxisFormater(RimSummaryYAxisProperties* axisProperties,
const std::vector<RimSummaryCurve*>& curves,
const std::vector<RimSummaryCurveFilter*>& curveFilters);
RimSummaryCurvesCalculator(RimSummaryYAxisProperties* axisProperties,
const std::vector<RimSummaryCurve*>& curves);
void applyPropertiesToPlot(RiuSummaryQwtPlot* qwtPlot);
void computeYRange(double* min, double* max) const;
void applyYAxisPropertiesToPlot(RiuSummaryQwtPlot* qwtPlot);
private:
QString autoAxisTitle() const;
bool curveValueRangeY(const QwtPlotCurve* qwtCurve, double* min, double* max) const;
private:
RimSummaryYAxisProperties* m_axisProperties;
@ -52,3 +47,20 @@ private:
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);
RimSummaryCurvesCalculator calc(yAxisProperties, curves, curveFiltersForAxis);
calc.applyPropertiesToPlot(m_qwtPlot);
RimSummaryPlotYAxisFormater calc(yAxisProperties, curves, curveFiltersForAxis);
calc.applyYAxisPropertiesToPlot(m_qwtPlot);
}
else
{
@ -272,6 +272,16 @@ void RimSummaryPlot::updateTimeAxis()
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);
}
@ -281,6 +291,7 @@ void RimSummaryPlot::updateTimeAxis()
timeAxisFont.setPixelSize(m_timeAxisProperties->fontSize);
m_qwtPlot->setAxisFont(QwtPlot::xBottom, timeAxisFont);
}
}
//--------------------------------------------------------------------------------------------------
@ -350,7 +361,7 @@ void RimSummaryPlot::zoomAll()
std::vector<RimSummaryCurve*> curves = curvesForAxis(RimDefines::PLOT_AXIS_LEFT);
double min, max;
RimSummaryCurvesCalculator calc(m_leftYAxisProperties, curves);
RimSummaryPlotYAxisRangeCalculator calc(m_leftYAxisProperties, curves);
calc.computeYRange(&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);
double min, max;
RimSummaryCurvesCalculator calc(m_rightYAxisProperties, curves);
RimSummaryPlotYAxisRangeCalculator calc(m_rightYAxisProperties, curves);
calc.computeYRange(&min, &max);
m_qwtPlot->setAxisScale(m_rightYAxisProperties->axis(), min, max);

View File

@ -25,6 +25,20 @@
#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");
//--------------------------------------------------------------------------------------------------
@ -39,6 +53,8 @@ RimSummaryTimeAxisProperties::RimSummaryTimeAxisProperties()
CAF_PDM_InitField(&showTitle, "ShowTitle", false, "Show 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_InitFieldNoDefault(&m_visibleRangeMax, "VisibleRangeMax", "Max", "", "", "");

View File

@ -35,12 +35,21 @@ class RimSummaryTimeAxisProperties : public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
enum AxisTitlePositionType
{
AXIS_TITLE_CENTER,
AXIS_TITLE_END
};
public:
RimSummaryTimeAxisProperties();
caf::PdmField<int> fontSize;
caf::PdmField<QString> title;
caf::PdmField<bool> showTitle;
caf::PdmField< caf::AppEnum< AxisTitlePositionType > > titlePositionEnum;
double visibleRangeMin() 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");
//--------------------------------------------------------------------------------------------------
@ -52,6 +65,7 @@ RimSummaryYAxisProperties::RimSummaryYAxisProperties()
CAF_PDM_InitField(&isAutoTitle, "AutoTitle", true, "Auto 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(&visibleRangeMax, "VisibleRangeMax", RimDefines::maximumDefaultValuePlot(), "Max", "", "", "");

View File

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