]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/departures.h
Add a dialog and necessary support code to display departures
[r2c2.git] / source / libr2c2 / departures.h
diff --git a/source/libr2c2/departures.h b/source/libr2c2/departures.h
new file mode 100644 (file)
index 0000000..b513975
--- /dev/null
@@ -0,0 +1,52 @@
+#ifndef LIBR2C2_DEPARTURES_H_
+#define LIBR2C2_DEPARTURES_H_
+
+#include <list>
+#include <string>
+#include <vector>
+#include <sigc++/signal.h>
+#include <msp/time/timedelta.h>
+
+namespace R2C2 {
+
+class Layout;
+class Zone;
+class Route;
+class TrackChain;
+class Train;
+
+class Departures: public sigc::trackable
+{
+public:
+       struct Departure
+       {
+               Zone *zone;
+               Train *train;
+               Msp::Time::TimeDelta time;
+
+               Departure(Zone &, Train &, const Msp::Time::TimeDelta &);
+       };
+
+       sigc::signal<void, const Departure &> signal_departure_added;
+       sigc::signal<void, const Departure &> signal_departure_removed;
+
+private:
+       std::vector<Zone *> zones;
+       std::list<Departure> departures;
+
+public:
+       Departures(const Layout &, const std::string &);
+
+       const std::list<Departure> &get_departures() const { return departures; }
+
+private:
+       void train_route_changed(const Route *, Train &);
+       void train_departed(Train &);
+       void update_departures(Train &);
+       void merge_departures(Train &, const std::list<Departure> &);
+       Zone *get_attached_zone(const TrackChain &) const;
+};
+
+} // namespace R2C2
+
+#endif