]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/route.h
Create a base class to handle common operations in Block, Route and Zone
[r2c2.git] / source / libr2c2 / route.h
index 0dd16f44342c89b84650dcbc5de6865c0a9c2f04..9b440cb255bdb33bdf9f4981c1138be91ec466ca 100644 (file)
@@ -6,6 +6,7 @@
 #include <string>
 #include <sigc++/trackable.h>
 #include <msp/datafile/objectloader.h>
+#include "trackchain.h"
 
 namespace R2C2 {
 
@@ -15,27 +16,8 @@ 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;
@@ -55,10 +37,8 @@ public:
        sigc::signal<void, const std::string &> signal_name_changed;
 
 private:
-       Layout &layout;
        std::string name;
        bool temporary;
-       std::set<Track *> tracks;
        TurnoutMap turnouts;
 
 public:
@@ -74,17 +54,13 @@ 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(const TrackIter &, 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 object_removed(Object &);
+       virtual void on_track_added(Track &);
 
 public:
+       void save(std::list<Msp::DataFile::Statement> &) const;
+
        static Route *find(const TrackIter &, Track &);
        static Route *find(const TrackIter &, const Route &);
        static Route *find(const TrackIter &, const Zone &);