From: Len Ovens Date: Fri, 6 Jul 2018 06:24:30 +0000 (-0700) Subject: OSC: make temp modes work with linked surfaces too X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=3322e6f5a596c69a3c6e5fc3167fbebb69794887;p=ardour.git OSC: make temp modes work with linked surfaces too --- diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index e667911e2e..9c0e8e7d32 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -824,6 +824,7 @@ OSC::catchall (const char *path, const char* types, lo_arg **argv, int argc, lo_ sur->custom_strips = set->custom_strips; sur->temp_mode = set->temp_mode; sur->temp_strips = set->temp_strips; + sur->temp_master = set->temp_master; } if (strstr (path, X_("/automation"))) { @@ -1653,6 +1654,7 @@ OSC::link_strip_types (uint32_t linkset, uint32_t striptypes) } ls = &link_sets[linkset]; ls->strip_types = striptypes; + ls->temp_mode = TempOff; for (uint32_t dv = 1; dv < ls->urls.size(); dv++) { OSCSurface *su; @@ -2249,6 +2251,7 @@ OSC::strip_feedback (OSCSurface* sur, bool new_bank_size) sur->custom_strips = set->custom_strips; sur->temp_mode = set->temp_mode; sur->temp_strips = set->temp_strips; + sur->temp_master = set->temp_master; } if (!sur->temp_mode) { sur->strips = get_sorted_stripables(sur->strip_types, sur->cue, sur->custom_mode, sur->custom_strips); @@ -2830,15 +2833,6 @@ OSC::set_temp_mode (lo_address addr) } sur->strips = get_sorted_stripables(sur->strip_types, sur->cue, 1, sur->temp_strips); sur->nstrips = sur->temp_strips.size(); - LinkSet *set; - uint32_t ls = sur->linkset; - if (ls) { - set = &(link_sets[ls]); - set->temp_mode = GroupOnly; - set->temp_strips.clear (); - set->temp_strips = sur->temp_strips; - set->strips = sur->strips; - } ret = 0; } } @@ -2857,15 +2851,6 @@ OSC::set_temp_mode (lo_address addr) sur->temp_strips.push_back(s); sur->strips = get_sorted_stripables(sur->strip_types, sur->cue, 1, sur->temp_strips); sur->nstrips = sur->temp_strips.size(); - LinkSet *set; - uint32_t ls = sur->linkset; - if (ls) { - set = &(link_sets[ls]); - set->temp_mode = VCAOnly; - set->temp_strips.clear (); - set->temp_strips = sur->temp_strips; - set->strips = sur->strips; - } ret = 0; } } else if (sur->temp_mode == BusOnly) { @@ -2887,15 +2872,6 @@ OSC::set_temp_mode (lo_address addr) sur->temp_strips.push_back(s); sur->strips = get_sorted_stripables(sur->strip_types, sur->cue, 1, sur->temp_strips); sur->nstrips = sur->temp_strips.size(); - LinkSet *set; - uint32_t ls = sur->linkset; - if (ls) { - set = &(link_sets[ls]); - set->temp_mode = BusOnly; - set->temp_strips.clear (); - set->temp_strips = sur->temp_strips; - set->strips = sur->strips; - } ret = 0; } } @@ -2904,6 +2880,16 @@ OSC::set_temp_mode (lo_address addr) ret = 0; } } + LinkSet *set; + uint32_t ls = sur->linkset; + if (ls) { + set = &(link_sets[ls]); + set->temp_mode = sur->temp_mode; + set->temp_strips.clear (); + set->temp_strips = sur->temp_strips; + set->temp_master = sur->temp_master; + set->strips = sur->strips; + } if (ret) { sur->temp_mode = TempOff; } diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index 1999873677..6795ff39ef 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -217,6 +217,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI uint32_t custom_mode; // use custom strip list OSCTempMode temp_mode; // use custom strip list Sorted temp_strips; // temp strip list for grouponly, vcaonly, auxonly + boost::shared_ptr temp_master; // temp master stripable std::bitset<32> strip_types; // strip_types for this linkset Sorted strips; // list of valid strips in order for this set };