13
0

OSC: make temp modes work with linked surfaces too

This commit is contained in:
Len Ovens 2018-07-05 23:24:30 -07:00
parent 2d40773755
commit 3322e6f5a5
2 changed files with 14 additions and 27 deletions

View File

@ -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;
}

View File

@ -217,6 +217,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
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<ARDOUR::Stripable> 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
};