1 #include <msp/gltk/button.h>
2 #include "libr2c2/driver.h"
5 #include "trainproperties.h"
10 MainPanel::MainPanel(Engineer &e):
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));
22 add(*(ind_off=new GLtk::Indicator));
23 ind_off->set_geometry(GLtk::Geometry(10, 95, 40, 12));
24 ind_off->set_style("red");
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));
31 add(*(ind_on=new GLtk::Indicator));
32 ind_on->set_geometry(GLtk::Geometry(50, 95, 40, 12));
33 ind_on->set_style("green");
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));
39 add(*(ind_halt=new GLtk::Indicator));
40 ind_halt->set_geometry(GLtk::Geometry(90, 95, 40, 12));
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));
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));
51 add(*(lbl_status=new GLtk::Label));
52 lbl_status->set_geometry(GLtk::Geometry(10, 10, 180, 20));
53 lbl_status->set_style("digital");
55 R2C2::Driver &driver = engineer.get_layout().get_driver();
56 if(driver.get_power())
57 ind_on->set_active(true);
59 ind_off->set_active(true);
61 driver.signal_power.connect(sigc::mem_fun(this, &MainPanel::power_event));
62 driver.signal_halt.connect(sigc::mem_fun(this, &MainPanel::halt_event));
65 void MainPanel::set_status_text(const string &txt)
67 lbl_status->set_text(txt);
70 void MainPanel::power_on()
72 engineer.get_layout().get_driver().set_power(true);
75 void MainPanel::power_off()
77 engineer.get_layout().get_driver().set_power(false);
80 void MainPanel::toggle_halt()
82 R2C2::Driver &driver = engineer.get_layout().get_driver();
83 driver.halt(!driver.is_halted());
86 void MainPanel::new_loc()
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);
94 void MainPanel::quit()
99 void MainPanel::power_event(bool p)
101 ind_on->set_active(p);
102 ind_off->set_active(!p);
105 void MainPanel::halt_event(bool h)
107 ind_halt->set_active(h);