diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.cpp index 3223540751..c9a9c430ae 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.cpp @@ -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; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.h index 2625317198..3622bccff1 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.h @@ -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; +}; + diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index 0d92221f48..41076e3a86 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -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); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp index d4e58328ba..67bfde40a5 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp @@ -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", "", "", ""); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h index 04ce0adf67..ee44e64752 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h @@ -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; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryYAxisProperties.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryYAxisProperties.cpp index 9597a47230..8284fda476 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryYAxisProperties.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryYAxisProperties.cpp @@ -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", "", "", ""); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryYAxisProperties.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryYAxisProperties.h index 72a2875876..b513659abb 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryYAxisProperties.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryYAxisProperties.h @@ -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;