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