]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/telemetrydialog.cpp
Add a dialog to display telemetry data from the driver
[r2c2.git] / source / engineer / telemetrydialog.cpp
diff --git a/source/engineer/telemetrydialog.cpp b/source/engineer/telemetrydialog.cpp
new file mode 100644 (file)
index 0000000..bceea54
--- /dev/null
@@ -0,0 +1,53 @@
+#include <msp/gltk/column.h>
+#include <msp/gltk/row.h>
+#include "engineer.h"
+#include "telemetrydialog.h"
+
+using namespace std;
+using namespace Msp;
+using namespace R2C2;
+
+TelemetryDialog::TelemetryDialog(Engineer &e):
+       DynamicDialog(e),
+       driver(engineer.get_layout().get_driver())
+{
+       Loader::WidgetMap widgets;
+       DataFile::load(*this, "data/telemetrydialog.ui", widgets);
+
+       GLtk::Panel *pnl_content = dynamic_cast<GLtk::Panel *>(get_item(widgets, "pnl_content"));
+
+       GLtk::Column col(*pnl_content->get_layout());
+       GLtk::Widget *prev_value = 0;
+       for(unsigned i=0;; ++i)
+       {
+               TelemetryLabel tmlabel;
+               tmlabel.info = driver.enumerate_telemetry(i);
+               if(!tmlabel.info)
+                       break;
+
+               GLtk::Row row(*pnl_content->get_layout());
+
+               pnl_content->add(*(new GLtk::Label(tmlabel.info->label)));
+               pnl_content->add(*(tmlabel.label = new GLtk::Label));
+               values.push_back(tmlabel);
+
+               if(prev_value)
+                       pnl_content->get_layout()->add_constraint(*tmlabel.label, GLtk::Layout::ALIGN_LEFT, *prev_value);
+               prev_value = tmlabel.label;
+       }
+}
+
+void TelemetryDialog::update()
+{
+       for(list<TelemetryLabel>::iterator i=values.begin(); i!=values.end(); ++i)
+       {
+               float value = driver.get_telemetry_value(i->info->name);
+               string text = lexical_cast<string>(value, Fmt().fixed().precision(i->info->precision));
+               if(i->info->unit)
+               {
+                       text += ' ';
+                       text += i->info->unit;
+               }
+               i->label->set_text(text);
+       }
+}