fix invalid mapping detection
[ardour.git] / libs / ardour / route_group_member.cc
index 9b23fd922bb98504e999bd50614ec89085cc58e6..280d193fba1d90dc11b3cff20b18c878529aa2ff 100644 (file)
     You should have received a copy of the GNU General Public License
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
 */
 
-
-#include "ardour/route_group.h"
+#include "ardour/libardour_visibility.h"
 #include "ardour/route_group_member.h"
+#include "ardour/route_group.h"
 
 using namespace ARDOUR;
 
+namespace ARDOUR { class RouteGroup; }
+
+/** Set the route group; it can be set to 0 for `none' */
 void
-RouteGroupMember::join_route_group (RouteGroup *rg)
+RouteGroupMember::set_route_group (RouteGroup *rg)
 {
        if (rg == _route_group) {
                return;
        }
 
        _route_group = rg;
-       route_group_changed (rg); /* EMIT SIGNAL */
+       route_group_changed (); /* EMIT SIGNAL */
 }
 
-void
-RouteGroupMember::leave_route_group ()
+bool
+RouteGroupMember::use_group (PBD::Controllable::GroupControlDisposition gcd, bool (RouteGroup::*predicate)(void) const) const
 {
-       RouteGroup* rg = _route_group;
-       _route_group = 0;
-       route_group_changed (rg); /* EMIT SIGNAL */
-}
+       bool active_for_predicate = _route_group && (_route_group->*predicate)() && _route_group->is_active();
 
+       return ((gcd != PBD::Controllable::NoGroup) && (gcd != PBD::Controllable::ForGroup)) &&
+               _route_group && 
+               ((active_for_predicate && (gcd != PBD::Controllable::InverseGroup)) ||
+                (!active_for_predicate && (gcd == PBD::Controllable::InverseGroup)));
+}