]> git.tdb.fi Git - r2c2.git/blob - source/engineer/telemetrydialog.cpp
Persist most dialogs across runs
[r2c2.git] / source / engineer / telemetrydialog.cpp
1 #include <msp/gltk/column.h>
2 #include <msp/gltk/row.h>
3 #include "engineer.h"
4 #include "telemetrydialog.h"
5
6 using namespace std;
7 using namespace Msp;
8 using namespace R2C2;
9
10 TelemetryDialog::TelemetryDialog(Engineer &engineer):
11         DynamicDialog(engineer.get_user_interface()),
12         driver(engineer.get_layout().get_driver())
13 {
14         Loader::WidgetMap widgets;
15         DataFile::load(*this, "data/telemetrydialog.ui", widgets);
16
17         GLtk::Panel *pnl_content = dynamic_cast<GLtk::Panel *>(get_item(widgets, "pnl_content"));
18
19         GLtk::Column col(*pnl_content->get_layout());
20         GLtk::Widget *prev_value = 0;
21         for(unsigned i=0;; ++i)
22         {
23                 TelemetryLabel tmlabel;
24                 tmlabel.info = driver.enumerate_telemetry(i);
25                 if(!tmlabel.info)
26                         break;
27
28                 GLtk::Row row(*pnl_content->get_layout());
29
30                 pnl_content->add(*(new GLtk::Label(tmlabel.info->label)));
31                 pnl_content->add(*(tmlabel.label = new GLtk::Label));
32                 values.push_back(tmlabel);
33
34                 if(prev_value)
35                         pnl_content->get_layout()->add_constraint(*tmlabel.label, GLtk::Layout::ALIGN_LEFT, *prev_value);
36                 prev_value = tmlabel.label;
37         }
38 }
39
40 void TelemetryDialog::update()
41 {
42         for(list<TelemetryLabel>::iterator i=values.begin(); i!=values.end(); ++i)
43         {
44                 float value = driver.get_telemetry_value(i->info->name);
45                 string text = lexical_cast<string>(value, Fmt().fixed().precision(i->info->precision));
46                 if(i->info->unit)
47                 {
48                         text += ' ';
49                         text += i->info->unit;
50                 }
51                 i->label->set_text(text);
52         }
53 }
54
55 bool TelemetryDialog::save_state(DataFile::Statement &st) const
56 {
57         st.keyword = "telemetrydialog";
58         save_position(st.sub);
59
60         return true;
61 }