summaryrefslogtreecommitdiff
path: root/gr-qtgui/lib/TimeRasterDisplayPlot.cc
diff options
context:
space:
mode:
authorTom Rondeau <trondeau@vt.edu>2013-02-14 17:35:58 -0500
committerTom Rondeau <trondeau@vt.edu>2013-02-14 17:35:58 -0500
commitee5d5cda03c2f162db4e91ff09cb24203192b1f9 (patch)
tree4d12def8a23ffad03973e1da26b83a0ee7ac6887 /gr-qtgui/lib/TimeRasterDisplayPlot.cc
parent6fba4802b86da547dfcd4bfdb2cc22dfd97e0d16 (diff)
qtgui: fixing time raster axis and picker labels.
Diffstat (limited to 'gr-qtgui/lib/TimeRasterDisplayPlot.cc')
-rw-r--r--gr-qtgui/lib/TimeRasterDisplayPlot.cc64
1 files changed, 47 insertions, 17 deletions
diff --git a/gr-qtgui/lib/TimeRasterDisplayPlot.cc b/gr-qtgui/lib/TimeRasterDisplayPlot.cc
index c6e037386c..537a7e4ef7 100644
--- a/gr-qtgui/lib/TimeRasterDisplayPlot.cc
+++ b/gr-qtgui/lib/TimeRasterDisplayPlot.cc
@@ -93,15 +93,41 @@ private:
double _rows;
};
+class TimePrecisionClass
+{
+public:
+ TimePrecisionClass(const int timePrecision)
+ {
+ _timePrecision = timePrecision;
+ }
+
+ virtual ~TimePrecisionClass()
+ {
+ }
+
+ virtual unsigned int getTimePrecision() const
+ {
+ return _timePrecision;
+ }
+
+ virtual void setTimePrecision(const unsigned int newPrecision)
+ {
+ _timePrecision = newPrecision;
+ }
+protected:
+ unsigned int _timePrecision;
+};
/***********************************************************************
* Widget to provide mouse pointer coordinate text
**********************************************************************/
-class TimeRasterZoomer: public QwtPlotZoomer, public TimeScaleData
+class TimeRasterZoomer: public QwtPlotZoomer, public TimePrecisionClass,
+ public TimeScaleData
{
public:
- TimeRasterZoomer(QwtPlotCanvas* canvas, double rows, double cols)
- : QwtPlotZoomer(canvas), TimeScaleData(),
+ TimeRasterZoomer(QwtPlotCanvas* canvas, double rows, double cols,
+ const unsigned int timePrecision)
+ : QwtPlotZoomer(canvas), TimePrecisionClass(timePrecision), TimeScaleData(),
d_rows(static_cast<double>(rows)), d_cols(static_cast<double>(cols))
{
setTrackerMode(QwtPicker::AlwaysOn);
@@ -139,8 +165,9 @@ protected:
double x = dp.x() * getSecondsPerLine();
//double y = dp.y() * getSecondsPerLine() * d_cols;
double y = floor(d_rows - dp.y());
- QwtText t(QString("%1 s, %2")
- .arg(x, 0, 'f', 2)
+ QwtText t(QString("%1 %2, %3")
+ .arg(x, 0, 'f', getTimePrecision())
+ .arg(_unitType.c_str())
.arg(y, 0, 'f', 0));
return t;
}
@@ -171,13 +198,6 @@ TimeRasterDisplayPlot::TimeRasterDisplayPlot(int nplots,
setAxisScaleDraw(QwtPlot::xBottom, new QwtXScaleDraw());
setAxisScaleDraw(QwtPlot::yLeft, new QwtYScaleDraw());
- double sec_per_samp = 1.0/d_samp_rate;
- QwtYScaleDraw* yScale = (QwtYScaleDraw*)axisScaleDraw(QwtPlot::yLeft);
- yScale->setRows(d_rows);
-
- QwtXScaleDraw* xScale = (QwtXScaleDraw*)axisScaleDraw(QwtPlot::xBottom);
- xScale->setSecondsPerLine(sec_per_samp);
-
for(int i = 0; i < _nplots; i++) {
d_data.push_back(new TimeRasterData(d_rows, d_cols));
d_raster.push_back(new PlotTimeRaster("Raster"));
@@ -200,7 +220,7 @@ TimeRasterDisplayPlot::TimeRasterDisplayPlot(int nplots,
// MidButton for the panning
// RightButton: zoom out by 1
// Ctrl+RighButton: zoom out to full size
- _zoomer = new TimeRasterZoomer(canvas(), d_rows, d_cols);
+ _zoomer = new TimeRasterZoomer(canvas(), d_rows, d_cols, 0);
#if QWT_VERSION < 0x060000
_zoomer->setSelectionFlags(QwtPicker::RectSelection | QwtPicker::DragSelection);
#endif
@@ -238,22 +258,32 @@ TimeRasterDisplayPlot::reset()
d_data[i]->reset();
}
- setAxisScale(QwtPlot::xBottom, 0, d_rows);
- setAxisScale(QwtPlot::yLeft, 0, d_cols);
+ // Update zoomer/picker text units
+ std::string strunits[4] = {"sec", "ms", "us", "ns"};
+ double units10 = floor(log10(d_samp_rate));
+ double units3 = std::max(floor(units10/3), 0.0);
+ double units = pow(10, (units10-fmod(units10, 3.0)));
+ int iunit = static_cast<int>(units3);
+
+ double sec_per_samp = units/d_samp_rate;
- double sec_per_samp = 1.0/d_samp_rate;
QwtYScaleDraw* yScale = (QwtYScaleDraw*)axisScaleDraw(QwtPlot::yLeft);
yScale->setRows(d_rows);
QwtXScaleDraw* xScale = (QwtXScaleDraw*)axisScaleDraw(QwtPlot::xBottom);
xScale->setSecondsPerLine(sec_per_samp);
+ setAxisTitle(QwtPlot::xBottom, QString("Time (%1)")
+ .arg(strunits[iunit].c_str()));
+ xScale->initiateUpdate();
// Load up the new base zoom settings
if(_zoomer) {
+ double display_units = 4;
((TimeRasterZoomer*)_zoomer)->setColumns(d_cols);
((TimeRasterZoomer*)_zoomer)->setRows(d_rows);
((TimeRasterZoomer*)_zoomer)->setSecondsPerLine(sec_per_samp);
- //((TimeRasterZoomer*)_zoomer)-sSetUnitType(strunits);
+ ((TimeRasterZoomer*)_zoomer)->setTimePrecision(display_units);
+ ((TimeRasterZoomer*)_zoomer)->setUnitType(strunits[iunit]);
QwtDoubleRect newSize = _zoomer->zoomBase();
newSize.setLeft(0);