]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/route.h
Strip Id tags and copyright notices from files
[r2c2.git] / source / libr2c2 / route.h
1 #ifndef LIBR2C2_ROUTE_H_
2 #define LIBR2C2_ROUTE_H_
3
4 #include <map>
5 #include <set>
6 #include <string>
7 #include <sigc++/trackable.h>
8 #include <msp/datafile/loader.h>
9
10 namespace R2C2 {
11
12 class Layout;
13 class Track;
14 class TrackIter;
15 class Zone;
16
17 class Route: public sigc::trackable
18 {
19 public:
20         typedef std::map<unsigned, int> TurnoutMap;
21
22         class Loader: public Msp::DataFile::BasicLoader<Route>
23         {
24         private:
25                 TurnoutMap turnouts;
26
27         public:
28                 Loader(Route &);
29         private:
30                 virtual void finish();
31                 void turnout(unsigned, unsigned);
32         };
33
34         sigc::signal<void, const std::string &> signal_name_changed;
35
36 private:
37         Layout &layout;
38         std::string name;
39         bool temporary;
40         std::set<Track *> tracks;
41         TurnoutMap turnouts;
42
43 public:
44         Route(Layout &);
45         ~Route();
46
47         void set_name(const std::string &);
48         const std::string &get_name() const { return name; }
49         void set_temporary(bool);
50         bool is_temporary() const { return temporary; }
51         void set_turnout(unsigned, unsigned);
52         void update_turnouts();
53         int get_turnout(unsigned) const;
54         unsigned get_path(Track &) const;
55         const std::map<unsigned, int> &get_turnouts() const { return turnouts; }
56         void add_track(Track &);
57         void add_tracks(const std::set<Track *> &);
58         void add_track_chain(Track &, unsigned, const TurnoutMap &);
59         const std::set<Track *> &get_tracks() const { return tracks; }
60         bool has_track(Track &) const;
61         void save(std::list<Msp::DataFile::Statement> &) const;
62 private:
63         unsigned check_validity(Track &) const;
64         void track_removed(Track &);
65
66 public:
67         static Route *find(const TrackIter &, Track &);
68         static Route *find(const TrackIter &, const Route &);
69         static Route *find(const TrackIter &, const Zone &);
70         static Route *find(const TrackIter &, const std::set<Track *> &);
71 };
72
73 } // namespace R2C2
74
75 #endif