]> git.tdb.fi Git - r2c2.git/commitdiff
Don't leave removed tracks in routes
authorMikko Rasa <tdb@tdb.fi>
Thu, 10 Dec 2009 08:03:10 +0000 (08:03 +0000)
committerMikko Rasa <tdb@tdb.fi>
Thu, 10 Dec 2009 08:03:10 +0000 (08:03 +0000)
source/designer/toolbar.cpp
source/libmarklin/layout.cpp
source/libmarklin/route.cpp
source/libmarklin/route.h

index 09c025a7f05dfe37ba209b5d430203d7a477990e..12c8388acd718270641aa799e2f368827c2c6e29 100644 (file)
@@ -63,7 +63,8 @@ void Toolbar::route_selected(unsigned index, const string &)
 {
        if(index==drp_routes->get_n_items()-1)
        {
-               Route *route = new Route(format("Route %d", designer.get_layout()->get_routes().size()+1));
+               Layout &layout = *designer.get_layout();
+               Route *route = new Route(layout, format("Route %d", layout.get_routes().size()+1));
                designer.get_layout()->add_route(*route);
                designer.edit_route(*route);
 
index 234b923411298cc755fde1c60a318f10eef88806..9ec0d0aff852982cca868bd5399343bae3660a51 100644 (file)
@@ -176,7 +176,7 @@ void Layout::Loader::finish()
 
 void Layout::Loader::route(const string &n)
 {
-       RefPtr<Route> rte = new Route(n);
+       RefPtr<Route> rte = new Route(obj, n);
        load_sub(*rte);
        obj.add_route(*rte.release());
 }
index fa2286cc65aef625848101bc7b7c77c9d020d055..364509c8714d4b1aa94fc1340e3f4cbf993181ea 100644 (file)
@@ -5,18 +5,21 @@ Copyright © 2007-2009  Mikkosoft Productions, Mikko Rasa
 Distributed under the GPL
 */
 
+#include "layout.h"
+#include "route.h"
 #include "track.h"
 #include "tracktype.h"
-#include "route.h"
 
 using namespace std;
 using namespace Msp;
 
 namespace Marklin {
 
-Route::Route(const string &n):
+Route::Route(Layout &layout, const string &n):
        name(n)
-{ }
+{
+       layout.signal_track_removed.connect(sigc::mem_fun(this, &Route::track_removed));
+}
 
 int Route::get_turnout(unsigned id) const
 {
@@ -171,6 +174,11 @@ unsigned Route::check_validity(const Track &trk) const
        return result;
 }
 
+void Route::track_removed(Track &t)
+{
+       tracks.erase(&t);
+}
+
 
 Route::Loader::Loader(Route &r):
        DataFile::BasicLoader<Route>(r)
index 6e69bba955aa3c24b8705e7370b5d230d04bd186..bcb76e143635fa4b0180f24e698dfee292509bef 100644 (file)
@@ -15,6 +15,7 @@ Distributed under the GPL
 
 namespace Marklin {
 
+class Layout;
 class Track;
 class Turnout;
 
@@ -35,7 +36,7 @@ private:
        std::map<unsigned, int> turnouts;
 
 public:
-       Route(const std::string &);
+       Route(Layout &, const std::string &);
 
        const std::string &get_name() const { return name; }
        int get_turnout(unsigned) const;
@@ -47,6 +48,7 @@ public:
 private:
        void update_turnouts();
        unsigned check_validity(const Track &) const;
+       void track_removed(Track &);
 };
 
 } // namespace Marklin