summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/route_group.h
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-06-21 19:59:56 +0000
committerCarl Hetherington <carl@carlh.net>2009-06-21 19:59:56 +0000
commit955d731fa6933e6769986687a781d16f7889da67 (patch)
tree84a383627ac0a9548f5b789b17740915846e5dcf /libs/ardour/ardour/route_group.h
parent8cd536ab85b5923fe97d32cb93c913420fbaf5bf (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.h183
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__ */