summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLen Ovens <len@ovenwerks.net>2018-07-05 23:24:30 -0700
committerLen Ovens <len@ovenwerks.net>2018-07-05 23:24:30 -0700
commit3322e6f5a596c69a3c6e5fc3167fbebb69794887 (patch)
treecac724359c6b8671315144aefa06d25d279bd37f
parent2d40773755484ded82736177cf15b6a7900c7dc8 (diff)
OSC: make temp modes work with linked surfaces too
-rw-r--r--libs/surfaces/osc/osc.cc40
-rw-r--r--libs/surfaces/osc/osc.h1
2 files changed, 14 insertions, 27 deletions
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<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
};