]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/route.cpp
Do not require unique names for routes
[r2c2.git] / source / libmarklin / route.cpp
index cdbcf1dc4c8cc778f4183277dae9c6b65616f572..6cd58413d61ee562231b70e00c2ef44f3ec0e510 100644 (file)
@@ -119,17 +119,16 @@ list<const Track *> dijkstra(const Track &from, unsigned ep, const Pred &goal)
        return result;
 }
 
-unsigned count = 0;
-
 template<typename Pred>
 Route *create_route(const Track &from, unsigned ep, const Pred &goal)
 {
        list<const Track *> tracks = dijkstra(from, ep, goal);
 
-       Route *route = new Route(from.get_layout(), format("-%d-", ++count));
+       Route *route = new Route(from.get_layout());
        for(list<const Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
                route->add_track(**i);
 
+       route->set_name("Pathfinder");
        route->set_temporary(true);
 
        return route;
@@ -140,9 +139,8 @@ Route *create_route(const Track &from, unsigned ep, const Pred &goal)
 
 namespace Marklin {
 
-Route::Route(Layout &l, const string &n):
+Route::Route(Layout &l):
        layout(l),
-       name(n),
        temporary(false)
 {
        layout.add_route(*this);
@@ -154,6 +152,12 @@ Route::~Route()
        layout.remove_route(*this);
 }
 
+void Route::set_name(const string &n)
+{
+       name = n;
+       signal_name_changed.emit(name);
+}
+
 void Route::set_temporary(bool t)
 {
        temporary = t;
@@ -302,6 +306,7 @@ void Route::update_turnouts()
 
 void Route::save(list<DataFile::Statement> &st) const
 {
+       st.push_back((DataFile::Statement("name"), name));
        for(map<unsigned, int>::const_iterator i=turnouts.begin(); i!=turnouts.end(); ++i)
                st.push_back((DataFile::Statement("turnout"), i->first, i->second));
 }
@@ -377,6 +382,7 @@ Route *Route::find(const Track &from, unsigned ep, const Route &to)
 Route::Loader::Loader(Route &r):
        DataFile::BasicLoader<Route>(r)
 {
+       add("name",    &Route::name);
        add("turnout", &Loader::turnout);
 }