]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/route.h
Also use TrackChains as target locations in Timetable
[r2c2.git] / source / libr2c2 / route.h
index 86a0f61780e1423ec68a1644f160f77bb9e55bb2..2133b766532c8c5287ebe6c3b57a89e7b33b0d52 100644 (file)
@@ -1,10 +1,3 @@
-/* $Id$
-
-This file is part of R²C²
-Copyright © 2007-2010  Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
 #ifndef LIBR2C2_ROUTE_H_
 #define LIBR2C2_ROUTE_H_
 
@@ -12,20 +5,24 @@ Distributed under the GPL
 #include <set>
 #include <string>
 #include <sigc++/trackable.h>
-#include <msp/datafile/loader.h>
+#include <msp/datafile/objectloader.h>
+#include "trackchain.h"
 
 namespace R2C2 {
 
 class Layout;
+class Object;
 class Track;
 class TrackIter;
+class Zone;
+
 
-class Route: public sigc::trackable
+class Route: public TrackChain
 {
 public:
        typedef std::map<unsigned, int> TurnoutMap;
 
-       class Loader: public Msp::DataFile::BasicLoader<Route>
+       class Loader: public Msp::DataFile::ObjectLoader<Route>
        {
        private:
                TurnoutMap turnouts;
@@ -34,44 +31,38 @@ public:
                Loader(Route &);
        private:
                virtual void finish();
+               void name(const std::string &);
                void turnout(unsigned, unsigned);
        };
 
-       sigc::signal<void, const std::string &> signal_name_changed;
-
 private:
-       Layout &layout;
-       std::string name;
        bool temporary;
-       std::set<Track *> tracks;
        TurnoutMap turnouts;
 
 public:
        Route(Layout &);
        ~Route();
 
-       void set_name(const std::string &);
-       const std::string &get_name() const { return name; }
        void set_temporary(bool);
        bool is_temporary() const { return temporary; }
-       void set_turnout(unsigned, unsigned);
        void update_turnouts();
+private:
+       void update_turnout(Track &);
+public:
        int get_turnout(unsigned) const;
        unsigned get_path(Track &) const;
        const std::map<unsigned, int> &get_turnouts() const { return turnouts; }
-       void add_track(Track &);
-       void add_tracks(const std::set<Track *> &);
-       void add_track_chain(Track &, unsigned, const TurnoutMap &);
-       const std::set<Track *> &get_tracks() const { return tracks; }
-       bool has_track(Track &) const;
-       void save(std::list<Msp::DataFile::Statement> &) const;
 private:
-       unsigned check_validity(Track &) const;
-       void track_removed(Track &);
+       void add_turnout(Track &, unsigned);
+       virtual void on_track_added(Track &);
 
 public:
+       void save(std::list<Msp::DataFile::Statement> &) const;
+       virtual Msp::DataFile::Statement save_reference() const;
+
        static Route *find(const TrackIter &, Track &);
        static Route *find(const TrackIter &, const Route &);
+       static Route *find(const TrackIter &, const Zone &);
        static Route *find(const TrackIter &, const std::set<Track *> &);
 };