]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/departures.h
Add a dialog and necessary support code to display departures
[r2c2.git] / source / libr2c2 / departures.h
1 #ifndef LIBR2C2_DEPARTURES_H_
2 #define LIBR2C2_DEPARTURES_H_
3
4 #include <list>
5 #include <string>
6 #include <vector>
7 #include <sigc++/signal.h>
8 #include <msp/time/timedelta.h>
9
10 namespace R2C2 {
11
12 class Layout;
13 class Zone;
14 class Route;
15 class TrackChain;
16 class Train;
17
18 class Departures: public sigc::trackable
19 {
20 public:
21         struct Departure
22         {
23                 Zone *zone;
24                 Train *train;
25                 Msp::Time::TimeDelta time;
26
27                 Departure(Zone &, Train &, const Msp::Time::TimeDelta &);
28         };
29
30         sigc::signal<void, const Departure &> signal_departure_added;
31         sigc::signal<void, const Departure &> signal_departure_removed;
32
33 private:
34         std::vector<Zone *> zones;
35         std::list<Departure> departures;
36
37 public:
38         Departures(const Layout &, const std::string &);
39
40         const std::list<Departure> &get_departures() const { return departures; }
41
42 private:
43         void train_route_changed(const Route *, Train &);
44         void train_departed(Train &);
45         void update_departures(Train &);
46         void merge_departures(Train &, const std::list<Departure> &);
47         Zone *get_attached_zone(const TrackChain &) const;
48 };
49
50 } // namespace R2C2
51
52 #endif