]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/mainpanel.cpp
Further adjustments to changes in GLtk
[r2c2.git] / source / engineer / mainpanel.cpp
index 7e68c03d87ae7e6393d8b338510abedfe16851f9..0071f4b9a58a615afe9e19a2741bf8fd59659033 100644 (file)
 #include <msp/gltk/button.h>
+#include "libr2c2/driver.h"
 #include "engineer.h"
 #include "mainpanel.h"
+#include "trainproperties.h"
 
+using namespace std;
 using namespace Msp;
 
-MainPanel::MainPanel(Engineer &e, GLtk::Resources &r):
-       Panel(r),
+MainPanel::MainPanel(Engineer &e):
        engineer(e)
 {
-       set_size(200, 100);
+       set_size(200, 117);
 
        GLtk::Button *btn;
 
-       add(*(btn=new GLtk::Button(res, "Off")));
-       btn->set_geometry(GLtk::Geometry(10, 50, 40, 25));
+       add(*(btn=new GLtk::Button("Off")));
+       btn->set_geometry(GLtk::Geometry(10, 70, 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));
+       add(*(ind_off=new GLtk::Indicator));
+       ind_off->set_geometry(GLtk::Geometry(10, 95, 40, 12));
        ind_off->set_style("red");
 
-       add(*(btn=new GLtk::Button(res, "On")));
-       btn->set_geometry(GLtk::Geometry(50, 50, 40, 25));
+       add(*(btn=new GLtk::Button("On")));
+       btn->set_geometry(GLtk::Geometry(50, 70, 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));
+       add(*(ind_on=new GLtk::Indicator));
+       ind_on->set_geometry(GLtk::Geometry(50, 95, 40, 12));
        ind_on->set_style("green");
 
-       add(*(btn=new GLtk::Button(res, "Quit")));
-       btn->set_geometry(GLtk::Geometry(150, 50, 40, 25));
+       add(*(btn=new GLtk::Button("Halt")));
+       btn->set_geometry(GLtk::Geometry(90, 70, 40, 25));
+       btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::toggle_halt));
+
+       add(*(ind_halt=new GLtk::Indicator));
+       ind_halt->set_geometry(GLtk::Geometry(90, 95, 40, 12));
+
+       add(*(btn=new GLtk::Button("Quit")));
+       btn->set_geometry(GLtk::Geometry(150, 70, 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(10, 10, 40, 25));
+       add(*(btn=new GLtk::Button("+Loc")));
+       btn->set_geometry(GLtk::Geometry(10, 40, 40, 25));
        btn->signal_clicked.connect(sigc::mem_fun(this, &MainPanel::new_loc));
 
-       if(engineer.get_control().get_power())
+       add(*(lbl_status=new GLtk::Label));
+       lbl_status->set_geometry(GLtk::Geometry(10, 10, 180, 20));
+       lbl_status->set_style("digital");
+
+       R2C2::Driver &driver = engineer.get_layout().get_driver();
+       if(driver.get_power())
                ind_on->set_active(true);
        else
                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)
+{
+       lbl_status->set_text(txt);
 }
 
 void MainPanel::power_on()
 {
-       engineer.get_control().set_power(true);
-       ind_on->set_active(true);
-       ind_off->set_active(false);
+       engineer.get_layout().get_driver().set_power(true);
 }
 
 void MainPanel::power_off()
 {
-       engineer.get_control().set_power(false);
-       ind_on->set_active(false);
-       ind_off->set_active(true);
+       engineer.get_layout().get_driver().set_power(false);
+}
+
+void MainPanel::toggle_halt()
+{
+       R2C2::Driver &driver = engineer.get_layout().get_driver();
+       driver.halt(!driver.is_halted());
 }
 
 void MainPanel::new_loc()
 {
-       engineer.add_train(0);
+       TrainProperties *dialog = new TrainProperties(engineer, 0);
+       engineer.get_root().add(*dialog);
+       dialog->set_position(geom.x+geom.w, geom.y+geom.h-dialog->get_geometry().h);
+       dialog->set_visible(true);
 }
 
 void MainPanel::quit()
 {
        engineer.quit();
 }
+
+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);
+}