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, const std::string &> signal_name_changed;
38 sigc::signal<void, Track &> signal_track_added;
39 sigc::signal<void, Track &> signal_track_removed;
48 virtual ~TrackChain() { }
50 virtual void set_name(const std::string &);
51 const std::string &get_name() const { return name; }
53 void add_track(Track &);
54 void add_tracks(const TrackSet &);
56 virtual void on_track_added(Track &) { }
57 virtual Validity check_validity(Track &) const;
58 static void throw_bad_chain(Validity);
60 void update_ends(Track &);
62 const TrackSet &get_tracks() const { return tracks; }
63 bool has_track(Track &) const;
66 void object_removed(Object &);