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;
37 sigc::signal<void, Track &> signal_track_added;
38 sigc::signal<void, Track &> signal_track_removed;
46 virtual ~TrackChain() { }
48 void add_track(Track &);
49 void add_tracks(const TrackSet &);
51 virtual void on_track_added(Track &) { }
52 virtual Validity check_validity(Track &) const;
53 static void throw_bad_chain(Validity);
55 void update_ends(Track &);
57 const TrackSet &get_tracks() const { return tracks; }
58 bool has_track(Track &) const;
61 void object_removed(Object &);