+#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);
+ }
+}