]> 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 5ea86be167781d3f4ca4b400b5f20bb3207c5a3c..2133b766532c8c5287ebe6c3b57a89e7b33b0d52 100644 (file)
@@ -5,41 +5,24 @@
 #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;
 
-enum RouteValidityMask
-{
-       ROUTE_INVALID = 0,
-       ROUTE_LINKED = 1,
-       ROUTE_LINEAR = 2,
-       ROUTE_SMOOTH = 4,
-       ROUTE_VALID = 7
-};
 
-class bad_route: public std::logic_error
-{
-public:
-       bad_route(RouteValidityMask m): std::logic_error(get_message(m)) { }
-       virtual ~bad_route() throw() { }
-
-private:
-       static std::string get_message(RouteValidityMask);
-};
-
-
-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;
@@ -48,42 +31,35 @@ 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:
-       RouteValidityMask 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 &);