/* $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
*/
#include <list>
#include <set>
+#include <sigc++/trackable.h>
#include <msp/datafile/loader.h>
#include "geometry.h"
namespace Marklin {
+class Block;
+class Layout;
class TrackType;
-class Track
+class Track: public sigc::trackable
{
public:
class Loader: public Msp::DataFile::BasicLoader<Track>
Loader(Track &);
private:
void position(float, float, float);
+ void sensor_id(unsigned);
+ void turnout_id(unsigned);
};
+ sigc::signal<void, unsigned> signal_path_changed;
+
private:
+ Layout &layout;
const TrackType &type;
+ Block *block;
Point pos;
float rot;
float slope;
unsigned turnout_id;
unsigned sensor_id;
std::vector<Track *> links;
+ unsigned active_path;
- // Direct copying not allowed due to links. See the copy() function.
Track(const Track &);
Track &operator=(const Track &);
public:
- Track(const TrackType &);
+ Track(Layout &, const TrackType &);
~Track();
+ Layout &get_layout() const { return layout; }
const TrackType &get_type() const { return type; }
+ void set_block(Block *);
+ Block &get_block() const;
void set_position(const Point &);
void set_rotation(float);
void set_slope(float);
void set_sensor_id(unsigned);
unsigned get_turnout_id() const { return turnout_id; }
unsigned get_sensor_id() const { return sensor_id; }
+ void set_active_path(unsigned);
+ unsigned get_active_path() const { return active_path; }
- int get_endpoint_by_link(const Track &) const;
+ int get_endpoint_by_link(Track &) const;
Point get_endpoint_position(unsigned) const;
float get_endpoint_direction(unsigned) const;
- bool snap_to(Track &, bool);
+ bool snap_to(Track &, bool, float = 0);
bool snap(Point &, float &) const;
void break_link(Track &);
void break_links();
const std::vector<Track *> &get_links() const { return links; }
Track *get_link(unsigned) const;
- int traverse(unsigned, unsigned) const;
- Point get_point(unsigned, unsigned, float) const;
-
- /**
- Creates a copy of the track. The new track will be almost identical, but
- won't have any links to other tracks, nor a turnout or sensor id.
- */
- Track *copy() const;
+ TrackPoint get_point(unsigned, unsigned, float) const;
+ TrackPoint get_point(unsigned, float) const;
void save(std::list<Msp::DataFile::Statement> &) const;
+private:
+ void turnout_event(unsigned, bool);
};
} // namespace Marklin