X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Flayout.h;h=608ddece1eed1c2398fc36b101d2b0d6fb0c5063;hb=651698847d5293cfb15b6fb23a394701388c0151;hp=86836b87f16e01fe7cbcba495fd08ab514ae553d;hpb=dcfa1e9503b7e97b61396d7458f0b2e5896779cd;p=r2c2.git diff --git a/source/libmarklin/layout.h b/source/libmarklin/layout.h index 86836b8..608ddec 100644 --- a/source/libmarklin/layout.h +++ b/source/libmarklin/layout.h @@ -1,33 +1,42 @@ /* $Id$ This file is part of the MSP Märklin suite -Copyright © 2006-2009 Mikkosoft Productions, Mikko Rasa +Copyright © 2006-2010 Mikkosoft Productions, Mikko Rasa Distributed under the GPL */ #ifndef LIBMARKLIN_LAYOUT_H_ #define LIBMARKLIN_LAYOUT_H_ +#include #include #include -#include "route.h" -#include "track.h" +#include namespace Marklin { +class Block; class Catalogue; +class Driver; +class Route; +class Track; +class Train; class Layout { public: class Loader: public Msp::DataFile::BasicLoader { + private: + bool new_tracks; + public: Loader(Layout &); private: virtual void finish(); void route(const std::string &); void track(unsigned); + void train(unsigned, unsigned); }; public: @@ -35,27 +44,55 @@ public: sigc::signal signal_track_removed; sigc::signal signal_route_added; sigc::signal signal_route_removed; + sigc::signal signal_train_added; + sigc::signal signal_train_removed; + sigc::signal signal_block_reserved; private: Catalogue &catalogue; + Driver *driver; std::string base; std::set tracks; std::map routes; + std::set blocks; + std::map trains; + Msp::Time::TimeStamp last_tick; public: - Layout(Catalogue &); + Layout(Catalogue &, Driver * = 0); ~Layout(); Catalogue &get_catalogue() const { return catalogue; } + bool has_driver() const { return driver; } + Driver &get_driver() const; const std::string &get_base() const { return base; } - const std::set &get_tracks() const { return tracks; } + void add_track(Track &); + const std::set &get_tracks() const { return tracks; } void remove_track(Track &); + + void add_block(Block &); + Block &get_block(unsigned) const; + Block &get_block_by_track(const Track &) const; + const std::set &get_blocks() const { return blocks; } + void create_blocks(); + void create_blocks(const Track &); + void remove_block(Block &); + void add_route(Route &); const std::map &get_routes() const { return routes; } Route &get_route(const std::string &) const; void remove_route(Route &); + + void add_train(Train &); + Train &get_train(unsigned) const; + const std::map &get_trains() const { return trains; } + void remove_train(Train &); + + void tick(); + void save(const std::string &); + void save_trains(const std::string &); private: void check_links(); void check_routes();