X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Froute.h;h=75241d8b604bea37c278e30f45e9894f2f867476;hb=2029c5e4220e0809a39744a28ca9e2ff22e8ad28;hp=f5b760265b5b30159fe44e2103ffe7691af81850;hpb=6c61179fe09af2f5366d50f10aadbf5f83438087;p=r2c2.git diff --git a/source/libmarklin/route.h b/source/libmarklin/route.h index f5b7602..75241d8 100644 --- a/source/libmarklin/route.h +++ b/source/libmarklin/route.h @@ -1,27 +1,77 @@ +/* $Id$ + +This file is part of the MSP Märklin suite +Copyright © 2007-2010 Mikkosoft Productions, Mikko Rasa +Distributed under the GPL +*/ + #ifndef LIBMARKLIN_ROUTE_H_ #define LIBMARKLIN_ROUTE_H_ -#include +#include +#include #include -#include "track.h" +#include +#include namespace Marklin { -class Route +class Layout; +class Track; + +class Route: public sigc::trackable { public: - typedef std::map TurnoutMap; + typedef std::map TurnoutMap; + + class Loader: public Msp::DataFile::BasicLoader + { + private: + TurnoutMap turnouts; + + public: + Loader(Route &); + private: + virtual void finish(); + void turnout(unsigned, unsigned); + }; + + sigc::signal signal_name_changed; - Route(); - const TurnoutMap &get_turnouts() const { return turnouts; } - void add_track(Track *); - ~Route(); private: + Layout &layout; std::string name; - TrackSeq tracks; - TurnoutMap turnouts; + bool temporary; + std::set tracks; + TurnoutMap turnouts; + +public: + Route(Layout &); + ~Route(); + + void set_name(const std::string &); + 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(); + int get_turnout(unsigned) const; + const std::map &get_turnouts() const { return turnouts; } + void add_track(Track &); + void add_tracks(const std::set &); + void add_track_chain(Track &, unsigned, const TurnoutMap &); + const std::set &get_tracks() const { return tracks; } + bool has_track(Track &) const; + void save(std::list &) const; +private: + unsigned check_validity(Track &) const; + void track_removed(Track &); + +public: + static Route *find(Track &, unsigned, Track &); + static Route *find(Track &, unsigned, const Route &); + static Route *find(Track &, unsigned, const std::set &); }; -typedef std::list RouteSeq; } // namespace Marklin