diff options
-rw-r--r-- | gr-qtgui/grc/qtgui_time_raster_x.block.yml | 36 | ||||
-rw-r--r-- | gr-qtgui/include/gnuradio/qtgui/TimeRasterDisplayPlot.h | 11 | ||||
-rw-r--r-- | gr-qtgui/include/gnuradio/qtgui/time_raster_sink_b.h | 4 | ||||
-rw-r--r-- | gr-qtgui/include/gnuradio/qtgui/time_raster_sink_f.h | 4 | ||||
-rw-r--r-- | gr-qtgui/include/gnuradio/qtgui/timerasterdisplayform.h | 5 | ||||
-rw-r--r-- | gr-qtgui/lib/TimeRasterDisplayPlot.cc | 312 | ||||
-rw-r--r-- | gr-qtgui/lib/time_raster_sink_b_impl.cc | 20 | ||||
-rw-r--r-- | gr-qtgui/lib/time_raster_sink_b_impl.h | 4 | ||||
-rw-r--r-- | gr-qtgui/lib/time_raster_sink_f_impl.cc | 20 | ||||
-rw-r--r-- | gr-qtgui/lib/time_raster_sink_f_impl.h | 4 | ||||
-rw-r--r-- | gr-qtgui/lib/timerasterdisplayform.cc | 24 | ||||
-rw-r--r-- | gr-qtgui/python/qtgui/bindings/docstrings/time_raster_sink_b_pydoc_template.h | 12 | ||||
-rw-r--r-- | gr-qtgui/python/qtgui/bindings/docstrings/time_raster_sink_f_pydoc_template.h | 12 | ||||
-rw-r--r-- | gr-qtgui/python/qtgui/bindings/time_raster_sink_b_python.cc | 25 | ||||
-rw-r--r-- | gr-qtgui/python/qtgui/bindings/time_raster_sink_f_python.cc | 26 |
15 files changed, 496 insertions, 23 deletions
diff --git a/gr-qtgui/grc/qtgui_time_raster_x.block.yml b/gr-qtgui/grc/qtgui_time_raster_x.block.yml index 3f1733069e..26746cd61a 100644 --- a/gr-qtgui/grc/qtgui_time_raster_x.block.yml +++ b/gr-qtgui/grc/qtgui_time_raster_x.block.yml @@ -31,6 +31,36 @@ parameters: label: Num. Cols dtype: int default: 256 +- id: x_label + label: X-Axis Label + dtype: string + default: '""' + hide: part +- id: x_start_value + label: X-Axis Start Value + dtype: float + default: 0.0 + hide: part +- id: x_end_value + label: X-Axis End Value + dtype: float + default: 0.0 + hide: part +- id: y_label + label: Y-Axis Label + dtype: string + default: '""' + hide: part +- id: y_start_value + label: Y-Axis Start Value + dtype: float + default: 0.0 + hide: part +- id: y_end_value + label: Y-Axis End Value + dtype: float + default: 0.0 + hide: part - id: grid label: Grid dtype: enum @@ -243,6 +273,10 @@ templates: self.${id}.set_intensity_range(${zmin}, ${zmax}) self.${id}.enable_grid(${grid}) self.${id}.enable_axis_labels(${axislabels}) + self.${id}.set_x_label(${x_label}) + self.${id}.set_x_range(${x_start_value}, ${x_end_value}) + self.${id}.set_y_label(${y_label}) + self.${id}.set_y_range(${y_start_value}, ${y_end_value}) labels = [${label1}, ${label2}, ${label3}, ${label4}, ${label5}, ${label6}, ${label7}, ${label8}, ${label9}, ${label10}] @@ -264,5 +298,7 @@ templates: documentation: |- The GUI hint can be used to position the widget within the application. The hint is of the form [tab_id@tab_index]: [row, col, row_span, col_span]. Both the tab specification and the grid position are optional. + + Note that for user-defined axis values, numbers will be scaled to their power of 10 3-unit grouping (e.g. Giga, Mega, Kilo, milli, nano (u), pico) and appended with the first letter descriptor for a more concise display. file_format: 1 diff --git a/gr-qtgui/include/gnuradio/qtgui/TimeRasterDisplayPlot.h b/gr-qtgui/include/gnuradio/qtgui/TimeRasterDisplayPlot.h index d855a74b1b..68f6bea4e1 100644 --- a/gr-qtgui/include/gnuradio/qtgui/TimeRasterDisplayPlot.h +++ b/gr-qtgui/include/gnuradio/qtgui/TimeRasterDisplayPlot.h @@ -50,6 +50,10 @@ public: void setNumCols(double cols); void setAlpha(unsigned int which, int alpha); void setSampleRate(double samprate); + void setXLabel(const std::string& label); + void setXAxis(double start, double end); + void setYLabel(const std::string& label); + void setYAxis(double start, double end); double numRows() const; double numCols() const; @@ -100,6 +104,13 @@ private: QColor d_high_intensity; int d_color_bar_title_font_size; + + std::string d_x_label; + double d_x_start_value; + double d_x_end_value; + std::string d_y_label; + double d_y_start_value; + double d_y_end_value; }; #endif /* TIMERASTER_DISPLAY_PLOT_H */ diff --git a/gr-qtgui/include/gnuradio/qtgui/time_raster_sink_b.h b/gr-qtgui/include/gnuradio/qtgui/time_raster_sink_b.h index 7c1c59d202..6570fda0c2 100644 --- a/gr-qtgui/include/gnuradio/qtgui/time_raster_sink_b.h +++ b/gr-qtgui/include/gnuradio/qtgui/time_raster_sink_b.h @@ -84,6 +84,10 @@ public: virtual void* pyqwidget() = 0; #endif + virtual void set_x_label(const std::string& label) = 0; + virtual void set_x_range(double start, double end) = 0; + virtual void set_y_label(const std::string& label) = 0; + virtual void set_y_range(double start, double end) = 0; virtual void set_update_time(double t) = 0; virtual void set_title(const std::string& title) = 0; virtual void set_line_label(unsigned int which, const std::string& label) = 0; diff --git a/gr-qtgui/include/gnuradio/qtgui/time_raster_sink_f.h b/gr-qtgui/include/gnuradio/qtgui/time_raster_sink_f.h index 0c42d04c0c..d96cbe7a0b 100644 --- a/gr-qtgui/include/gnuradio/qtgui/time_raster_sink_f.h +++ b/gr-qtgui/include/gnuradio/qtgui/time_raster_sink_f.h @@ -80,6 +80,10 @@ public: virtual void* pyqwidget() = 0; #endif + virtual void set_x_label(const std::string& label) = 0; + virtual void set_x_range(double start, double end) = 0; + virtual void set_y_label(const std::string& label) = 0; + virtual void set_y_range(double start, double end) = 0; virtual void set_update_time(double t) = 0; virtual void set_title(const std::string& title) = 0; virtual void set_line_label(unsigned int which, const std::string& label) = 0; diff --git a/gr-qtgui/include/gnuradio/qtgui/timerasterdisplayform.h b/gr-qtgui/include/gnuradio/qtgui/timerasterdisplayform.h index 497d81afaf..cc4fdc041a 100644 --- a/gr-qtgui/include/gnuradio/qtgui/timerasterdisplayform.h +++ b/gr-qtgui/include/gnuradio/qtgui/timerasterdisplayform.h @@ -58,6 +58,11 @@ public slots: void setSampleRate(const double samprate); void setSampleRate(const QString& rate) override; + void setXAxis(double min, double max); + void setXLabel(const std::string& label); + void setYAxis(double min, double max); + void setYLabel(const std::string& label); + void setIntensityRange(const double minIntensity, const double maxIntensity); void setMaxIntensity(const QString& m); void setMinIntensity(const QString& m); diff --git a/gr-qtgui/lib/TimeRasterDisplayPlot.cc b/gr-qtgui/lib/TimeRasterDisplayPlot.cc index 8c2edf111e..5eab0aa92a 100644 --- a/gr-qtgui/lib/TimeRasterDisplayPlot.cc +++ b/gr-qtgui/lib/TimeRasterDisplayPlot.cc @@ -19,6 +19,7 @@ #include <qwt_plot_layout.h> #include <qwt_scale_draw.h> #include <QColor> +#include <cmath> #include <iostream> #if QWT_VERSION < 0x060100 @@ -38,15 +39,92 @@ namespace pt = boost::posix_time; **********************************************************************/ class QwtXScaleDraw : public QwtScaleDraw, public TimeScaleData { +protected: + double d_start_value; + double d_end_value; + double d_delta_value; + int d_max_scale; + double d_ten_scale; + std::string d_units; + public: - QwtXScaleDraw() : QwtScaleDraw(), TimeScaleData() {} + QwtXScaleDraw(double start_value = 0.0, double end_value = 0.0, int max_scale = 1024) + : QwtScaleDraw(), + TimeScaleData(), + d_start_value(start_value), + d_end_value(end_value), + d_max_scale(max_scale), + d_ten_scale(1.0) + { + d_delta_value = d_end_value - d_start_value; + + if ((d_delta_value != 0.0f) && (d_start_value > 0.0f || d_end_value > 0.0f)) { + double test_value; + if (d_start_value > 0.0f) { + test_value = d_start_value; + } else { + test_value = d_end_value; + } + + double units10 = floor(log10(test_value)); + + d_ten_scale = pow(10, units10); + + // We'll get positive units for d_start_value >= 1.0, negative for + // 0<d_start_value<1.0 + int units3 = int(floor(units10 / 3.0)); + d_ten_scale = pow(10, units3 * 3); + + switch (units3) { + case 1: + d_units = "K"; + break; + case 2: + d_units = "M"; + break; + case 3: + d_units = "G"; + break; + case 4: + d_units = "T"; + break; + case 5: + d_units = "P"; + break; + case -1: + d_units = "m"; + break; + case -2: + d_units = "u"; + break; + case -3: + d_units = "n"; + break; + case -4: + d_units = "p"; + break; + } + } + } + ~QwtXScaleDraw() override {} QwtText label(double value) const override { - double secs = double(value * getSecondsPerLine()); - return QwtText(QString::number(secs, 'f', 2)); + if (d_start_value == d_end_value) { + // no scale was provided. Default to seconds. + double secs = double(value * getSecondsPerLine()); + return QwtText(QString::number(secs, 'f', 2)); + } else { + // User-defined scale provided. + double x_label = + d_start_value + (double)value / (double)d_max_scale * d_delta_value; + + // scale for units tag + x_label /= d_ten_scale; + return QwtText(QString("").sprintf("%.3f%s", x_label, d_units.c_str())); + } } virtual void initiateUpdate() @@ -63,15 +141,81 @@ public: class QwtYScaleDraw : public QwtScaleDraw { public: - QwtYScaleDraw() : QwtScaleDraw(), d_rows(0) {} + QwtYScaleDraw(double start_value = 0.0, double end_value = 0.0, int max_scale = 1024) + : QwtScaleDraw(), + d_rows(max_scale), + d_start_value(start_value), + d_end_value(end_value), + d_max_scale(max_scale), + d_ten_scale(1.0) + { + d_delta_value = d_end_value - d_start_value; + + if ((d_delta_value != 0.0f) && (d_start_value > 0.0f || d_end_value > 0.0f)) { + double test_value; + if (d_start_value > 0.0f) { + test_value = d_start_value; + } else { + test_value = d_end_value; + } + + double units10 = floor(log10(test_value)); + + d_ten_scale = pow(10, units10); + + // We'll get positive units for d_start_value >= 1.0, negative for + // 0<d_start_value<1.0 + int units3 = int(floor(units10 / 3.0)); + d_ten_scale = pow(10, units3 * 3); + + switch (units3) { + case 1: + d_units = "K"; + break; + case 2: + d_units = "M"; + break; + case 3: + d_units = "G"; + break; + case 4: + d_units = "T"; + break; + case 5: + d_units = "P"; + break; + case -1: + d_units = "m"; + break; + case -2: + d_units = "u"; + break; + case -3: + d_units = "n"; + break; + case -4: + d_units = "p"; + break; + } + } + } ~QwtYScaleDraw() override {} QwtText label(double value) const override { - if (d_rows > 0) - value = d_rows - value; - return QwtText(QString::number(value, 'f', 0)); + if (d_start_value == d_end_value) { + // no scale was provided. Default to row number. + return QwtText(QString("").sprintf("%.0f", value)); + } else { + // User-defined scale provided. + double y_label = + d_start_value + (double)value / (double)d_rows * d_delta_value; + + // scale for units tag + y_label /= d_ten_scale; + return QwtText(QString("").sprintf("%.3f%s", y_label, d_units.c_str())); + } } virtual void initiateUpdate() @@ -85,6 +229,13 @@ public: private: double d_rows; + + double d_start_value; + double d_end_value; + double d_delta_value; + int d_max_scale; + double d_ten_scale; + std::string d_units; }; class TimePrecisionClass @@ -117,19 +268,34 @@ public: TimeRasterZoomer(QwtPlotCanvas* canvas, double rows, double cols, - const unsigned int timePrecision) + const unsigned int timePrecision, + double x_start_value = 0.0, + double x_end_value = 0.0, + double y_start_value = 0.0, + double y_end_value = 0.0) #else /* QWT_VERSION < 0x060100 */ TimeRasterZoomer(QWidget* canvas, double rows, double cols, - const unsigned int timePrecision) + const unsigned int timePrecision, + double x_start_value = 0.0, + double x_end_value = 0.0, + double y_start_value = 0.0, + double y_end_value = 0.0) #endif /* QWT_VERSION < 0x060100 */ : QwtPlotZoomer(canvas), TimePrecisionClass(timePrecision), TimeScaleData(), d_rows(static_cast<double>(rows)), - d_cols(static_cast<double>(cols)) + d_cols(static_cast<double>(cols)), + d_x_start_value(x_start_value), + d_x_end_value(x_end_value), + d_y_start_value(y_start_value), + d_y_end_value(y_end_value) { + d_x_delta_value = d_x_end_value - d_x_start_value; + d_y_delta_value = d_y_end_value - d_y_start_value; + setTrackerMode(QwtPicker::AlwaysOn); } @@ -137,6 +303,20 @@ public: virtual void updateTrackerText() { updateDisplay(); } + void setXAxis(double min, double max) + { + d_x_start_value = min; + d_x_end_value = max; + d_x_delta_value = max - min; + } + + void setYAxis(double min, double max) + { + d_y_start_value = min; + d_y_end_value = max; + d_y_delta_value = max - min; + } + void setUnitType(const std::string& type) { d_unitType = type; } void setColumns(const double cols) { d_cols = cols; } @@ -148,19 +328,50 @@ protected: QwtText trackerText(QPoint const& p) const override { QwtDoublePoint dp = QwtPlotZoomer::invTransform(p); - double x = dp.x() * getSecondsPerLine(); - // double y = dp.y() * getSecondsPerLine() * d_cols; - double y = floor(d_rows - dp.y()); - QwtText t(QString("%1 %2, %3") - .arg(x, 0, 'f', getTimePrecision()) - .arg(d_unitType.c_str()) - .arg(y, 0, 'f', 0)); - return t; + + if (d_x_start_value == d_x_end_value) { + // Original seconds in hover text + double x = dp.x() * getSecondsPerLine(); + double y = dp.y(); + + if (d_y_start_value != d_y_end_value) { + y = d_y_start_value + y / (double)d_rows * d_y_delta_value; + } + + QwtText t(QString("%1 %2, %3") + .arg(x, 0, 'f', getTimePrecision()) + .arg(d_unitType.c_str()) + .arg(y, 0, 'f', 0)); + return t; + } else { + // Hover based on user-defined scale + double x = dp.x(); + double y = dp.y(); + if (d_y_start_value != d_y_end_value) { + y = d_y_start_value + y / (double)d_rows * d_y_delta_value; + } + + double x_label = d_x_start_value + x / (double)d_cols * d_x_delta_value; + if ((d_y_delta_value > 999.0) or (d_y_delta_value <= 1.0)) { + QwtText t(QString(QString("").sprintf("%.2f, %.2e", x_label, y))); + return t; + } else { + QwtText t(QString(QString("").sprintf("%.2f, %.0f", x_label, y))); + return t; + } + } } private: std::string d_unitType; double d_rows, d_cols; + double d_x_start_value; + double d_x_end_value; + double d_x_delta_value; + double d_y_start_value; + double d_y_end_value; + double d_y_delta_value; + int d_max_scale; }; /********************************************************************* @@ -168,7 +379,13 @@ private: *********************************************************************/ TimeRasterDisplayPlot::TimeRasterDisplayPlot( int nplots, double samp_rate, double rows, double cols, QWidget* parent) - : DisplayPlot(nplots, parent) + : DisplayPlot(nplots, parent), + d_x_label(""), + d_x_start_value(0.0), + d_x_end_value(0.0), + d_y_label(""), + d_y_start_value(0.0), + d_y_end_value(0.0) { d_zoomer = NULL; // need this for proper init @@ -180,8 +397,10 @@ TimeRasterDisplayPlot::TimeRasterDisplayPlot( d_numPoints = d_cols; d_color_bar_title_font_size = 18; - setAxisScaleDraw(QwtPlot::xBottom, new QwtXScaleDraw()); - setAxisScaleDraw(QwtPlot::yLeft, new QwtYScaleDraw()); + setAxisScaleDraw(QwtPlot::xBottom, + new QwtXScaleDraw(d_x_start_value, d_x_end_value, cols)); + setAxisScaleDraw(QwtPlot::yLeft, + new QwtYScaleDraw(d_y_start_value, d_y_end_value, rows)); for (unsigned int i = 0; i < d_nplots; ++i) { d_data.push_back(new TimeRasterData(d_rows, d_cols)); @@ -205,7 +424,14 @@ TimeRasterDisplayPlot::TimeRasterDisplayPlot( // MidButton for the panning // RightButton: zoom out by 1 // Ctrl+RighButton: zoom out to full size - d_zoomer = new TimeRasterZoomer(canvas(), d_rows, d_cols, 0); + d_zoomer = new TimeRasterZoomer(canvas(), + d_rows, + d_cols, + 0, + d_x_start_value, + d_x_end_value, + d_y_start_value, + d_y_end_value); #if QWT_VERSION < 0x060000 d_zoomer->setSelectionFlags(QwtPicker::RectSelection | QwtPicker::DragSelection); #endif @@ -255,12 +481,22 @@ void TimeRasterDisplayPlot::reset() QwtXScaleDraw* xScale = (QwtXScaleDraw*)axisScaleDraw(QwtPlot::xBottom); xScale->setSecondsPerLine(sec_per_samp); - setAxisTitle(QwtPlot::xBottom, QString("Time (%1)").arg(strunits[iunit].c_str())); + if (d_x_label.length() > 0) { + setAxisTitle(QwtPlot::xBottom, QString(d_x_label.c_str())); + } else { + setAxisTitle(QwtPlot::xBottom, QString("Time (%1)").arg(strunits[iunit].c_str())); + } xScale->initiateUpdate(); + if (d_y_label.length() > 0) { + setAxisTitle(QwtPlot::yLeft, d_y_label.c_str()); + } + // Load up the new base zoom settings if (d_zoomer) { double display_units = 4; + ((TimeRasterZoomer*)d_zoomer)->setXAxis(d_x_start_value, d_x_end_value); + ((TimeRasterZoomer*)d_zoomer)->setYAxis(d_y_start_value, d_y_end_value); ((TimeRasterZoomer*)d_zoomer)->setColumns(d_cols); ((TimeRasterZoomer*)d_zoomer)->setRows(d_rows); ((TimeRasterZoomer*)d_zoomer)->setSecondsPerLine(sec_per_samp); @@ -302,6 +538,36 @@ void TimeRasterDisplayPlot::setSampleRate(double samprate) reset(); } +void TimeRasterDisplayPlot::setXAxis(double min, double max) +{ + d_x_start_value = min; + d_x_end_value = max; + setAxisScaleDraw(QwtPlot::xBottom, + new QwtXScaleDraw(d_x_start_value, d_x_end_value, d_cols)); + reset(); +} + +void TimeRasterDisplayPlot::setXLabel(const std::string& label) +{ + d_x_label = label; + reset(); +} + +void TimeRasterDisplayPlot::setYAxis(double min, double max) +{ + d_y_start_value = min; + d_y_end_value = max; + setAxisScaleDraw(QwtPlot::yLeft, + new QwtYScaleDraw(d_y_start_value, d_y_end_value, d_rows)); + reset(); +} + +void TimeRasterDisplayPlot::setYLabel(const std::string& label) +{ + d_y_label = label; + reset(); +} + double TimeRasterDisplayPlot::numRows() const { return d_rows; } double TimeRasterDisplayPlot::numCols() const { return d_cols; } diff --git a/gr-qtgui/lib/time_raster_sink_b_impl.cc b/gr-qtgui/lib/time_raster_sink_b_impl.cc index bf2812fd97..b936bb5ebc 100644 --- a/gr-qtgui/lib/time_raster_sink_b_impl.cc +++ b/gr-qtgui/lib/time_raster_sink_b_impl.cc @@ -155,6 +155,26 @@ PyObject* time_raster_sink_b_impl::pyqwidget() void* time_raster_sink_b_impl::pyqwidget() { return NULL; } #endif +void time_raster_sink_b_impl::set_x_label(const std::string& label) +{ + d_main_gui->setXLabel(label); +} + +void time_raster_sink_b_impl::set_x_range(double start, double end) +{ + d_main_gui->setXAxis(start, end); +} + +void time_raster_sink_b_impl::set_y_label(const std::string& label) +{ + d_main_gui->setYLabel(label); +} + +void time_raster_sink_b_impl::set_y_range(double start, double end) +{ + d_main_gui->setYAxis(start, end); +} + void time_raster_sink_b_impl::set_update_time(double t) { // convert update time to ticks diff --git a/gr-qtgui/lib/time_raster_sink_b_impl.h b/gr-qtgui/lib/time_raster_sink_b_impl.h index 4ffff9b8f6..ec81f97b6a 100644 --- a/gr-qtgui/lib/time_raster_sink_b_impl.h +++ b/gr-qtgui/lib/time_raster_sink_b_impl.h @@ -76,6 +76,10 @@ public: void* pyqwidget(); #endif + void set_x_label(const std::string& label); + void set_x_range(double start, double end); + void set_y_label(const std::string& label); + void set_y_range(double start, double end); void set_update_time(double t) override; void set_title(const std::string& title) override; void set_line_label(unsigned int which, const std::string& label) override; diff --git a/gr-qtgui/lib/time_raster_sink_f_impl.cc b/gr-qtgui/lib/time_raster_sink_f_impl.cc index fd18413948..793c229b9e 100644 --- a/gr-qtgui/lib/time_raster_sink_f_impl.cc +++ b/gr-qtgui/lib/time_raster_sink_f_impl.cc @@ -153,6 +153,26 @@ PyObject* time_raster_sink_f_impl::pyqwidget() void* time_raster_sink_f_impl::pyqwidget() { return NULL; } #endif +void time_raster_sink_f_impl::set_x_label(const std::string& label) +{ + d_main_gui->setXLabel(label); +} + +void time_raster_sink_f_impl::set_x_range(double start, double end) +{ + d_main_gui->setXAxis(start, end); +} + +void time_raster_sink_f_impl::set_y_label(const std::string& label) +{ + d_main_gui->setYLabel(label); +} + +void time_raster_sink_f_impl::set_y_range(double start, double end) +{ + d_main_gui->setYAxis(start, end); +} + void time_raster_sink_f_impl::set_update_time(double t) { // convert update time to ticks diff --git a/gr-qtgui/lib/time_raster_sink_f_impl.h b/gr-qtgui/lib/time_raster_sink_f_impl.h index b85128dad7..3ca6bf0af7 100644 --- a/gr-qtgui/lib/time_raster_sink_f_impl.h +++ b/gr-qtgui/lib/time_raster_sink_f_impl.h @@ -75,6 +75,10 @@ public: void* pyqwidget(); #endif + void set_x_label(const std::string& label); + void set_x_range(double start, double end); + void set_y_label(const std::string& label); + void set_y_range(double start, double end); void set_update_time(double t) override; void set_title(const std::string& title) override; void set_line_label(unsigned int which, const std::string& label) override; diff --git a/gr-qtgui/lib/timerasterdisplayform.cc b/gr-qtgui/lib/timerasterdisplayform.cc index 3ce29731b5..360cd65a6d 100644 --- a/gr-qtgui/lib/timerasterdisplayform.cc +++ b/gr-qtgui/lib/timerasterdisplayform.cc @@ -177,6 +177,30 @@ void TimeRasterDisplayForm::customEvent(QEvent* e) } } +void TimeRasterDisplayForm::setXAxis(double min, double max) +{ + getPlot()->setXAxis(min, max); + getPlot()->replot(); +} + +void TimeRasterDisplayForm::setXLabel(const std::string& label) +{ + getPlot()->setXLabel(label); + getPlot()->replot(); +} + +void TimeRasterDisplayForm::setYAxis(double min, double max) +{ + getPlot()->setYAxis(min, max); + getPlot()->replot(); +} + +void TimeRasterDisplayForm::setYLabel(const std::string& label) +{ + getPlot()->setYLabel(label); + getPlot()->replot(); +} + void TimeRasterDisplayForm::setNumRows(double rows) { getPlot()->setNumRows(rows); diff --git a/gr-qtgui/python/qtgui/bindings/docstrings/time_raster_sink_b_pydoc_template.h b/gr-qtgui/python/qtgui/bindings/docstrings/time_raster_sink_b_pydoc_template.h index 90ab0ec5fd..4ca1ce62ee 100644 --- a/gr-qtgui/python/qtgui/bindings/docstrings/time_raster_sink_b_pydoc_template.h +++ b/gr-qtgui/python/qtgui/bindings/docstrings/time_raster_sink_b_pydoc_template.h @@ -36,6 +36,18 @@ static const char* __doc_gr_qtgui_time_raster_sink_b_qwidget = R"doc()doc"; static const char* __doc_gr_qtgui_time_raster_sink_b_pyqwidget = R"doc()doc"; +static const char* __doc_gr_qtgui_time_raster_sink_b_set_x_label = R"doc()doc"; + + +static const char* __doc_gr_qtgui_time_raster_sink_b_set_x_range = R"doc()doc"; + + +static const char* __doc_gr_qtgui_time_raster_sink_b_set_y_label = R"doc()doc"; + + +static const char* __doc_gr_qtgui_time_raster_sink_b_set_y_range = R"doc()doc"; + + static const char* __doc_gr_qtgui_time_raster_sink_b_set_update_time = R"doc()doc"; diff --git a/gr-qtgui/python/qtgui/bindings/docstrings/time_raster_sink_f_pydoc_template.h b/gr-qtgui/python/qtgui/bindings/docstrings/time_raster_sink_f_pydoc_template.h index 7d2420c628..c8b20bbaa9 100644 --- a/gr-qtgui/python/qtgui/bindings/docstrings/time_raster_sink_f_pydoc_template.h +++ b/gr-qtgui/python/qtgui/bindings/docstrings/time_raster_sink_f_pydoc_template.h @@ -36,6 +36,18 @@ static const char* __doc_gr_qtgui_time_raster_sink_f_qwidget = R"doc()doc"; static const char* __doc_gr_qtgui_time_raster_sink_f_pyqwidget = R"doc()doc"; +static const char* __doc_gr_qtgui_time_raster_sink_f_set_x_label = R"doc()doc"; + + +static const char* __doc_gr_qtgui_time_raster_sink_f_set_x_range = R"doc()doc"; + + +static const char* __doc_gr_qtgui_time_raster_sink_f_set_y_label = R"doc()doc"; + + +static const char* __doc_gr_qtgui_time_raster_sink_f_set_y_range = R"doc()doc"; + + static const char* __doc_gr_qtgui_time_raster_sink_f_set_update_time = R"doc()doc"; diff --git a/gr-qtgui/python/qtgui/bindings/time_raster_sink_b_python.cc b/gr-qtgui/python/qtgui/bindings/time_raster_sink_b_python.cc index b4cd8c1c9e..8e4de7f443 100644 --- a/gr-qtgui/python/qtgui/bindings/time_raster_sink_b_python.cc +++ b/gr-qtgui/python/qtgui/bindings/time_raster_sink_b_python.cc @@ -76,6 +76,31 @@ void bind_time_raster_sink_b(py::module& m) }, D(time_raster_sink_b, pyqwidget)) + .def("set_x_range", + &time_raster_sink_b::set_x_range, + py::arg("min"), + py::arg("max"), + D(time_raster_sink_b, set_x_range)) + + + .def("set_x_label", + &time_raster_sink_b::set_x_label, + py::arg("label"), + D(time_raster_sink_b, set_x_label)) + + + .def("set_y_range", + &time_raster_sink_b::set_y_range, + py::arg("min"), + py::arg("max"), + D(time_raster_sink_b, set_y_range)) + + + .def("set_y_label", + &time_raster_sink_b::set_y_label, + py::arg("label"), + D(time_raster_sink_b, set_y_label)) + .def("set_update_time", &time_raster_sink_b::set_update_time, diff --git a/gr-qtgui/python/qtgui/bindings/time_raster_sink_f_python.cc b/gr-qtgui/python/qtgui/bindings/time_raster_sink_f_python.cc index 8c640d6101..4665015eeb 100644 --- a/gr-qtgui/python/qtgui/bindings/time_raster_sink_f_python.cc +++ b/gr-qtgui/python/qtgui/bindings/time_raster_sink_f_python.cc @@ -76,6 +76,32 @@ void bind_time_raster_sink_f(py::module& m) }, D(time_raster_sink_f, pyqwidget)) + .def("set_x_range", + &time_raster_sink_f::set_x_range, + py::arg("min"), + py::arg("max"), + D(time_raster_sink_f, set_x_range)) + + + .def("set_x_label", + &time_raster_sink_f::set_x_label, + py::arg("label"), + D(time_raster_sink_f, set_x_label)) + + + .def("set_y_range", + &time_raster_sink_f::set_y_range, + py::arg("min"), + py::arg("max"), + D(time_raster_sink_f, set_y_range)) + + + .def("set_y_label", + &time_raster_sink_f::set_y_label, + py::arg("label"), + D(time_raster_sink_f, set_y_label)) + + .def("set_update_time", &time_raster_sink_f::set_update_time, py::arg("t"), |