]> git.tdb.fi Git - r2c2.git/blob - source/engineer/mainwindow.cpp
Complete rewrite of the engineer UI
[r2c2.git] / source / engineer / mainwindow.cpp
1 #include <msp/gltk/button.h>
2 #include "libr2c2/driver.h"
3 #include "engineer.h"
4 #include "mainwindow.h"
5 #include "trainlistdialog.h"
6
7 using namespace std;
8 using namespace Msp;
9
10 MainWindow::MainWindow(Engineer &e):
11         engineer(e)
12 {
13         Loader::WidgetMap widgets;
14         DataFile::load(*this, "data/mainwindow.ui", widgets);
15
16         ind_on = dynamic_cast<GLtk::Indicator *>(get_item(widgets, "ind_on"));
17         ind_off = dynamic_cast<GLtk::Indicator *>(get_item(widgets, "ind_off"));
18         ind_halt = dynamic_cast<GLtk::Indicator *>(get_item(widgets, "ind_halt"));
19         lbl_status = dynamic_cast<GLtk::Label *>(get_item(widgets, "lbl_status"));
20
21         dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_on"))->signal_clicked.connect(sigc::mem_fun(this, &MainWindow::on_clicked));
22         dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_off"))->signal_clicked.connect(sigc::mem_fun(this, &MainWindow::off_clicked));
23         dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_halt"))->signal_clicked.connect(sigc::mem_fun(this, &MainWindow::halt_clicked));
24         dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_trains"))->signal_clicked.connect(sigc::mem_fun(this, &MainWindow::trains_clicked));
25         dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_quit"))->signal_clicked.connect(sigc::mem_fun(this, &MainWindow::quit_clicked));
26
27         R2C2::Driver &driver = engineer.get_layout().get_driver();
28         if(driver.get_power())
29                 ind_on->set_active(true);
30         else
31                 ind_off->set_active(true);
32
33         driver.signal_power.connect(sigc::mem_fun(this, &MainWindow::power_event));
34         driver.signal_halt.connect(sigc::mem_fun(this, &MainWindow::halt_event));
35 }
36
37 void MainWindow::set_status_text(const string &txt)
38 {
39         lbl_status->set_text(txt);
40 }
41
42 void MainWindow::on_clicked()
43 {
44         engineer.get_layout().get_driver().set_power(true);
45 }
46
47 void MainWindow::off_clicked()
48 {
49         engineer.get_layout().get_driver().set_power(false);
50 }
51
52 void MainWindow::halt_clicked()
53 {
54         R2C2::Driver &driver = engineer.get_layout().get_driver();
55         driver.halt(!driver.is_halted());
56 }
57
58 void MainWindow::trains_clicked()
59 {
60         GLtk::Container *root = parent;
61         while(root->get_parent())
62                 root = root->get_parent();
63
64         TrainListDialog *dlg = new TrainListDialog(engineer);
65         root->add(*dlg);
66         dlg->autosize();
67 }
68
69 void MainWindow::quit_clicked()
70 {
71         engineer.quit();
72 }
73
74 void MainWindow::power_event(bool p)
75 {
76         ind_on->set_active(p);
77         ind_off->set_active(!p);
78 }
79
80 void MainWindow::halt_event(bool h)
81 {
82         ind_halt->set_active(h);
83 }