]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/mainpanel.cpp
Halt all trains in various unexpected situations
[r2c2.git] / source / engineer / mainpanel.cpp
index 197c1a4bc9cbbe970605fb988800b7159eb78cf8..49750bfc32af7abee5f5a83a78b366fccdfcde7f 100644 (file)
@@ -19,37 +19,44 @@ MainPanel::MainPanel(Engineer &e, GLtk::Resources &r):
        Panel(r),
        engineer(e)
 {
-       set_size(200, 100);
+       set_size(200, 133);
 
        GLtk::Button *btn;
 
        add(*(btn=new GLtk::Button(res, "Off")));
-       btn->set_geometry(GLtk::Geometry(10, 53, 40, 25));
+       btn->set_geometry(GLtk::Geometry(10, 86, 40, 25));
        btn->set_style("red");
        btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::power_off));
 
        add(*(ind_off=new GLtk::Indicator(res)));
-       ind_off->set_geometry(GLtk::Geometry(10, 78, 40, 12));
+       ind_off->set_geometry(GLtk::Geometry(10, 111, 40, 12));
        ind_off->set_style("red");
 
        add(*(btn=new GLtk::Button(res, "On")));
-       btn->set_geometry(GLtk::Geometry(50, 53, 40, 25));
+       btn->set_geometry(GLtk::Geometry(50, 86, 40, 25));
        btn->set_style("green");
        btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::power_on));
 
        add(*(ind_on=new GLtk::Indicator(res)));
-       ind_on->set_geometry(GLtk::Geometry(50, 78, 40, 12));
+       ind_on->set_geometry(GLtk::Geometry(50, 111, 40, 12));
        ind_on->set_style("green");
 
        add(*(btn=new GLtk::Button(res, "Quit")));
-       btn->set_geometry(GLtk::Geometry(150, 53, 40, 25));
+       btn->set_geometry(GLtk::Geometry(150, 86, 40, 25));
        btn->set_style("red");
        btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::quit));
 
        add(*(btn=new GLtk::Button(res, "+Loc")));
-       btn->set_geometry(GLtk::Geometry(90, 53, 40, 25));
+       btn->set_geometry(GLtk::Geometry(90, 86, 40, 25));
        btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::new_loc));
 
+       add(*(ind_halt=new GLtk::Indicator(res)));
+       ind_halt->set_geometry(GLtk::Geometry(10, 69, 40, 12));
+
+       add(*(btn=new GLtk::Button(res, "Halt")));
+       btn->set_geometry(GLtk::Geometry(10, 44, 40, 25));
+       btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::toggle_halt));
+
        add(*(lbl_status=new GLtk::Label(res)));
        lbl_status->set_geometry(GLtk::Geometry(10, 10, 180, 24));
        lbl_status->set_style("digital");
@@ -61,6 +68,7 @@ MainPanel::MainPanel(Engineer &e, GLtk::Resources &r):
                ind_off->set_active(true);
 
        driver.signal_power.connect(sigc::mem_fun(this, &MainPanel::power_event));
+       driver.signal_halt.connect(sigc::mem_fun(this, &MainPanel::halt_event));
 }
 
 void MainPanel::set_status_text(const string &txt)
@@ -78,6 +86,12 @@ void MainPanel::power_off()
        engineer.get_layout().get_driver().set_power(false);
 }
 
+void MainPanel::toggle_halt()
+{
+       Marklin::Driver &driver = engineer.get_layout().get_driver();
+       driver.halt(!driver.is_halted());
+}
+
 void MainPanel::new_loc()
 {
        TrainProperties *dialog = new TrainProperties(engineer, res, 0);
@@ -96,3 +110,8 @@ void MainPanel::power_event(bool p)
        ind_on->set_active(p);
        ind_off->set_active(!p);
 }
+
+void MainPanel::halt_event(bool h)
+{
+       ind_halt->set_active(h);
+}