]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/track.cpp
Don't continue reserving until the turnout is done changing its path
[r2c2.git] / source / libr2c2 / track.cpp
index c2b190f0551410b149a408e450ee16041151295c..71c570cee86ccd251d6269c080b1c619bac18054 100644 (file)
@@ -26,7 +26,7 @@ Track::Track(Layout &l, const TrackType &t):
        if(type.is_turnout())
                turnout_id = layout.allocate_turnout_id();
 
-       layout.add_track(*this);
+       layout.add(*this);
 
        if(layout.has_driver())
                layout.get_driver().signal_turnout.connect(sigc::mem_fun(this, &Track::turnout_event));
@@ -37,7 +37,7 @@ Track::Track(Layout &l, const TrackType &t):
 Track::~Track()
 {
        break_links();
-       layout.remove_track(*this);
+       layout.remove(*this);
 }
 
 Track *Track::clone(Layout *to_layout) const
@@ -123,6 +123,8 @@ void Track::set_turnout_id(unsigned i)
 {
        if(!type.is_turnout())
                throw logic_error("not a turnout");
+       if(!i)
+               throw invalid_argument("Track::set_turnout_id");
 
        turnout_id = i;
        layout.create_blocks(*this);
@@ -149,6 +151,7 @@ void Track::set_active_path(unsigned p)
        if(!(type.get_paths()&(1<<p)))
                throw invalid_argument("Track::set_active_path");
 
+       signal_path_changing(p);
        path_changing = true;
        layout.get_driver().set_turnout(turnout_id, p);
 }