X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Froute.h;h=0b036371e2cf29bb922249015e8dad9f6f265440;hb=9b05c573a38639827697fe393d55b7c76f5bde45;hp=a8e220d5de1c91997eda62fb4680d974bf73affa;hpb=449fb5de95ddb2ac9da4bd72a1c12150505d5549;p=r2c2.git diff --git a/source/libmarklin/route.h b/source/libmarklin/route.h index a8e220d..0b03637 100644 --- a/source/libmarklin/route.h +++ b/source/libmarklin/route.h @@ -1,7 +1,7 @@ /* $Id$ This file is part of the MSP Märklin suite -Copyright © 2007-2008 Mikkosoft Productions, Mikko Rasa +Copyright © 2007-2010 Mikkosoft Productions, Mikko Rasa Distributed under the GPL */ @@ -11,25 +11,68 @@ Distributed under the GPL #include #include #include +#include +#include namespace Marklin { +class Layout; class Track; -class Turnout; +class TrackIter; -class Route +class Route: public sigc::trackable { +public: + 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; + private: + Layout &layout; std::string name; + bool temporary; std::set tracks; - std::map turnouts; + TurnoutMap turnouts; public: - Route(); + Route(Layout &); ~Route(); - const std::map &get_turnouts() const { return turnouts; } - void add_track(Track *); + 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; + unsigned get_path(Track &) 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(const TrackIter &, Track &); + static Route *find(const TrackIter &, const Route &); + static Route *find(const TrackIter &, const std::set &); }; } // namespace Marklin