From bea8fb89163379dea6d558d46f8b440fa55ce483 2017-11-10 08:42:52 From: Alexandre Leroux Date: 2017-11-10 08:42:52 Subject: [PATCH] Handles axes properties for spectrograms Spectrograms introduce a color scale that is associated to the colormap --- diff --git a/gui/src/Visualization/AxisRenderingUtils.cpp b/gui/src/Visualization/AxisRenderingUtils.cpp index 2e7ea44..7a45daa 100644 --- a/gui/src/Visualization/AxisRenderingUtils.cpp +++ b/gui/src/Visualization/AxisRenderingUtils.cpp @@ -1,6 +1,7 @@ #include "Visualization/AxisRenderingUtils.h" #include +#include #include #include @@ -80,6 +81,42 @@ struct AxisSetter: }; /** + * Specialization of AxisSetter for spectrograms + * @sa SpectrogramSeries + */ +template +struct AxisSetter::value> > { + static void setProperties(T &dataSeries, QCustomPlot &plot, QCPColorScale &colorScale) + { + dataSeries.lockRead(); + auto xAxisUnit = dataSeries.xAxisUnit(); + /// @todo ALX: use iterators here + auto yAxisUnit = dataSeries.yAxis().unit(); + auto valuesUnit = dataSeries.valuesUnit(); + dataSeries.unlock(); + + setAxisProperties(*plot.xAxis, xAxisUnit); + setAxisProperties(*plot.yAxis, yAxisUnit); + + // Displays color scale in plot + plot.plotLayout()->insertRow(0); + plot.plotLayout()->addElement(0, 0, &colorScale); + colorScale.setType(QCPAxis::atTop); + colorScale.setMinimumMargins(QMargins{0, 0, 0, 0}); + + // Aligns color scale with axes + auto marginGroups = plot.axisRect()->marginGroups(); + for (auto it = marginGroups.begin(), end = marginGroups.end(); it != end; ++it) { + colorScale.setMarginGroup(it.key(), it.value()); + } + + // Set color scale properties + colorScale.setLabel(valuesUnit.m_Name); + colorScale.setDataScaleType(QCPAxis::stLogarithmic); // Logarithmic scale + } +}; + +/** * Default implementation of IAxisHelper, which takes data series to set axes properties * @tparam T the data series' type */ @@ -114,6 +151,9 @@ IAxisHelperFactory::create(std::shared_ptr dataSeries) noexcept if (auto scalarSeries = std::dynamic_pointer_cast(dataSeries)) { return std::make_unique >(*scalarSeries); } + else if (auto spectrogramSeries = std::dynamic_pointer_cast(dataSeries)) { + return std::make_unique >(*spectrogramSeries); + } else if (auto vectorSeries = std::dynamic_pointer_cast(dataSeries)) { return std::make_unique >(*vectorSeries); } diff --git a/gui/src/Visualization/VisualizationGraphRenderingDelegate.cpp b/gui/src/Visualization/VisualizationGraphRenderingDelegate.cpp index b33c137..735a107 100644 --- a/gui/src/Visualization/VisualizationGraphRenderingDelegate.cpp +++ b/gui/src/Visualization/VisualizationGraphRenderingDelegate.cpp @@ -101,7 +101,8 @@ struct VisualizationGraphRenderingDelegate::VisualizationGraphRenderingDelegateP m_TitleText{new QCPItemText{&m_Plot}}, m_XAxisPixmap{new QCPItemPixmap{&m_Plot}}, m_ShowXAxis{true}, - m_XAxisLabel{} + m_XAxisLabel{}, + m_ColorScale{new QCPColorScale{&m_Plot}} { initPointTracerStyle(*m_PointTracer); @@ -162,6 +163,7 @@ struct VisualizationGraphRenderingDelegate::VisualizationGraphRenderingDelegateP QCPItemPixmap *m_XAxisPixmap; bool m_ShowXAxis; /// X-axis properties are shown or hidden QString m_XAxisLabel; + QCPColorScale *m_ColorScale; /// Color scale used for some types of graphs (as spectrograms) }; VisualizationGraphRenderingDelegate::VisualizationGraphRenderingDelegate(