1 #ifndef LIBR2C2_TRACKCHAIN_H_
2 #define LIBR2C2_TRACKCHAIN_H_
6 #include <sigc++/trackable.h>
14 class bad_chain: public std::logic_error
17 bad_chain(const std::string &w): std::logic_error(w) { }
18 virtual ~bad_chain() throw() { }
22 class TrackChain: public sigc::trackable
25 typedef std::set<Track *> TrackSet;
42 virtual ~TrackChain() { }
44 void add_track(Track &);
45 void add_tracks(const TrackSet &);
47 virtual void on_track_added(Track &) { }
48 virtual Validity check_validity(Track &) const;
49 static void throw_bad_chain(Validity);
51 void update_ends(Track &);
53 const TrackSet &get_tracks() const { return tracks; }
54 bool has_track(Track &) const;
57 void object_removed(Object &);