X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fengineer%2Fmainpanel.cpp;h=667e95fa17a1fb5c658f18657270a4111bbc8bd0;hb=1ff06c5bc46a677fa389ef86c6b26664368f1653;hp=197c1a4bc9cbbe970605fb988800b7159eb78cf8;hpb=651698847d5293cfb15b6fb23a394701388c0151;p=r2c2.git diff --git a/source/engineer/mainpanel.cpp b/source/engineer/mainpanel.cpp index 197c1a4..667e95f 100644 --- a/source/engineer/mainpanel.cpp +++ b/source/engineer/mainpanel.cpp @@ -1,12 +1,12 @@ /* $Id$ -This file is part of the MSP Märklin suite +This file is part of R²C² Copyright © 2006-2010 Mikkosoft Productions, Mikko Rasa Distributed under the GPL */ #include -#include "libmarklin/driver.h" +#include "libr2c2/driver.h" #include "engineer.h" #include "mainpanel.h" #include "trainproperties.h" @@ -14,53 +14,59 @@ Distributed under the GPL using namespace std; using namespace Msp; -MainPanel::MainPanel(Engineer &e, GLtk::Resources &r): - Widget(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, 53, 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, 53, 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, 53, 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(90, 53, 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)); - add(*(lbl_status=new GLtk::Label(res))); - lbl_status->set_geometry(GLtk::Geometry(10, 10, 180, 24)); + add(*(lbl_status=new GLtk::Label)); + lbl_status->set_geometry(GLtk::Geometry(10, 10, 180, 20)); lbl_status->set_style("digital"); - Marklin::Driver &driver = engineer.get_layout().get_driver(); + 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) @@ -78,9 +84,15 @@ void MainPanel::power_off() 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() { - TrainProperties *dialog = new TrainProperties(engineer, res, 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); @@ -96,3 +108,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); +}