X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Froute.h;h=3825c7eb286b233ef9bb29f291db2b3633460484;hb=25c26706d400228110e14a4a9a9765cb1298372d;hp=bcb76e143635fa4b0180f24e698dfee292509bef;hpb=1ba0bd68483b900a702c7a38f41250b33770503d;p=r2c2.git diff --git a/source/libmarklin/route.h b/source/libmarklin/route.h index bcb76e1..3825c7e 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-2009 Mikkosoft Productions, Mikko Rasa +Copyright © 2007-2010 Mikkosoft Productions, Mikko Rasa Distributed under the GPL */ @@ -11,44 +11,65 @@ Distributed under the GPL #include #include #include +#include #include namespace Marklin { class Layout; class Track; -class Turnout; -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(Layout &, const std::string &); + 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(const Track &); void add_tracks(const std::set &); + void add_track_chain(const Track &, unsigned, const TurnoutMap &); const std::set &get_tracks() const { return tracks; } void save(std::list &) const; private: - void update_turnouts(); unsigned check_validity(const Track &) const; void track_removed(Track &); + +public: + static Route *find(const Track &, unsigned, const Track &); + static Route *find(const Track &, unsigned, const Route &); + static Route *find(const Track &, unsigned, const std::set &); }; } // namespace Marklin