]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/engineer.cpp
Allow intercepting and denying turnout route and locomotive speed changes
[r2c2.git] / source / engineer / engineer.cpp
index 581a301d8f194df79574671c15e95d165e4714c0..be4c050b9ccf1fee465b2d222aab7115354097da 100644 (file)
@@ -20,6 +20,7 @@ Distributed under the GPL
 #include <msp/strings/formatter.h>
 #include <msp/strings/lexicalcast.h>
 #include <msp/strings/regex.h>
+#include "libmarklin/except.h"
 #include "libmarklin/tracktype.h"
 #include "engineer.h"
 #include "mainpanel.h"
@@ -99,7 +100,8 @@ Engineer::Engineer(int argc, char **argv):
 
 Engineer::~Engineer()
 {
-       trfc_mgr->save("engineer.state");
+       if(!simulate)
+               trfc_mgr->save("engineer.state");
        delete trfc_mgr;
 }
 
@@ -352,7 +354,15 @@ void Engineer::button_press(int x, int y, unsigned btn, unsigned)
                        if(unsigned tid=track->get_track().get_turnout_id())
                        {
                                Turnout &turnout=control.get_turnout(tid);
-                               turnout.set_route((turnout.get_route()+1)%track->get_track().get_type().get_n_routes());
+                               try
+                               {
+                                       turnout.set_route((turnout.get_route()+1)%track->get_track().get_type().get_n_routes());
+                                       main_panel->set_status_text(format("Turnout %d switched", turnout.get_address()));
+                               }
+                               catch(const TurnoutBusy &e)
+                               {
+                                       main_panel->set_status_text(e.what());
+                               }
                        }
                        else if(simulate)
                        {