From 02fe62e0026dd25fd3ff4d5172c0ff097b7c68c9 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Wed, 27 Oct 2010 07:18:19 +0000 Subject: [PATCH] Handle separate speed and reverse controls correctly in remote --- source/network/train.cpp | 6 ++++++ source/remote/trainpanel.cpp | 17 +++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/source/network/train.cpp b/source/network/train.cpp index 6a0c3a8..4b6c8e8 100644 --- a/source/network/train.cpp +++ b/source/network/train.cpp @@ -32,6 +32,12 @@ void NetTrain::set_control(const string &c, float v) client.send(pkt); } +float NetTrain::get_control(const string &c) const +{ + map::const_iterator i = controls.find(c); + return i!=controls.end() ? i->second : 0; +} + void NetTrain::set_function(unsigned i, bool set) { TrainFunctionPacket pkt; diff --git a/source/remote/trainpanel.cpp b/source/remote/trainpanel.cpp index 45435d5..b170edc 100644 --- a/source/remote/trainpanel.cpp +++ b/source/remote/trainpanel.cpp @@ -84,10 +84,11 @@ void TrainPanel::control_changed(const string &control, float value) { if(control=="speed") { - // XXX It would be better to make the LocoType give us the catalogue - scl_speed->set_value(abs(value)*3.6/remote.get_catalogue().get_scale()); - chk_reverse->set_active(value<0); + // XXX It would be better to make the VehicleType give us the catalogue + scl_speed->set_value(value*3.6/remote.get_catalogue().get_scale()); } + else if(control=="reverse") + chk_reverse->set_active(value); } void TrainPanel::function_changed(unsigned func, bool set) @@ -111,14 +112,18 @@ void TrainPanel::route_changed(const string &route) void TrainPanel::ui_speed_changed() { float speed = scl_speed->get_value()/3.6*remote.get_catalogue().get_scale(); - if(chk_reverse->get_active()) - speed = -speed; train.set_control("speed", speed); } void TrainPanel::ui_reverse_changed() { - train.set_control("speed", 0); + if(train.get_control("speed")) + { + train.set_control("speed", 0); + chk_reverse->set_active(train.get_control("reverse")); + } + else + train.set_control("reverse", chk_reverse->get_active()); } void TrainPanel::ui_function_changed(unsigned func) -- 2.43.0