summaryrefslogtreecommitdiff
path: root/gr-qtgui/lib/numberdisplayform.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-qtgui/lib/numberdisplayform.cc')
-rw-r--r--gr-qtgui/lib/numberdisplayform.cc106
1 files changed, 90 insertions, 16 deletions
diff --git a/gr-qtgui/lib/numberdisplayform.cc b/gr-qtgui/lib/numberdisplayform.cc
index b2b3fe453a..0fb30cdd88 100644
--- a/gr-qtgui/lib/numberdisplayform.cc
+++ b/gr-qtgui/lib/numberdisplayform.cc
@@ -32,11 +32,15 @@ NumberDisplayForm::NumberDisplayForm(int nplots, gr::qtgui::graph_t type,
: QWidget(parent)
{
d_nplots = nplots;
+ d_graph_type = type;
+ d_title = new QLabel(QString(""));
d_layout = new QGridLayout(this);
for(int i = 0; i < d_nplots; i++) {
d_min.push_back(+1e32);
d_max.push_back(-1e32);
d_label.push_back(new QLabel(QString("Data %1").arg(i)));
+ d_unit.push_back("");
+ d_factor.push_back(1);
d_text_box.push_back(new QLabel(QString("0")));
d_indicator.push_back(new QwtThermo());
@@ -105,6 +109,11 @@ NumberDisplayForm::NumberDisplayForm(int nplots, gr::qtgui::graph_t type,
this, SLOT(setColor(int, const QColor&, const QColor&)));
d_label_menu[i]->addMenu(d_color_menu[i]);
+ d_factor_act.push_back(new ItemFloatAct(i, "Factor", this));
+ connect(d_factor_act[i], SIGNAL(whichTrigger(int, float)),
+ this, SLOT(setFactor(int, float)));
+ d_label_menu[i]->addAction(d_factor_act[i]);
+
d_menu->addMenu(d_label_menu[i]);
}
@@ -230,10 +239,12 @@ NumberDisplayForm::newData(const QEvent* updateEvent)
const std::vector<float> samples = tevent->getSamples();
for(int i = 0; i < d_nplots; i++) {
- d_text_box[i]->setText(QString("%1").arg(samples[i], 4, ' '));
- d_indicator[i]->setValue(samples[i]);
- d_min[i] = std::min(d_min[i], samples[i]);
- d_max[i] = std::max(d_max[i], samples[i]);
+ float f = d_factor[i]*samples[i];
+ d_text_box[i]->setText(QString("%1 %2").arg(f, 4, ' ').\
+ arg(QString(d_unit[i].c_str())));
+ d_indicator[i]->setValue(f);
+ d_min[i] = std::min(d_min[i], f);
+ d_max[i] = std::max(d_max[i], f);
if(d_autoscale_state) {
d_indicator[i]->setScale(d_min[i], d_max[i]);
@@ -254,12 +265,23 @@ NumberDisplayForm::customEvent(QEvent * e)
void
NumberDisplayForm::setGraphType(const gr::qtgui::graph_t type)
{
+ int off = 0;
+
+ // Remove all widgets from the layout
+ QLayoutItem *item;
+ while((item = d_layout->takeAt(0)) != NULL) {
+ d_layout->removeItem(item);
+ }
+
+ // If we have a title, add it at the 0,0 grid point (top left)
+ // set off = 1 to offset the rest of the widgets
+ if(d_title->text().length() > 0) {
+ d_layout->addWidget(d_title, 0, 0);
+ off = 1;
+ }
+
d_graph_type = type;
for(int i = 0; i < d_nplots; i++) {
- d_layout->removeWidget(d_indicator[i]);
- d_layout->removeWidget(d_label[i]);
- d_layout->removeWidget(d_text_box[i]);
-
switch(d_graph_type) {
case(gr::qtgui::NUM_GRAPH_HORIZ):
#if QWT_VERSION < 0x060100
@@ -268,9 +290,9 @@ NumberDisplayForm::setGraphType(const gr::qtgui::graph_t type)
d_indicator[i]->setOrientation(Qt::Horizontal);
#endif /* if QWT_VERSION < 0x060100 */
d_indicator[i]->setVisible(true);
- d_layout->addWidget(d_label[i], 2*i, 0);
- d_layout->addWidget(d_text_box[i], 2*i, 1);
- d_layout->addWidget(d_indicator[i], 2*i+1, 1);
+ d_layout->addWidget(d_label[i], 2*i+off, 0);
+ d_layout->addWidget(d_text_box[i], 2*i+off, 1);
+ d_layout->addWidget(d_indicator[i], 2*i+1+off, 1);
break;
case(gr::qtgui::NUM_GRAPH_VERT):
#if QWT_VERSION < 0x060100
@@ -279,15 +301,15 @@ NumberDisplayForm::setGraphType(const gr::qtgui::graph_t type)
d_indicator[i]->setOrientation(Qt::Vertical);
#endif /* if QWT_VERSION < 0x060100 */
d_indicator[i]->setVisible(true);
- d_layout->addWidget(d_label[i], 0, i);
- d_layout->addWidget(d_text_box[i], 1, i);
- d_layout->addWidget(d_indicator[i], 2, i);
+ d_layout->addWidget(d_label[i], 0+off, i);
+ d_layout->addWidget(d_text_box[i], 1+off, i);
+ d_layout->addWidget(d_indicator[i], 2+off, i);
break;
case(gr::qtgui::NUM_GRAPH_NONE):
default:
d_indicator[i]->setVisible(false);
- d_layout->addWidget(d_label[i], 0, i);
- d_layout->addWidget(d_text_box[i], 1, i);
+ d_layout->addWidget(d_label[i], 0+off, i);
+ d_layout->addWidget(d_text_box[i], 1+off, i);
break;
}
}
@@ -439,3 +461,55 @@ NumberDisplayForm::autoScale(bool on)
d_max.push_back(-1e32);
}
}
+
+std::string
+NumberDisplayForm::title() const
+{
+ return d_title->text().toStdString();
+}
+
+void
+NumberDisplayForm::setTitle(const std::string &title)
+{
+ std::string t = title;
+ if(t.length() > 0)
+ t = "<b><FONT SIZE=4>" + title + "</b>";
+ d_title->setText(QString(t.c_str()));
+ setGraphType(d_graph_type);
+}
+
+std::string
+NumberDisplayForm::unit(int which) const
+{
+ if(static_cast<size_t>(which) >= d_unit.size())
+ throw std::runtime_error("NumberDisplayForm::units: invalid 'which'.\n");
+
+ return d_unit[which];
+}
+
+void
+NumberDisplayForm::setUnit(int which, const std::string &unit)
+{
+ if(static_cast<size_t>(which) >= d_unit.size())
+ throw std::runtime_error("NumberDisplayForm::setUnits: invalid 'which'.\n");
+
+ d_unit[which] = unit;
+}
+
+float
+NumberDisplayForm::factor(int which) const
+{
+ if(static_cast<size_t>(which) >= d_factor.size())
+ throw std::runtime_error("NumberDisplayForm::factor: invalid 'which'.\n");
+
+ return d_factor[which];
+}
+
+void
+NumberDisplayForm::setFactor(int which, float factor)
+{
+ if(static_cast<size_t>(which) >= d_factor.size())
+ throw std::runtime_error("NumberDisplayForm::setFactor: invalid 'which'.\n");
+
+ d_factor[which] = factor;
+}