#include <set>
#include <string>
#include <sigc++/trackable.h>
-#include <msp/datafile/loader.h>
+#include <msp/datafile/objectloader.h>
+#include "trackchain.h"
namespace R2C2 {
class Layout;
+class Object;
class Track;
class TrackIter;
class Zone;
-class Route: public sigc::trackable
+
+class Route: public TrackChain
{
public:
typedef std::map<unsigned, int> TurnoutMap;
- class Loader: public Msp::DataFile::BasicLoader<Route>
+ class Loader: public Msp::DataFile::ObjectLoader<Route>
{
private:
TurnoutMap turnouts;
Loader(Route &);
private:
virtual void finish();
+ void name(const std::string &);
void turnout(unsigned, unsigned);
};
- sigc::signal<void, const std::string &> signal_name_changed;
-
private:
- Layout &layout;
- std::string name;
bool temporary;
- std::set<Track *> 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();
+private:
+ void update_turnout(Track &);
+public:
int get_turnout(unsigned) const;
unsigned get_path(Track &) const;
const std::map<unsigned, int> &get_turnouts() const { return turnouts; }
- void add_track(Track &);
- void add_tracks(const std::set<Track *> &);
- void add_track_chain(Track &, unsigned, const TurnoutMap &);
- const std::set<Track *> &get_tracks() const { return tracks; }
- bool has_track(Track &) const;
- void save(std::list<Msp::DataFile::Statement> &) const;
private:
- unsigned check_validity(Track &) const;
- void track_removed(Track &);
+ void add_turnout(Track &, unsigned);
+ virtual void on_track_added(Track &);
public:
+ void save(std::list<Msp::DataFile::Statement> &) const;
+ virtual Msp::DataFile::Statement save_reference() const;
+
static Route *find(const TrackIter &, Track &);
static Route *find(const TrackIter &, const Route &);
static Route *find(const TrackIter &, const Zone &);