]> git.tdb.fi Git - r2c2.git/blob - source/engineer/mainpanel.cpp
0178eb41e1c754c6ea9bcac2f913f588ccfe3e29
[r2c2.git] / source / engineer / mainpanel.cpp
1 #include <msp/gltk/button.h>
2 #include "engineer.h"
3 #include "mainpanel.h"
4
5 using namespace std;
6 using namespace Msp;
7
8 MainPanel::MainPanel(Engineer &e, GLtk::Resources &r):
9         Panel(r),
10         engineer(e)
11 {
12         set_size(200, 100);
13
14         GLtk::Button *btn;
15
16         add(*(btn=new GLtk::Button(res, "Off")));
17         btn->set_geometry(GLtk::Geometry(10, 53, 40, 25));
18         btn->set_style("red");
19         btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::power_off));
20
21         add(*(ind_off=new GLtk::Indicator(res)));
22         ind_off->set_geometry(GLtk::Geometry(10, 78, 40, 12));
23         ind_off->set_style("red");
24
25         add(*(btn=new GLtk::Button(res, "On")));
26         btn->set_geometry(GLtk::Geometry(50, 53, 40, 25));
27         btn->set_style("green");
28         btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::power_on));
29
30         add(*(ind_on=new GLtk::Indicator(res)));
31         ind_on->set_geometry(GLtk::Geometry(50, 78, 40, 12));
32         ind_on->set_style("green");
33
34         add(*(btn=new GLtk::Button(res, "Quit")));
35         btn->set_geometry(GLtk::Geometry(150, 53, 40, 25));
36         btn->set_style("red");
37         btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::quit));
38
39         add(*(btn=new GLtk::Button(res, "+Loc")));
40         btn->set_geometry(GLtk::Geometry(90, 53, 40, 25));
41         btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::new_loc));
42
43         add(*(lbl_status=new GLtk::Label(res)));
44         lbl_status->set_geometry(GLtk::Geometry(10, 10, 180, 24));
45         lbl_status->set_style("digital");
46
47         if(engineer.get_control().get_power())
48                 ind_on->set_active(true);
49         else
50                 ind_off->set_active(true);
51
52         engineer.get_control().signal_power_event.connect(sigc::mem_fun(this, &MainPanel::power_event));
53 }
54
55 void MainPanel::set_status_text(const string &txt)
56 {
57         lbl_status->set_text(txt);
58 }
59
60 void MainPanel::power_on()
61 {
62         engineer.get_control().set_power(true);
63         ind_on->set_active(true);
64         ind_off->set_active(false);
65 }
66
67 void MainPanel::power_off()
68 {
69         engineer.get_control().set_power(false);
70         ind_on->set_active(false);
71         ind_off->set_active(true);
72 }
73
74 void MainPanel::new_loc()
75 {
76         engineer.add_train();
77 }
78
79 void MainPanel::quit()
80 {
81         engineer.quit();
82 }
83
84 void MainPanel::power_event(bool p)
85 {
86         ind_on->set_active(p);
87         ind_off->set_active(!p);
88 }