summaryrefslogtreecommitdiff
path: root/libs/surfaces/faderport8/actions.cc
diff options
context:
space:
mode:
authorBen Loftis <ben@harrisonconsoles.com>2018-07-31 14:46:20 +0200
committerRobin Gareus <robin@gareus.org>2018-07-31 14:54:20 +0200
commit948834bb1e2ffd1024eba3d3acb84e560d4f5e33 (patch)
treefaadf124375a3584300a371bd915767f8c74470a /libs/surfaces/faderport8/actions.cc
parent506a42daf34fc6791e5cf1319bf51da2b4a4ef3b (diff)
Add support for PreSonus Faderport2 (2018 model)
This is a cleaned-up, foward-ported version of Ben's Mixbus patch (d6694c5b31).
Diffstat (limited to 'libs/surfaces/faderport8/actions.cc')
-rw-r--r--libs/surfaces/faderport8/actions.cc53
1 files changed, 47 insertions, 6 deletions
diff --git a/libs/surfaces/faderport8/actions.cc b/libs/surfaces/faderport8/actions.cc
index b09fa32355..62282ec531 100644
--- a/libs/surfaces/faderport8/actions.cc
+++ b/libs/surfaces/faderport8/actions.cc
@@ -23,6 +23,7 @@
#include "ardour/plugin_insert.h"
#include "ardour/session.h"
#include "ardour/session_configuration.h"
+#include "ardour/track.h"
#include "ardour/types.h"
#include "gtkmm2ext/actions.h"
@@ -39,6 +40,9 @@ using namespace ArdourSurface::FP_NAMESPACE::FP8Types;
#define BindMethod(ID, CB) \
_ctrls.button (FP8Controls::ID).released.connect_same_thread (button_connections, boost::bind (&FaderPort8:: CB, this));
+#define BindMethod2(ID, ACT, CB) \
+ _ctrls.button (FP8Controls::ID). ACT .connect_same_thread (button_connections, boost::bind (&FaderPort8:: CB, this));
+
#define BindFunction(ID, ACT, CB, ...) \
_ctrls.button (FP8Controls::ID). ACT .connect_same_thread (button_connections, boost::bind (&FaderPort8:: CB, this, __VA_ARGS__));
@@ -57,11 +61,11 @@ _ctrls.button (ID).released.connect_same_thread (button_connections, boost::bind
void
FaderPort8::setup_actions ()
{
- BindMethod (BtnPlay, button_play);
- BindMethod (BtnStop, button_stop);
- BindMethod (BtnLoop, button_loop);
- BindMethod (BtnRecord, button_record);
- BindMethod (BtnClick, button_metronom);
+ BindMethod2 (BtnPlay, pressed, button_play);
+ BindMethod2 (BtnStop, pressed, button_stop);
+ BindMethod2 (BtnLoop, pressed, button_loop);
+ BindMethod2 (BtnRecord, pressed, button_record);
+ BindMethod2 (BtnClick, pressed, button_metronom);
BindAction (BtnRedo, "Editor", "redo");
BindAction (BtnSave, "Common", "Save");
@@ -93,7 +97,11 @@ FaderPort8::setup_actions ()
BindFunction (BtnALatch, released, button_automation, ARDOUR::Latch);
_ctrls.button (FP8Controls::BtnEncoder).pressed.connect_same_thread (button_connections, boost::bind (&FaderPort8::button_encoder, this));
+#ifdef FADERPORT2
+ _ctrls.button (FP8Controls::BtnParam).pressed.connect_same_thread (button_connections, boost::bind (&FaderPort8::button_encoder, this));
+#else
_ctrls.button (FP8Controls::BtnParam).pressed.connect_same_thread (button_connections, boost::bind (&FaderPort8::button_parameter, this));
+#endif
BindMethod (BtnBypass, button_bypass);
@@ -105,6 +113,9 @@ FaderPort8::setup_actions ()
BindMethod (BtnLink, button_link);
BindMethod (BtnLock, button_lock);
+ BindMethod (BtnChanLock, button_chanlock); //FP2 only
+ BindMethod (BtnFlip, button_flip); //FP2 only
+
// user-specific
for (FP8Controls::UserButtonMap::const_iterator i = _ctrls.user_buttons ().begin ();
i != _ctrls.user_buttons ().end (); ++i) {
@@ -179,6 +190,20 @@ FaderPort8::button_open ()
AccessAction ("Common", "addExistingAudioFiles");
}
}
+
+void
+FaderPort8::button_chanlock ()
+{
+ _chan_locked = !_chan_locked;
+
+ _ctrls.button (FP8Controls::BtnChannel).set_blinking (_chan_locked);
+}
+
+void
+FaderPort8::button_flip ()
+{
+}
+
void
FaderPort8::button_lock ()
{
@@ -218,7 +243,7 @@ FaderPort8::button_automation (ARDOUR::AutoState as)
switch (fadermode) {
case ModePlugins:
#if 0 // Plugin Control Automation Mode
- for ( std::list <ProcessorCtrl>::iterator i = _proc_params.begin(); i != _proc_params.end(); ++i) {
+ for (std::list <ProcessorCtrl>::iterator i = _proc_params.begin(); i != _proc_params.end(); ++i) {
((*i).ac)->set_automation_state (as);
}
#endif
@@ -450,11 +475,21 @@ FaderPort8::handle_encoder_link (int steps)
void
FaderPort8::button_arm (bool press)
{
+#ifdef FADERPORT2
+ boost::shared_ptr<Stripable> s = first_selected_stripable();
+ if (press && s) {
+ boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track>(s);
+ if (t) {
+ t->rec_enable_control()->set_value (!t->rec_enable_control()->get_value(), PBD::Controllable::UseGroup);
+ }
+ }
+#else
FaderMode fadermode = _ctrls.fader_mode ();
if (fadermode == ModeTrack || fadermode == ModePan) {
_ctrls.button (FP8Controls::BtnArm).set_active (press);
ARMButtonChange (press); /* EMIT SIGNAL */
}
+#endif
}
void
@@ -466,6 +501,7 @@ FaderPort8::button_prev_next (bool next)
break;
case NavMaster:
case NavScroll:
+ case NavPan:
bank (!next, false);
break;
case NavBank:
@@ -533,6 +569,8 @@ FaderPort8::button_encoder ()
}
}
break;
+ case NavPan:
+ break;
case NavSection:
// TODO nudge
break;
@@ -620,6 +658,9 @@ FaderPort8::encoder_navigate (bool neg, int steps)
AccessAction ("Common", "nudge-playhead-forward");
}
break;
+ case NavPan:
+ abort(); /*NOTREACHED*/
+ break;
}
}