X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrackchain.h;h=74d194884e48eac531991f3f552bd95302abd612;hb=8c7fc0b79ce88e0295e0e6ea52cb7eb753158d8a;hp=e73e23bd11309711b909a98803410c05d8bf399e;hpb=73edcbd8841752a2722fc8b3927fee2abbbba750;p=r2c2.git diff --git a/source/libr2c2/trackchain.h b/source/libr2c2/trackchain.h index e73e23b..74d1948 100644 --- a/source/libr2c2/trackchain.h +++ b/source/libr2c2/trackchain.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "trackiter.h" namespace R2C2 { @@ -22,6 +23,13 @@ public: class TrackChain: public sigc::trackable { public: + enum Direction + { + UNSPECIFIED, + UP, + DOWN + }; + typedef std::set TrackSet; protected: @@ -33,7 +41,14 @@ protected: INCOMPATIBLE }; +public: + sigc::signal signal_name_changed; + sigc::signal signal_track_added; + sigc::signal signal_track_removed; + +protected: Layout &layout; + std::string name; TrackSet tracks; TrackIter ends[2]; @@ -41,6 +56,9 @@ protected: public: virtual ~TrackChain() { } + virtual void set_name(const std::string &); + const std::string &get_name() const { return name; } + void add_track(Track &); void add_tracks(const TrackSet &); protected: @@ -52,11 +70,22 @@ private: 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; + virtual TrackIter get_end(Direction) const { return get_end(0); } + 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