#include <set>
#include <stdexcept>
#include <sigc++/trackable.h>
+#include <msp/datafile/statement.h>
#include "trackiter.h"
namespace R2C2 {
class TrackChain: public sigc::trackable
{
public:
+ enum Direction
+ {
+ UNSPECIFIED,
+ UP,
+ DOWN
+ };
+
typedef std::set<Track *> TrackSet;
protected:
sigc::signal<void, Track &> signal_track_added;
sigc::signal<void, Track &> signal_track_removed;
+protected:
Layout &layout;
std::string name;
TrackSet tracks;
public:
const TrackSet &get_tracks() const { return tracks; }
bool has_track(Track &) const;
+ virtual TrackIter iter_for(Track &, Direction) const;
+ TrackIter get_end(unsigned) const;
+ bool is_loop() const;
private:
void object_removed(Object &);
+
+public:
+ virtual Msp::DataFile::Statement save_reference() const = 0;
};
+
+void operator<<(Msp::LexicalConverter &, TrackChain::Direction);
+void operator>>(const Msp::LexicalConverter &, TrackChain::Direction &);
+
} // namespace R2C2
#endif