summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/VectorDisplayPlot.h22
-rw-r--r--gr-qtgui/lib/VectorDisplayPlot.cc80
2 files changed, 52 insertions, 50 deletions
diff --git a/gr-qtgui/include/gnuradio/qtgui/VectorDisplayPlot.h b/gr-qtgui/include/gnuradio/qtgui/VectorDisplayPlot.h
index 51b5b6e02d..f6e94955ae 100644
--- a/gr-qtgui/include/gnuradio/qtgui/VectorDisplayPlot.h
+++ b/gr-qtgui/include/gnuradio/qtgui/VectorDisplayPlot.h
@@ -45,6 +45,12 @@ public:
VectorDisplayPlot(int nplots, QWidget*);
~VectorDisplayPlot() override;
+ // Disable move/copy because of raw QT pointers.
+ VectorDisplayPlot(const VectorDisplayPlot&) = delete;
+ VectorDisplayPlot(VectorDisplayPlot&&) = delete;
+ VectorDisplayPlot& operator=(const VectorDisplayPlot&) = delete;
+ VectorDisplayPlot& operator=(VectorDisplayPlot&&) = delete;
+
void setXAxisValues(const double start, const double step = 1.0);
void plotNewData(const std::vector<double*> dataPoints,
@@ -105,7 +111,7 @@ private:
void _resetXAxisPoints();
void _autoScale(double bottom, double top);
- std::vector<double*> d_ydata;
+ std::vector<std::vector<double>> d_ydata;
QwtPlotCurve* d_min_vec_plot_curve;
QwtPlotCurve* d_max_vec_plot_curve;
@@ -120,24 +126,24 @@ private:
QColor d_marker_ref_level_color;
bool d_marker_ref_level_visible;
- double d_x_axis_start;
- double d_x_axis_step;
+ double d_x_axis_start = 0;
+ double d_x_axis_step = 1.0;
- double d_ymax;
- double d_ymin;
+ double d_ymax = 10;
+ double d_ymin = -10;
QwtPlotMarker* d_lower_intensity_marker;
QwtPlotMarker* d_upper_intensity_marker;
QwtPlotMarker* d_marker_ref_level;
- double* d_xdata;
+ std::vector<double> d_xdata;
QString d_x_axis_label;
QString d_y_axis_label;
- double* d_min_vec_data;
- double* d_max_vec_data;
+ std::vector<double> d_min_vec_data;
+ std::vector<double> d_max_vec_data;
double d_ref_level;
};
diff --git a/gr-qtgui/lib/VectorDisplayPlot.cc b/gr-qtgui/lib/VectorDisplayPlot.cc
index a395e64776..2ea3ada783 100644
--- a/gr-qtgui/lib/VectorDisplayPlot.cc
+++ b/gr-qtgui/lib/VectorDisplayPlot.cc
@@ -66,22 +66,22 @@ private:
QString d_y_units; //!< Units on y-Axis (e.g. V)
};
+namespace {
+constexpr int default_numpoints = 1024;
+}
/***********************************************************************
* Main frequency display plotter widget
**********************************************************************/
VectorDisplayPlot::VectorDisplayPlot(int nplots, QWidget* parent)
- : DisplayPlot(nplots, parent), d_x_axis_label("x"), d_y_axis_label("y")
+ : DisplayPlot(nplots, parent),
+ d_xdata(default_numpoints),
+ d_x_axis_label("x"),
+ d_y_axis_label("y"),
+ d_min_vec_data(default_numpoints),
+ d_max_vec_data(default_numpoints)
{
- d_numPoints = 1024;
- d_x_axis_start = 0;
- d_x_axis_step = 1.0;
- d_ymin = -10;
- d_ymax = 10;
-
- d_min_vec_data = new double[d_numPoints];
- d_max_vec_data = new double[d_numPoints];
- d_xdata = new double[d_numPoints];
+ d_numPoints = default_numpoints;
setAxisTitle(QwtPlot::xBottom, d_x_axis_label);
setAxisScale(QwtPlot::xBottom, d_x_axis_start, d_numPoints - 1);
@@ -100,8 +100,7 @@ VectorDisplayPlot::VectorDisplayPlot(int nplots, QWidget* parent)
// Create a curve for each input
// Automatically deleted when parent is deleted
for (unsigned int i = 0; i < d_nplots; ++i) {
- d_ydata.push_back(new double[d_numPoints]);
- memset(d_ydata[i], 0x0, d_numPoints * sizeof(double));
+ d_ydata.emplace_back(d_numPoints);
d_plot_curve.push_back(new QwtPlotCurve(QString("Data %1").arg(i)));
d_plot_curve[i]->attach(this);
@@ -112,10 +111,10 @@ VectorDisplayPlot::VectorDisplayPlot(int nplots, QWidget* parent)
QSize(7, 7));
#if QWT_VERSION < 0x060000
- d_plot_curve[i]->setRawData(d_xdata, d_ydata[i], d_numPoints);
+ d_plot_curve[i]->setRawData(d_xdata.data(), d_ydata[i].data(), d_numPoints);
d_plot_curve[i]->setSymbol(*symbol);
#else
- d_plot_curve[i]->setRawSamples(d_xdata, d_ydata[i], d_numPoints);
+ d_plot_curve[i]->setRawSamples(d_xdata.data(), d_ydata[i].data(), d_numPoints);
d_plot_curve[i]->setSymbol(symbol);
#endif
setLineColor(i, default_colors[i]);
@@ -127,9 +126,10 @@ VectorDisplayPlot::VectorDisplayPlot(int nplots, QWidget* parent)
const QColor default_min_fft_color = Qt::magenta;
setMinVecColor(default_min_fft_color);
#if QWT_VERSION < 0x060000
- d_min_vec_plot_curve->setRawData(d_xdata, d_min_vec_data, d_numPoints);
+ d_min_vec_plot_curve->setRawData(d_xdata.data(), d_min_vec_data.data(), d_numPoints);
#else
- d_min_vec_plot_curve->setRawSamples(d_xdata, d_min_vec_data, d_numPoints);
+ d_min_vec_plot_curve->setRawSamples(
+ d_xdata.data(), d_min_vec_data.data(), d_numPoints);
#endif
d_min_vec_plot_curve->setVisible(false);
d_min_vec_plot_curve->setZ(0);
@@ -139,9 +139,10 @@ VectorDisplayPlot::VectorDisplayPlot(int nplots, QWidget* parent)
QColor default_max_fft_color = Qt::darkYellow;
setMaxVecColor(default_max_fft_color);
#if QWT_VERSION < 0x060000
- d_max_vec_plot_curve->setRawData(d_xdata, d_max_vec_data, d_numPoints);
+ d_max_vec_plot_curve->setRawData(d_xdata.data(), d_max_vec_data.data(), d_numPoints);
#else
- d_max_vec_plot_curve->setRawSamples(d_xdata, d_max_vec_data, d_numPoints);
+ d_max_vec_plot_curve->setRawSamples(
+ d_xdata.data(), d_max_vec_data.data(), d_numPoints);
#endif
d_max_vec_plot_curve->setVisible(false);
d_max_vec_plot_curve->setZ(0);
@@ -158,7 +159,7 @@ VectorDisplayPlot::VectorDisplayPlot(int nplots, QWidget* parent)
setMarkerUpperIntensityColor(default_marker_upper_intensity_color);
d_upper_intensity_marker->attach(this);
- memset(d_xdata, 0x0, d_numPoints * sizeof(double));
+ std::fill(std::begin(d_xdata), std::end(d_xdata), 0.0);
for (int64_t number = 0; number < d_numPoints; number++) {
d_min_vec_data[number] = 1e6;
@@ -209,14 +210,7 @@ VectorDisplayPlot::VectorDisplayPlot(int nplots, QWidget* parent)
replot();
}
-VectorDisplayPlot::~VectorDisplayPlot()
-{
- for (unsigned int i = 0; i < d_nplots; ++i)
- delete[] d_ydata[i];
- delete[] d_max_vec_data;
- delete[] d_min_vec_data;
- delete[] d_xdata;
-}
+VectorDisplayPlot::~VectorDisplayPlot() {}
void VectorDisplayPlot::setYaxis(double min, double max)
{
@@ -294,29 +288,31 @@ void VectorDisplayPlot::plotNewData(const std::vector<double*> dataPoints,
if (numDataPoints != d_numPoints) {
d_numPoints = numDataPoints;
- delete[] d_min_vec_data;
- delete[] d_max_vec_data;
- delete[] d_xdata;
- d_xdata = new double[d_numPoints];
- d_min_vec_data = new double[d_numPoints];
- d_max_vec_data = new double[d_numPoints];
+ d_xdata.resize(d_numPoints);
+ d_min_vec_data.resize(d_numPoints);
+ d_max_vec_data.resize(d_numPoints);
for (unsigned int i = 0; i < d_nplots; ++i) {
- delete[] d_ydata[i];
- d_ydata[i] = new double[d_numPoints];
+ d_ydata[i].resize(d_numPoints);
#if QWT_VERSION < 0x060000
- d_plot_curve[i]->setRawData(d_xdata, d_ydata[i], d_numPoints);
+ d_plot_curve[i]->setRawData(
+ d_xdata.data(), d_ydata[i].data(), d_numPoints);
#else
- d_plot_curve[i]->setRawSamples(d_xdata, d_ydata[i], d_numPoints);
+ d_plot_curve[i]->setRawSamples(
+ d_xdata.data(), d_ydata[i].data(), d_numPoints);
#endif
}
#if QWT_VERSION < 0x060000
- d_min_vec_plot_curve->setRawData(d_xdata, d_min_vec_data, d_numPoints);
- d_max_vec_plot_curve->setRawData(d_xdata, d_max_vec_data, d_numPoints);
+ d_min_vec_plot_curve->setRawData(
+ d_xdata.data(), d_min_vec_data.data(), d_numPoints);
+ d_max_vec_plot_curve->setRawData(
+ d_xdata.data(), d_max_vec_data.data(), d_numPoints);
#else
- d_min_vec_plot_curve->setRawSamples(d_xdata, d_min_vec_data, d_numPoints);
- d_max_vec_plot_curve->setRawSamples(d_xdata, d_max_vec_data, d_numPoints);
+ d_min_vec_plot_curve->setRawSamples(
+ d_xdata.data(), d_min_vec_data.data(), d_numPoints);
+ d_max_vec_plot_curve->setRawSamples(
+ d_xdata.data(), d_max_vec_data.data(), d_numPoints);
#endif
_resetXAxisPoints();
clearMaxData();
@@ -326,7 +322,7 @@ void VectorDisplayPlot::plotNewData(const std::vector<double*> dataPoints,
double bottom = 1e20, top = -1e20;
for (unsigned int n = 0; n < d_nplots; ++n) {
- memcpy(d_ydata[n], dataPoints[n], numDataPoints * sizeof(double));
+ memcpy(d_ydata[n].data(), dataPoints[n], numDataPoints * sizeof(double));
for (int64_t point = 0; point < numDataPoints; point++) {
if (dataPoints[n][point] < d_min_vec_data[point]) {