From 74c8ba5c9ac865e5d8455aee4c62c1d10018bdbb Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 14 Apr 2017 22:57:31 +0200 Subject: [PATCH] FP8: assign toggled plugin-parameters to buttons --- libs/surfaces/faderport8/faderport8.cc | 41 +++++++++++++++++++------- libs/surfaces/faderport8/fp8_strip.cc | 4 +-- 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 toggle_params; + std::vector slider_params; + + for ( std::list ::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 ::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) {