X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Fardour%2Froute_group.h;h=e24f7c01b21097822f010e87e720d00dc7179d23;hb=HEAD;hp=1f12c57f8d37f52d97d9d238be2caa80817b894f;hpb=54ce76e8fd7d6c4840cbdfabd6034bae008f520e;p=ardour.git diff --git a/libs/ardour/ardour/route_group.h b/libs/ardour/ardour/route_group.h index 1f12c57f8d..e24f7c01b2 100644 --- a/libs/ardour/ardour/route_group.h +++ b/libs/ardour/ardour/route_group.h @@ -25,28 +25,32 @@ #include #include +#include "pbd/controllable.h" #include "pbd/signals.h" #include "pbd/stateful.h" -#include "pbd/signals.h" +#include "ardour/control_group.h" #include "ardour/types.h" #include "ardour/session_object.h" +#include "ardour/libardour_visibility.h" + namespace ARDOUR { namespace Properties { - extern PBD::PropertyDescriptor relative; - extern PBD::PropertyDescriptor active; - extern PBD::PropertyDescriptor gain; - extern PBD::PropertyDescriptor mute; - extern PBD::PropertyDescriptor solo; - extern PBD::PropertyDescriptor recenable; - extern PBD::PropertyDescriptor select; - extern PBD::PropertyDescriptor route_active; - extern PBD::PropertyDescriptor color; - extern PBD::PropertyDescriptor monitoring; - /* we use this, but its declared in region.cc */ - extern PBD::PropertyDescriptor hidden; + LIBARDOUR_API extern PBD::PropertyDescriptor group_relative; + LIBARDOUR_API extern PBD::PropertyDescriptor group_gain; + LIBARDOUR_API extern PBD::PropertyDescriptor group_mute; + LIBARDOUR_API extern PBD::PropertyDescriptor group_solo; + LIBARDOUR_API extern PBD::PropertyDescriptor group_recenable; + LIBARDOUR_API extern PBD::PropertyDescriptor group_select; + LIBARDOUR_API extern PBD::PropertyDescriptor group_route_active; + LIBARDOUR_API extern PBD::PropertyDescriptor group_color; + LIBARDOUR_API extern PBD::PropertyDescriptor group_monitoring; + LIBARDOUR_API extern PBD::PropertyDescriptor active; + LIBARDOUR_API extern PBD::PropertyDescriptor group_master_number; + /* we use these declared in region.cc */ + LIBARDOUR_API extern PBD::PropertyDescriptor hidden; }; class Route; @@ -54,9 +58,16 @@ class Track; class AudioTrack; class Session; -class RouteGroup : public SessionObject +/** A group identifier for routes. + * + * RouteGroups permit to define properties which are shared + * among all Routes that use the given identifier. + * + * A route can at most be in one group. + */ +class LIBARDOUR_API RouteGroup : public SessionObject { - public: +public: static void make_property_quarks(); RouteGroup (Session& s, const std::string &n); @@ -73,6 +84,8 @@ class RouteGroup : public SessionObject bool is_route_active () const { return _route_active.val(); } bool is_color () const { return _color.val(); } bool is_monitoring() const { return _monitoring.val(); } + int32_t group_master_number() const { return _group_master_number.val(); } + boost::weak_ptr subgroup_bus() const { return _subgroup_bus; } bool empty() const {return routes->empty();} size_t size() const { return routes->size();} @@ -107,7 +120,7 @@ class RouteGroup : public SessionObject /* to use these, #include "ardour/route_group_specialized.h" */ - template void apply (void (Track::*func)(T, void *), T val, void *src); + template void apply (void (Track::*func)(T, PBD::Controllable::GroupControlDisposition), T val, PBD::Controllable::GroupControlDisposition); /* fills at_set with all members of the group that are AudioTracks */ @@ -118,6 +131,7 @@ class RouteGroup : public SessionObject changed(); } + bool has_subgroup() const; void make_subgroup (bool, Placement); void destroy_subgroup (); @@ -132,9 +146,24 @@ class RouteGroup : public SessionObject int set_state (const XMLNode&, int version); + void assign_master (boost::shared_ptr); + void unassign_master (boost::shared_ptr); + bool has_control_master() const; + bool slaved () const; + + uint32_t rgba () const { return _rgba; } + + /** set route-group color and notify UI about change */ + void set_rgba (uint32_t); + + /* directly set color only, used to convert old 5.x gui-object-state + * to libardour color */ + void migrate_rgba (uint32_t color) { _rgba = color; } + private: boost::shared_ptr routes; - boost::shared_ptr subgroup_bus; + boost::shared_ptr _subgroup_bus; + boost::weak_ptr group_master; PBD::Property _relative; PBD::Property _active; @@ -147,9 +176,22 @@ private: PBD::Property _route_active; PBD::Property _color; PBD::Property _monitoring; + PBD::Property _group_master_number; + + boost::shared_ptr _solo_group; + boost::shared_ptr _mute_group; + boost::shared_ptr _rec_enable_group; + boost::shared_ptr _gain_group; + boost::shared_ptr _monitoring_group; void remove_when_going_away (boost::weak_ptr); int set_state_2X (const XMLNode&, int); + + void post_set (PBD::PropertyChange const &); + void push_to_groups (); + + uint32_t _rgba; + bool _used_to_share_gain; }; } /* namespace */