summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-04-14 22:57:31 +0200
committerRobin Gareus <robin@gareus.org>2017-04-14 23:03:31 +0200
commit74c8ba5c9ac865e5d8455aee4c62c1d10018bdbb (patch)
tree049de1aa82771304c25c2b1881b590f9e031bcdd
parent7197231f4ca6ed13d24995d4f7890e9c6dd48a94 (diff)
FP8: assign toggled plugin-parameters to buttons
-rw-r--r--libs/surfaces/faderport8/faderport8.cc41
-rw-r--r--libs/surfaces/faderport8/fp8_strip.cc4
2 files changed, 33 insertions, 12 deletions
diff --git a/libs/surfaces/faderport8/faderport8.cc b/libs/surfaces/faderport8/faderport8.cc
index 5429ed29ea..54bbb655d8 100644
--- a/libs/surfaces/faderport8/faderport8.cc
+++ b/libs/surfaces/faderport8/faderport8.cc
@@ -962,31 +962,52 @@ FaderPort8::assign_stripables (bool select_only)
void
FaderPort8::assign_processor_ctrls ()
{
- int n_parameters = _proc_params.size();
- if (n_parameters == 0) {
+ if (_proc_params.size() == 0) {
_ctrls.set_fader_mode (ModeTrack);
return;
}
set_periodic_display_mode (FP8Strip::PluginParam);
+ std::vector <ProcessorCtrl*> toggle_params;
+ std::vector <ProcessorCtrl*> slider_params;
+
+ for ( std::list <ProcessorCtrl>::iterator i = _proc_params.begin(); i != _proc_params.end(); ++i) {
+ if ((*i).ac->toggled()) {
+ toggle_params.push_back (&(*i));
+ } else {
+ slider_params.push_back (&(*i));
+ }
+ }
+
+ int n_parameters = std::max (toggle_params.size(), slider_params.size());
+
_parameter_off = std::min (_parameter_off, n_parameters - 8);
_parameter_off = std::max (0, _parameter_off);
- int skip = _parameter_off;
uint8_t id = 0;
- for ( std::list <ProcessorCtrl>::iterator i = _proc_params.begin(); i != _proc_params.end(); ++i) {
- if (skip > 0) {
- --skip;
- continue;
+ for (size_t i = _parameter_off; i < (size_t)n_parameters; ++i) {
+ if (i >= toggle_params.size ()) {
+ _ctrls.strip(id).unset_controllables (FP8Strip::CTRL_ALL & ~FP8Strip::CTRL_FADER & ~FP8Strip::CTRL_TEXT0 & ~FP8Strip::CTRL_TEXT1);
+ }
+ else if (i >= slider_params.size ()) {
+ _ctrls.strip(id).unset_controllables (FP8Strip::CTRL_ALL & ~FP8Strip::CTRL_SELECT & ~FP8Strip::CTRL_TEXT3);
+ } else {
+ _ctrls.strip(id).unset_controllables (FP8Strip::CTRL_ALL & ~FP8Strip::CTRL_FADER & ~FP8Strip::CTRL_TEXT0 & ~FP8Strip::CTRL_TEXT1 & ~FP8Strip::CTRL_SELECT & ~FP8Strip::CTRL_TEXT3);
}
- _ctrls.strip(id).unset_controllables (FP8Strip::CTRL_ALL & ~FP8Strip::CTRL_FADER & ~FP8Strip::CTRL_TEXT0);
- _ctrls.strip(id).set_fader_controllable ((*i).ac);
- _ctrls.strip(id).set_text_line (0, (*i).name);
+ if (i < slider_params.size ()) {
+ _ctrls.strip(id).set_fader_controllable (slider_params[i]->ac);
+ _ctrls.strip(id).set_text_line (0, slider_params[i]->name);
+ }
+ if (i < toggle_params.size ()) {
+ _ctrls.strip(id).set_select_controllable (toggle_params[i]->ac);
+ _ctrls.strip(id).set_text_line (3, toggle_params[i]->name, true);
+ }
if (++id == 8) {
break;
}
}
+
// clear remaining
for (; id < 8; ++id) {
_ctrls.strip(id).unset_controllables ();
diff --git a/libs/surfaces/faderport8/fp8_strip.cc b/libs/surfaces/faderport8/fp8_strip.cc
index 2c3a8a7a0e..ba3ba318f4 100644
--- a/libs/surfaces/faderport8/fp8_strip.cc
+++ b/libs/surfaces/faderport8/fp8_strip.cc
@@ -446,7 +446,7 @@ FP8Strip::periodic_update_fader ()
void
FP8Strip::set_periodic_display_mode (DisplayMode m) {
_displaymode = m;
- if (_displaymode == SendDisplay) {
+ if (_displaymode == SendDisplay || _displaymode == PluginParam) {
// need to change to 4 lines before calling set_text()
set_strip_mode (2); // 4 lines of small text
}
@@ -527,7 +527,7 @@ FP8Strip::periodic_update_meter ()
set_bar_mode (4); // Off
}
- if (_displaymode == SendDisplay) {
+ if (_displaymode == SendDisplay || _displaymode == PluginParam) {
set_strip_mode (2); // 4 lines of small text + value-bar
}
else if (have_meter && have_panner) {