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