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