summaryrefslogtreecommitdiff
path: root/libs/surfaces/faderport8
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-06-30 01:59:12 +0200
committerRobin Gareus <robin@gareus.org>2017-06-30 01:59:12 +0200
commit773c31afc070caeaa3753bfdbbe818339884ae54 (patch)
tree7052f82ac96c8de9668e980743d2677412154a96 /libs/surfaces/faderport8
parentdd3f922788f34356eb75750bc9474e189820046c (diff)
FaderPort8 updates
* use 2 lines for Plugin Parameter Names * Expose Plugin Bypass/Enable per plugin - Shift + Select in Plugin Select Mode - Bypass Button in Plugin Parameter Edit Mode
Diffstat (limited to 'libs/surfaces/faderport8')
-rw-r--r--libs/surfaces/faderport8/actions.cc14
-rw-r--r--libs/surfaces/faderport8/callbacks.cc14
-rw-r--r--libs/surfaces/faderport8/faderport8.cc46
-rw-r--r--libs/surfaces/faderport8/faderport8.h4
-rw-r--r--libs/surfaces/faderport8/fp8_strip.cc6
5 files changed, 74 insertions, 10 deletions
diff --git a/libs/surfaces/faderport8/actions.cc b/libs/surfaces/faderport8/actions.cc
index 9b7bd54788..65a647bb0b 100644
--- a/libs/surfaces/faderport8/actions.cc
+++ b/libs/surfaces/faderport8/actions.cc
@@ -20,6 +20,7 @@
*/
#include "ardour/dB.h"
+#include "ardour/plugin_insert.h"
#include "ardour/session.h"
#include "ardour/session_configuration.h"
#include "ardour/types.h"
@@ -94,7 +95,7 @@ FaderPort8::setup_actions ()
_ctrls.button (FP8Controls::BtnParam).pressed.connect_same_thread (button_connections, boost::bind (&FaderPort8::button_parameter, this));
- BindAction (BtnBypass, "Mixer", "ab-plugins");
+ BindMethod (BtnBypass, button_bypass);
BindAction (BtnBypassAll, "Mixer", "ab-plugins"); // XXX
BindAction (BtnMacro, "Mixer", "show-editor");
@@ -157,6 +158,17 @@ FaderPort8::button_metronom ()
}
void
+FaderPort8::button_bypass ()
+{
+ boost::shared_ptr<PluginInsert> pi = _plugin_insert.lock();
+ if (pi) {
+ pi->enable (! pi->enabled ());
+ } else {
+ AccessAction ("Mixer", "ab-plugins");
+ }
+}
+
+void
FaderPort8::button_automation (ARDOUR::AutoState as)
{
FaderMode fadermode = _ctrls.fader_mode ();
diff --git a/libs/surfaces/faderport8/callbacks.cc b/libs/surfaces/faderport8/callbacks.cc
index 78dc7f7a78..d8de1a714a 100644
--- a/libs/surfaces/faderport8/callbacks.cc
+++ b/libs/surfaces/faderport8/callbacks.cc
@@ -19,6 +19,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+#include "ardour/plugin_insert.h"
#include "ardour/session.h"
#include "ardour/session_configuration.h"
@@ -204,3 +205,16 @@ FaderPort8::notify_mute_changed ()
#endif
_ctrls.button (FP8Controls::BtnMuteClear).set_active (muted);
}
+
+void
+FaderPort8::notify_plugin_active_changed ()
+{
+ boost::shared_ptr<PluginInsert> pi = _plugin_insert.lock();
+ if (pi) {
+ _ctrls.button (FP8Controls::BtnBypass).set_active (true);
+ _ctrls.button (FP8Controls::BtnBypass).set_color (pi->enabled () ? 0x00ff00ff : 0xff0000ff);
+ } else {
+ _ctrls.button (FP8Controls::BtnBypass).set_active (false);
+ _ctrls.button (FP8Controls::BtnBypass).set_color (0x888888ff);
+ }
+}
diff --git a/libs/surfaces/faderport8/faderport8.cc b/libs/surfaces/faderport8/faderport8.cc
index d01c48f57f..4365b17446 100644
--- a/libs/surfaces/faderport8/faderport8.cc
+++ b/libs/surfaces/faderport8/faderport8.cc
@@ -986,17 +986,19 @@ FaderPort8::assign_processor_ctrls ()
uint8_t id = 0;
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);
+ _ctrls.strip(id).unset_controllables (FP8Strip::CTRL_ALL & ~FP8Strip::CTRL_FADER & ~FP8Strip::CTRL_TEXT0 & ~FP8Strip::CTRL_TEXT1 & ~FP8Strip::CTRL_TEXT2);
}
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_TEXT & ~FP8Strip::CTRL_SELECT);
}
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);
+ std::string param_name = slider_params[i]->name;
+ _ctrls.strip(id).set_text_line (0, param_name.substr (0, 9));
+ _ctrls.strip(id).set_text_line (1, param_name.length () > 9 ? param_name.substr (9) : "");
}
if (i < toggle_params.size ()) {
_ctrls.strip(id).set_select_controllable (toggle_params[i]->ac);
@@ -1051,13 +1053,25 @@ void
FaderPort8::select_plugin (int num)
{
// make sure drop_ctrl_connections() was called
- assert (_proc_params.size() == 0 && _showing_well_known == 0);
+ assert (_proc_params.size() == 0 && _showing_well_known == 0 && _plugin_insert.expired());
boost::shared_ptr<Route> r = boost::dynamic_pointer_cast<Route> (first_selected_stripable());
if (!r) {
_ctrls.set_fader_mode (ModeTrack);
return;
}
+
+ // Toggle Bypass
+ if (shift_mod ()) {
+ if (num >= 0) {
+ boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (r->nth_plugin (num));
+ if (pi) {
+ pi->enable (! pi->enabled ());
+ }
+ }
+ return;
+ }
+
if (num < 0) {
build_well_known_processor_ctrls (r, num == -1);
assign_processor_ctrls ();
@@ -1072,6 +1086,21 @@ FaderPort8::select_plugin (int num)
return;
}
+ // disconnect signals from spill_plugins: processors_changed and ActiveChanged
+ processor_connections.drop_connections ();
+ r->DropReferences.connect (processor_connections, MISSING_INVALIDATOR, boost::bind (&FP8Controls::set_fader_mode, &_ctrls, ModeTrack), this);
+
+ boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (proc);
+ assert (pi); // nth_plugin() always returns a PI.
+#ifdef MIXBUS
+ if (!pi->is_channelstrip ())
+#endif
+ {
+ _plugin_insert = boost::weak_ptr<ARDOUR::PluginInsert> (pi);
+ }
+
+ pi->ActiveChanged.connect (processor_connections, MISSING_INVALIDATOR, boost::bind (&FaderPort8::notify_plugin_active_changed, this), this);
+
// switching to "Mode Track" -> calls FaderPort8::notify_fader_mode_changed()
// which drops the references, disconnects the signal and re-spills tracks
proc->DropReferences.connect (processor_connections, MISSING_INVALIDATOR, boost::bind (&FP8Controls::set_fader_mode, &_ctrls, ModeTrack), this);
@@ -1091,6 +1120,7 @@ FaderPort8::select_plugin (int num)
// display
assign_processor_ctrls ();
+ notify_plugin_active_changed ();
}
/* short 4 chars at most */
@@ -1198,14 +1228,16 @@ FaderPort8::spill_plugins ()
_ctrls.strip(id).unset_controllables (FP8Strip::CTRL_ALL & ~FP8Strip::CTRL_TEXT & ~FP8Strip::CTRL_SELECT);
_ctrls.strip(id).set_select_cb (cb);
- _ctrls.strip(id).select_button ().set_color (0x00ff00ff);
- _ctrls.strip(id).select_button ().set_active (true /*proc->enabled()*/);
+ _ctrls.strip(id).select_button ().set_color (proc->enabled () ? 0x00ff00ff : 0xff0000ff);
+ _ctrls.strip(id).select_button ().set_active (true);
_ctrls.strip(id).select_button ().set_blinking (false);
_ctrls.strip(id).set_text_line (0, proc->name());
_ctrls.strip(id).set_text_line (1, pi->plugin()->maker());
_ctrls.strip(id).set_text_line (2, plugintype (pi->type()));
_ctrls.strip(id).set_text_line (3, "");
+ pi->ActiveChanged.connect (processor_connections, MISSING_INVALIDATOR, boost::bind (&FaderPort8::spill_plugins, this), this);
+
if (++id == spillwidth) {
break;
}
@@ -1360,8 +1392,10 @@ void
FaderPort8::drop_ctrl_connections ()
{
_proc_params.clear();
+ _plugin_insert.reset ();
processor_connections.drop_connections ();
_showing_well_known = 0;
+ notify_plugin_active_changed ();
}
/* functor for FP8Strip's select button */
diff --git a/libs/surfaces/faderport8/faderport8.h b/libs/surfaces/faderport8/faderport8.h
index 06556b4ccd..e779752780 100644
--- a/libs/surfaces/faderport8/faderport8.h
+++ b/libs/surfaces/faderport8/faderport8.h
@@ -49,6 +49,7 @@ namespace ARDOUR {
class Bundle;
class Session;
class Processor;
+ class PluginInsert;
}
namespace ArdourSurface {
@@ -196,6 +197,7 @@ private:
boost::shared_ptr<ARDOUR::AutomationControl> ac;
};
std::list <ProcessorCtrl> _proc_params;
+ boost::weak_ptr<ARDOUR::PluginInsert> _plugin_insert;
int _showing_well_known;
/* **************************************************************************/
@@ -238,6 +240,7 @@ private:
void notify_solo_changed ();
void notify_mute_changed ();
void notify_automation_mode_changed ();
+ void notify_plugin_active_changed ();
/* actions */
PBD::ScopedConnectionList button_connections;
@@ -246,6 +249,7 @@ private:
void button_record ();
void button_loop ();
void button_metronom ();
+ void button_bypass ();
void button_varispeed (bool);
#ifdef FP8_MUTESOLO_UNDO
void button_solo_clear ();
diff --git a/libs/surfaces/faderport8/fp8_strip.cc b/libs/surfaces/faderport8/fp8_strip.cc
index d9d3fd7ba8..54180d32b8 100644
--- a/libs/surfaces/faderport8/fp8_strip.cc
+++ b/libs/surfaces/faderport8/fp8_strip.cc
@@ -506,7 +506,7 @@ FP8Strip::periodic_update_meter ()
if (_displaymode == PluginParam) {
if (_fader_ctrl) {
set_bar_mode (2); // Fill
- set_text_line (0x01, value_as_string(_fader_ctrl->desc(), _fader_ctrl->get_value()));
+ set_text_line (2, value_as_string(_fader_ctrl->desc(), _fader_ctrl->get_value()));
float barpos = _fader_ctrl->internal_to_interface (_fader_ctrl->get_value());
int val = std::min (127.f, std::max (0.f, barpos * 128.f));
if (val != _last_barpos) {
@@ -515,7 +515,7 @@ FP8Strip::periodic_update_meter ()
}
} else {
set_bar_mode (4); // Off
- set_text_line (0x01, "");
+ set_text_line (0x02, "");
}
}
else if (_displaymode == SendDisplay) {
@@ -605,7 +605,7 @@ FP8Strip::periodic ()
{
periodic_update_fader ();
periodic_update_meter ();
- if (_displaymode != PluginSelect) {
+ if (_displaymode != PluginSelect && _displaymode != PluginParam) {
periodic_update_timecode ();
}
}