]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/route.h
Terminate the control thread if ArduControl device is not found
[r2c2.git] / source / libr2c2 / route.h
index e5164ce06a283f854d5ce2f7e1881bbac159610f..3bd4a445e5ecc6ffcddd096b828cdfa42f700d0d 100644 (file)
@@ -6,35 +6,18 @@
 #include <string>
 #include <sigc++/trackable.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;
@@ -54,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:
@@ -68,22 +49,20 @@ public:
        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(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 track_removed(Track &);
+       void add_turnout(Track &, unsigned);
+       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 &);