#include "ardour/session.h"
#include "ardour/solo_control.h"
+#include "layout.h"
#include "push2.h"
+#include "track_mix.h"
using namespace ArdourSurface;
using namespace ARDOUR;
#define MAKE_PAD(x,y,nn) \
pad = new Pad ((x), (y), (nn)); \
- nn_pad_map.insert (std::make_pair (pad->extra(), pad)); \
- coord_pad_map.insert (std::make_pair (pad->coord(), pad));
+ nn_pad_map.insert (std::make_pair (pad->extra(), pad));
MAKE_PAD (0, 0, 92);
MAKE_PAD (0, 1, 93);
button = new ColorButton ((i), (cc), (p)); \
cc_button_map.insert (std::make_pair (button->controller_number(), button)); \
id_button_map.insert (std::make_pair (button->id, button))
+#define MAKE_COLOR_BUTTON_PRESS_RELEASE_LONG(i,cc,p,r,l) \
+ button = new ColorButton ((i), (cc), (p), (r), (l)); \
+ cc_button_map.insert (std::make_pair (button->controller_number(), button)); \
+ id_button_map.insert (std::make_pair (button->id, button))
MAKE_COLOR_BUTTON_PRESS (Upper1, 102, &Push2::button_upper_1);
MAKE_COLOR_BUTTON_PRESS (Upper2, 103, &Push2::button_upper_2);
MAKE_COLOR_BUTTON_PRESS (Lower6, 25, &Push2::button_lower_6);
MAKE_COLOR_BUTTON_PRESS (Lower7, 26, &Push2::button_lower_7);
MAKE_COLOR_BUTTON_PRESS (Lower8, 27, &Push2::button_lower_8);
- MAKE_COLOR_BUTTON (Master, 28);
- MAKE_COLOR_BUTTON (Mute, 60);
- MAKE_COLOR_BUTTON_PRESS (Solo, 61, &Push2::button_solo);
+ MAKE_COLOR_BUTTON_PRESS (Master, 28, &Push2::button_master);
+ MAKE_COLOR_BUTTON_PRESS (Mute, 60, &Push2::button_mute);
+ MAKE_COLOR_BUTTON_PRESS_RELEASE_LONG (Solo, 61, &Push2::relax, &Push2::button_solo, &Push2::button_solo_long_press);
MAKE_COLOR_BUTTON_PRESS (Stop, 29, &Push2::button_stop);
MAKE_COLOR_BUTTON_PRESS (Fwd32ndT, 43, &Push2::button_fwd32t);
MAKE_COLOR_BUTTON_PRESS (Fwd32nd,42 , &Push2::button_fwd32);
MAKE_WHITE_BUTTON (Delete, 118);
MAKE_WHITE_BUTTON (AddDevice, 52);
MAKE_WHITE_BUTTON (Device, 110);
- MAKE_WHITE_BUTTON (Mix, 112);
+ MAKE_WHITE_BUTTON_PRESS (Mix, 112, &Push2::button_mix_press);
MAKE_WHITE_BUTTON_PRESS (Undo, 119, &Push2::button_undo);
MAKE_WHITE_BUTTON_PRESS (AddTrack, 53, &Push2::button_add_track);
MAKE_WHITE_BUTTON_PRESS (Browse, 111, &Push2::button_browse);
void
Push2::button_up ()
{
- scroll_up_1_track ();
+ _current_layout->button_up ();
}
void
Push2::button_down ()
{
- scroll_dn_1_track ();
+ _current_layout->button_down ();
}
void
}
void
-Push2::button_solo ()
+Push2::button_solo_long_press ()
{
cancel_all_solo ();
}
+void
+Push2::button_mute ()
+{
+ if (_current_layout) {
+ _current_layout->button_mute ();
+ }
+}
+
+void
+Push2::button_solo ()
+{
+ if (_current_layout) {
+ _current_layout->button_solo ();
+ }
+}
+
void
Push2::button_new ()
{
void
Push2::button_octave_down ()
{
+ if (_modifier_state & ModShift) {
+ octave_shift = 0;
+ return;
+ }
+
int os = (max (-4, octave_shift - 1));
if (os != octave_shift) {
octave_shift = os;
- build_pad_table ();
}
}
void
Push2::button_octave_up ()
{
+ if (_modifier_state & ModShift) {
+ octave_shift = 0;
+ return;
+ }
+
int os = (min (4, octave_shift + 1));
if (os != octave_shift) {
octave_shift = os;
- build_pad_table ();
}
}
Push2::button_scale_press ()
{
if (_current_layout != scale_layout) {
- _current_layout = scale_layout;
+ set_current_layout (scale_layout);
} else {
- _current_layout = mix_layout;
+ if (ControlProtocol::first_selected_stripable()) {
+ set_current_layout (mix_layout);
+ }
}
}
+
+void
+Push2::button_mix_press ()
+{
+ if (_current_layout == track_mix_layout) {
+ set_current_layout (mix_layout);
+ } else {
+ if (ControlProtocol::first_selected_stripable()) {
+ set_current_layout (track_mix_layout);
+ }
+ }
+}
+
+void
+Push2::button_master ()
+{
+ boost::shared_ptr<Stripable> master = session->master_out();
+
+ if (!master) {
+ return;
+ }
+
+ ControlProtocol::SetStripableSelection (master);
+
+ if (_current_layout != track_mix_layout) {
+ set_current_layout (track_mix_layout);
+ }
+}
+
+std::string
+Push2::button_name_by_id (ButtonID id)
+{
+ switch (id) {
+ case TapTempo:
+ return "TapTempo";
+ case Metronome:
+ return "Metronome";
+ case Upper1:
+ return "Upper1";
+ case Upper2:
+ return "Upper2";
+ case Upper3:
+ return "Upper3";
+ case Upper4:
+ return "Upper4";
+ case Upper5:
+ return "Upper5";
+ case Upper6:
+ return "Upper6";
+ case Upper7:
+ return "Upper7";
+ case Upper8:
+ return "Upper8";
+ case Setup:
+ return "Setup";
+ case User:
+ return "User";
+ case Delete:
+ return "Delete";
+ case AddDevice:
+ return "AddDevice";
+ case Device:
+ return "Device";
+ case Mix:
+ return "Mix";
+ case Undo:
+ return "Undo";
+ case AddTrack:
+ return "AddTrack";
+ case Browse:
+ return "Browse";
+ case Clip:
+ return "Clip";
+ case Mute:
+ return "Mute";
+ case Solo:
+ return "Solo";
+ case Stop:
+ return "Stop";
+ case Lower1:
+ return "Lower1";
+ case Lower2:
+ return "Lower2";
+ case Lower3:
+ return "Lower3";
+ case Lower4:
+ return "Lower4";
+ case Lower5:
+ return "Lower5";
+ case Lower6:
+ return "Lower6";
+ case Lower7:
+ return "Lower7";
+ case Lower8:
+ return "Lower8";
+ case Master:
+ return "Master";
+ case Convert:
+ return "Convert";
+ case DoubleLoop:
+ return "DoubleLoop";
+ case Quantize:
+ return "Quantize";
+ case Duplicate:
+ return "Duplicate";
+ case New:
+ return "New";
+ case FixedLength:
+ return "FixedLength";
+ case Automate:
+ return "Automate";
+ case RecordEnable:
+ return "RecordEnable";
+ case Play:
+ return "Play";
+ case Fwd32ndT:
+ return "Fwd32ndT";
+ case Fwd32nd:
+ return "Fwd32nd";
+ case Fwd16thT:
+ return "Fwd16thT";
+ case Fwd16th:
+ return "Fwd16th";
+ case Fwd8thT:
+ return "Fwd8thT";
+ case Fwd8th:
+ return "Fwd8th";
+ case Fwd4trT:
+ return "Fwd4trT";
+ case Fwd4tr:
+ return "Fwd4tr";
+ case Up:
+ return "Up";
+ case Right:
+ return "Right";
+ case Down:
+ return "Down";
+ case Left:
+ return "Left";
+ case Repeat:
+ return "Repeat";
+ case Accent:
+ return "Accent";
+ case Scale:
+ return "Scale";
+ case Layout:
+ return "Layout";
+ case Note:
+ return "Note";
+ case Session:
+ return "Session";
+ case OctaveUp:
+ return "OctaveUp";
+ case PageRight:
+ return "PageRight";
+ case OctaveDown:
+ return "OctaveDown";
+ case PageLeft:
+ return "PageLeft";
+ case Shift:
+ return "Shift";
+ case Select:
+ return "Select";
+ default:
+ break;
+ }
+
+ return "???";
+}