summaryrefslogtreecommitdiff
path: root/gr-qtgui/lib/timerasterdisplayform.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-qtgui/lib/timerasterdisplayform.cc')
-rw-r--r--gr-qtgui/lib/timerasterdisplayform.cc251
1 files changed, 251 insertions, 0 deletions
diff --git a/gr-qtgui/lib/timerasterdisplayform.cc b/gr-qtgui/lib/timerasterdisplayform.cc
new file mode 100644
index 0000000000..ed17cf45ce
--- /dev/null
+++ b/gr-qtgui/lib/timerasterdisplayform.cc
@@ -0,0 +1,251 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <cmath>
+#include <QColorDialog>
+#include <QMessageBox>
+#include <timerasterdisplayform.h>
+#include <iostream>
+
+TimeRasterDisplayForm::TimeRasterDisplayForm(int nplots,
+ double samp_rate,
+ double rows, double cols,
+ double zmax,
+ QWidget* parent)
+ : DisplayForm(nplots, parent)
+{
+#if QWT_VERSION < 0x060000
+ std::cerr << "Warning: QWT5 has been found which has serious performance issues with raster plots."
+ << std::endl << " Consider updating to QWT version 6 to use the time raster GUIs."
+ << std::endl << std::endl;
+#endif
+
+ _layout = new QGridLayout(this);
+ _displayPlot = new TimeRasterDisplayPlot(nplots, samp_rate, rows, cols, this);
+ _layout->addWidget(_displayPlot, 0, 0);
+ setLayout(_layout);
+
+ _min_val = 10;
+ _max_val = -10;
+
+ // We don't use the normal menus that are part of the displayform.
+ // Clear them out to get rid of their resources.
+ for(int i = 0; i < nplots; i++) {
+ _lines_menu[i]->clear();
+ }
+ _line_title_act.clear();
+ _line_color_menu.clear();
+ _line_width_menu.clear();
+ _line_style_menu.clear();
+ _line_marker_menu.clear();
+ _marker_alpha_menu.clear();
+
+ // Now create our own menus
+ for(int i = 0; i < nplots; i++) {
+ ColorMapMenu *colormap = new ColorMapMenu(i, this);
+ connect(colormap, SIGNAL(whichTrigger(int, const int, const QColor&, const QColor&)),
+ this, SLOT(setColorMap(int, const int, const QColor&, const QColor&)));
+ _lines_menu[i]->addMenu(colormap);
+
+ _marker_alpha_menu.push_back(new MarkerAlphaMenu(i, this));
+ connect(_marker_alpha_menu[i], SIGNAL(whichTrigger(int, int)),
+ this, SLOT(setAlpha(int, int)));
+ _lines_menu[i]->addMenu(_marker_alpha_menu[i]);
+ }
+
+ // One scales once when clicked, so no on/off toggling
+ _autoscale_act->setText(tr("Auto Scale"));
+ _autoscale_act->setCheckable(false);
+
+ PopupMenu *colsmenu = new PopupMenu("Num. Columns", this);
+ _menu->addAction(colsmenu);
+ connect(colsmenu, SIGNAL(whichTrigger(QString)),
+ this, SLOT(setNumCols(QString)));
+
+ PopupMenu *rowsmenu = new PopupMenu("Num. Rows", this);
+ _menu->addAction(rowsmenu);
+ connect(rowsmenu, SIGNAL(whichTrigger(QString)),
+ this, SLOT(setNumRows(QString)));
+
+ getPlot()->setIntensityRange(0, zmax);
+
+ Reset();
+
+ connect(_displayPlot, SIGNAL(plotPointSelected(const QPointF)),
+ this, SLOT(onPlotPointSelected(const QPointF)));
+}
+
+TimeRasterDisplayForm::~TimeRasterDisplayForm()
+{
+ // Don't worry about deleting Display Plots - they are deleted when
+ // parents are deleted
+}
+
+TimeRasterDisplayPlot*
+TimeRasterDisplayForm::getPlot()
+{
+ return ((TimeRasterDisplayPlot*)_displayPlot);
+}
+
+double
+TimeRasterDisplayForm::numRows()
+{
+ return getPlot()->numRows();
+}
+
+double
+TimeRasterDisplayForm::numCols()
+{
+ return getPlot()->numCols();
+}
+
+int
+TimeRasterDisplayForm::getColorMap(int which)
+{
+ return getPlot()->getIntensityColorMapType(which);
+}
+
+int
+TimeRasterDisplayForm::getAlpha(int which)
+{
+ return getPlot()->getAlpha(which);
+}
+
+double
+TimeRasterDisplayForm::getMinIntensity(int which)
+{
+ return getPlot()->getMinIntensity(which);
+}
+
+double
+TimeRasterDisplayForm::getMaxIntensity(int which)
+{
+ return getPlot()->getMaxIntensity(which);
+}
+
+
+void
+TimeRasterDisplayForm::newData(const QEvent *updateEvent)
+{
+ TimeRasterUpdateEvent *event = (TimeRasterUpdateEvent*)updateEvent;
+ const std::vector<double*> dataPoints = event->getPoints();
+ const uint64_t numDataPoints = event->getNumDataPoints();
+
+ _min_val = 10;
+ _max_val = -10;
+ for(size_t i=0; i < dataPoints.size(); i++) {
+ double *min_val = std::min_element(&dataPoints[i][0], &dataPoints[i][numDataPoints-1]);
+ double *max_val = std::max_element(&dataPoints[i][0], &dataPoints[i][numDataPoints-1]);
+ if(*min_val < _min_val)
+ _min_val = *min_val;
+ if(*max_val > _max_val)
+ _max_val = *max_val;
+ }
+
+ getPlot()->plotNewData(dataPoints, numDataPoints);
+}
+
+void
+TimeRasterDisplayForm::customEvent( QEvent * e)
+{
+ if(e->type() == TimeRasterUpdateEvent::Type()) {
+ newData(e);
+ }
+}
+
+void
+TimeRasterDisplayForm::setNumRows(double rows)
+{
+ getPlot()->setNumRows(rows);
+ getPlot()->replot();
+}
+
+void
+TimeRasterDisplayForm::setNumRows(QString rows)
+{
+ getPlot()->setNumRows(rows.toDouble());
+ getPlot()->replot();
+}
+
+void
+TimeRasterDisplayForm::setNumCols(double cols)
+{
+ getPlot()->setNumCols(cols);
+ getPlot()->replot();
+}
+
+void
+TimeRasterDisplayForm::setNumCols(QString cols)
+{
+ getPlot()->setNumCols(cols.toDouble());
+ getPlot()->replot();
+}
+
+void
+TimeRasterDisplayForm::setSampleRate(const double rate)
+{
+ getPlot()->setSampleRate(rate);
+ getPlot()->replot();
+}
+
+void
+TimeRasterDisplayForm::setSampleRate(const QString &rate)
+{
+ getPlot()->setSampleRate(rate.toDouble());
+ getPlot()->replot();
+}
+
+void
+TimeRasterDisplayForm::setColorMap(int which,
+ const int newType,
+ const QColor lowColor,
+ const QColor highColor)
+{
+ getPlot()->setIntensityColorMapType(which, newType,
+ lowColor, highColor);
+ getPlot()->replot();
+}
+
+void
+TimeRasterDisplayForm::setAlpha(int which, int alpha)
+{
+ getPlot()->setAlpha(which, alpha);
+ getPlot()->replot();
+}
+
+void
+TimeRasterDisplayForm::setIntensityRange(const double minIntensity,
+ const double maxIntensity)
+{
+ getPlot()->setIntensityRange(minIntensity, maxIntensity);
+ getPlot()->replot();
+}
+
+void
+TimeRasterDisplayForm::autoScale(bool en)
+{
+ double min_int = _min_val;
+ double max_int = _max_val;
+
+ getPlot()->setIntensityRange(min_int, max_int);
+ getPlot()->replot();
+}