diff options
author | Carl Hetherington <carl@carlh.net> | 2009-06-21 19:59:56 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2009-06-21 19:59:56 +0000 |
commit | 955d731fa6933e6769986687a781d16f7889da67 (patch) | |
tree | 84a383627ac0a9548f5b789b17740915846e5dcf /libs/ardour/ardour/route_group.h | |
parent | 8cd536ab85b5923fe97d32cb93c913420fbaf5bf (diff) |
Merge edit and mix groups to just being route groups. Add properties to route groups to decide what things their member routes will share. Allow edits to happen across a route group without its tracks necessarily being selected.
git-svn-id: svn://localhost/ardour2/branches/3.0@5236 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour/route_group.h')
-rw-r--r-- | libs/ardour/ardour/route_group.h | 183 |
1 files changed, 104 insertions, 79 deletions
diff --git a/libs/ardour/ardour/route_group.h b/libs/ardour/ardour/route_group.h index fa69446528..f4ed001453 100644 --- a/libs/ardour/ardour/route_group.h +++ b/libs/ardour/ardour/route_group.h @@ -36,86 +36,111 @@ class AudioTrack; class Session; class RouteGroup : public PBD::Stateful, public sigc::trackable { - public: - enum Flag { - Relative = 0x1, - Active = 0x2, - Hidden = 0x4 - }; - - RouteGroup (Session& s, const std::string &n, Flag f = Flag(0)); - - const std::string& name() { return _name; } - void set_name (std::string str); - - bool is_active () const { return _flags & Active; } - bool is_relative () const { return _flags & Relative; } - bool is_hidden () const { return _flags & Hidden; } - bool empty() const {return routes.empty();} - - gain_t get_max_factor(gain_t factor); - gain_t get_min_factor(gain_t factor); - - int size() { return routes.size();} - ARDOUR::Route * first () const { return *routes.begin();} - - void set_active (bool yn, void *src); - void set_relative (bool yn, void *src); - void set_hidden (bool yn, void *src); - - int add (Route *); - - int remove (Route *); - - void apply (void (Route::*func)(void *), void *src) { - for (std::list<Route *>::iterator i = routes.begin(); i != routes.end(); i++) { - ((*i)->*func)(src); - } - } - - template<class T> void apply (void (Route::*func)(T, void *), T val, void *src) { - for (std::list<Route *>::iterator i = routes.begin(); i != routes.end(); i++) { - ((*i)->*func)(val, src); - } - } - - template<class T> void foreach_route (T *obj, void (T::*func)(Route&)) { - for (std::list<Route *>::iterator i = routes.begin(); i != routes.end(); i++) { - (obj->*func)(**i); - } - } - - /* to use these, #include "ardour/route_group_specialized.h" */ - - template<class T> void apply (void (Track::*func)(T, void *), T val, void *src); - - /* fills at_set with all members of the group that are AudioTracks */ - - void audio_track_group (std::set<AudioTrack*>& at_set); - - void clear () { - routes.clear (); - changed(); - } - - const std::list<Route*>& route_list() { return routes; } - - sigc::signal<void> changed; - sigc::signal<void,void*> FlagsChanged; - - XMLNode& get_state (void); - - int set_state (const XMLNode&); - - private: - Session& _session; - std::list<Route *> routes; - std::string _name; - Flag _flags; - - void remove_when_going_away (Route*); +public: + enum Flag { + Relative = 0x1, + Active = 0x2, + Hidden = 0x4 + }; + + enum Property { + Gain = 0x1, + Mute = 0x2, + Solo = 0x4, + RecEnable = 0x8, + Select = 0x10, + Edit = 0x20 + }; + + RouteGroup (Session& s, const std::string &n, Flag f = Flag(0)); + + const std::string& name() { return _name; } + void set_name (std::string str); + + bool is_active () const { return _flags & Active; } + bool is_relative () const { return _flags & Relative; } + bool is_hidden () const { return _flags & Hidden; } + bool empty() const {return routes.empty();} + + gain_t get_max_factor(gain_t factor); + gain_t get_min_factor(gain_t factor); + + int size() { return routes.size();} + ARDOUR::Route * first () const { return *routes.begin();} + + void set_active (bool yn, void *src); + void set_relative (bool yn, void *src); + void set_hidden (bool yn, void *src); + + bool property (Property p) const { + return ((_properties & p) != 0); + } + + bool active_property (Property p) const { + return is_active() && property (p); + } + + void set_property (Property p, bool v) { + _properties = (Property) (_properties & ~p); + if (v) { + _properties = (Property) (_properties | p); + } + } + + int add (Route *); + + int remove (Route *); + + void apply (void (Route::*func)(void *), void *src) { + for (std::list<Route *>::iterator i = routes.begin(); i != routes.end(); i++) { + ((*i)->*func)(src); + } + } + + template<class T> void apply (void (Route::*func)(T, void *), T val, void *src) { + for (std::list<Route *>::iterator i = routes.begin(); i != routes.end(); i++) { + ((*i)->*func)(val, src); + } + } + + template<class T> void foreach_route (T *obj, void (T::*func)(Route&)) { + for (std::list<Route *>::iterator i = routes.begin(); i != routes.end(); i++) { + (obj->*func)(**i); + } + } + + /* to use these, #include "ardour/route_group_specialized.h" */ + + template<class T> void apply (void (Track::*func)(T, void *), T val, void *src); + + /* fills at_set with all members of the group that are AudioTracks */ + + void audio_track_group (std::set<AudioTrack*>& at_set); + + void clear () { + routes.clear (); + changed(); + } + + const std::list<Route*>& route_list() { return routes; } + + sigc::signal<void> changed; + sigc::signal<void,void*> FlagsChanged; + + XMLNode& get_state (); + + int set_state (const XMLNode&); + +private: + Session& _session; + std::list<Route *> routes; + std::string _name; + Flag _flags; + Property _properties; + + void remove_when_going_away (Route*); }; - + } /* namespace */ #endif /* __ardour_route_group_h__ */ |