]> git.tdb.fi Git - r2c2.git/blob - source/engineer/mainpanel.cpp
0071f4b9a58a615afe9e19a2741bf8fd59659033
[r2c2.git] / source / engineer / mainpanel.cpp
1 #include <msp/gltk/button.h>
2 #include "libr2c2/driver.h"
3 #include "engineer.h"
4 #include "mainpanel.h"
5 #include "trainproperties.h"
6
7 using namespace std;
8 using namespace Msp;
9
10 MainPanel::MainPanel(Engineer &e):
11         engineer(e)
12 {
13         set_size(200, 117);
14
15         GLtk::Button *btn;
16
17         add(*(btn=new GLtk::Button("Off")));
18         btn->set_geometry(GLtk::Geometry(10, 70, 40, 25));
19         btn->set_style("red");
20         btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::power_off));
21
22         add(*(ind_off=new GLtk::Indicator));
23         ind_off->set_geometry(GLtk::Geometry(10, 95, 40, 12));
24         ind_off->set_style("red");
25
26         add(*(btn=new GLtk::Button("On")));
27         btn->set_geometry(GLtk::Geometry(50, 70, 40, 25));
28         btn->set_style("green");
29         btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::power_on));
30
31         add(*(ind_on=new GLtk::Indicator));
32         ind_on->set_geometry(GLtk::Geometry(50, 95, 40, 12));
33         ind_on->set_style("green");
34
35         add(*(btn=new GLtk::Button("Halt")));
36         btn->set_geometry(GLtk::Geometry(90, 70, 40, 25));
37         btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::toggle_halt));
38
39         add(*(ind_halt=new GLtk::Indicator));
40         ind_halt->set_geometry(GLtk::Geometry(90, 95, 40, 12));
41
42         add(*(btn=new GLtk::Button("Quit")));
43         btn->set_geometry(GLtk::Geometry(150, 70, 40, 25));
44         btn->set_style("red");
45         btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::quit));
46
47         add(*(btn=new GLtk::Button("+Loc")));
48         btn->set_geometry(GLtk::Geometry(10, 40, 40, 25));
49         btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::new_loc));
50
51         add(*(lbl_status=new GLtk::Label));
52         lbl_status->set_geometry(GLtk::Geometry(10, 10, 180, 20));
53         lbl_status->set_style("digital");
54
55         R2C2::Driver &driver = engineer.get_layout().get_driver();
56         if(driver.get_power())
57                 ind_on->set_active(true);
58         else
59                 ind_off->set_active(true);
60
61         driver.signal_power.connect(sigc::mem_fun(this, &MainPanel::power_event));
62         driver.signal_halt.connect(sigc::mem_fun(this, &MainPanel::halt_event));
63 }
64
65 void MainPanel::set_status_text(const string &txt)
66 {
67         lbl_status->set_text(txt);
68 }
69
70 void MainPanel::power_on()
71 {
72         engineer.get_layout().get_driver().set_power(true);
73 }
74
75 void MainPanel::power_off()
76 {
77         engineer.get_layout().get_driver().set_power(false);
78 }
79
80 void MainPanel::toggle_halt()
81 {
82         R2C2::Driver &driver = engineer.get_layout().get_driver();
83         driver.halt(!driver.is_halted());
84 }
85
86 void MainPanel::new_loc()
87 {
88         TrainProperties *dialog = new TrainProperties(engineer, 0);
89         engineer.get_root().add(*dialog);
90         dialog->set_position(geom.x+geom.w, geom.y+geom.h-dialog->get_geometry().h);
91         dialog->set_visible(true);
92 }
93
94 void MainPanel::quit()
95 {
96         engineer.quit();
97 }
98
99 void MainPanel::power_event(bool p)
100 {
101         ind_on->set_active(p);
102         ind_off->set_active(!p);
103 }
104
105 void MainPanel::halt_event(bool h)
106 {
107         ind_halt->set_active(h);
108 }