X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fmackie%2Fmcp_buttons.cc;h=c864b5b87126ca2d6f19b80a03a1ba7b642fef79;hb=40ef762db4c830b482aa7830c30dca4f32b753c4;hp=37035353bc31faf68327d93326c4f5f66aee4ce8;hpb=b3db38a34fa9e7670c500e20ca4bd1f8e52a199f;p=ardour.git diff --git a/libs/surfaces/mackie/mcp_buttons.cc b/libs/surfaces/mackie/mcp_buttons.cc index 37035353bc..c864b5b871 100644 --- a/libs/surfaces/mackie/mcp_buttons.cc +++ b/libs/surfaces/mackie/mcp_buttons.cc @@ -17,6 +17,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include + #include "pbd/memento_command.h" #include "ardour/debug.h" @@ -67,12 +69,14 @@ LedState MackieControlProtocol::control_press (Button &) { _modifier_state |= MODIFIER_CONTROL; + DEBUG_TRACE (DEBUG::MackieControl, string_compose ("CONTROL Press: modifier state now set to %1\n", _modifier_state)); return on; } LedState MackieControlProtocol::control_release (Button &) { _modifier_state &= ~MODIFIER_CONTROL; + DEBUG_TRACE (DEBUG::MackieControl, string_compose ("CONTROL Release: modifier state now set to %1\n", _modifier_state)); return on; } LedState @@ -92,25 +96,19 @@ LedState MackieControlProtocol::left_press (Button &) { Sorted sorted = get_sorted_routes(); - uint32_t strip_cnt = n_strips (); + uint32_t strip_cnt = n_strips (); + uint32_t route_cnt = sorted.size(); DEBUG_TRACE (DEBUG::MackieControl, string_compose ("bank left with current initial = %1 nstrips = %2 tracks/busses = %3\n", - _current_initial_bank, strip_cnt, sorted.size())); - - if (sorted.size() > strip_cnt) { - int new_initial = _current_initial_bank - strip_cnt; - if (new_initial < 0) { - new_initial = 0; - } - - if (new_initial != int (_current_initial_bank)) { - switch_banks (new_initial); - } + _current_initial_bank, strip_cnt, route_cnt)); - return on; + if (_current_initial_bank > strip_cnt) { + switch_banks (_current_initial_bank - strip_cnt); } else { - return flashing; + switch_banks (0); } + + return on; } LedState @@ -124,26 +122,15 @@ MackieControlProtocol::right_press (Button &) { Sorted sorted = get_sorted_routes(); uint32_t strip_cnt = n_strips(); + uint32_t route_cnt = sorted.size(); DEBUG_TRACE (DEBUG::MackieControl, string_compose ("bank right with current initial = %1 nstrips = %2 tracks/busses = %3\n", - _current_initial_bank, strip_cnt, sorted.size())); - - if (sorted.size() > strip_cnt) { - uint32_t delta = sorted.size() - (strip_cnt + _current_initial_bank); + _current_initial_bank, strip_cnt, route_cnt)); - if (delta > strip_cnt) { - delta = strip_cnt; - } - - if (delta > 0) { - switch_banks (_current_initial_bank + delta); - } + uint32_t new_initial = std::min (_current_initial_bank + strip_cnt, route_cnt - 1); + switch_banks (new_initial); - return on; - } else { - return flashing; - } - return off; + return on; } LedState @@ -166,6 +153,19 @@ MackieControlProtocol::cursor_left_press (Button& ) } else { ZoomOut (); /* EMIT SIGNAL */ } + } else { + float page_fraction; + if (_modifier_state == MODIFIER_CONTROL) { + page_fraction = 1.0; + } else if (_modifier_state == MODIFIER_OPTION) { + page_fraction = 0.1; + } else if (_modifier_state == MODIFIER_SHIFT) { + page_fraction = 2.0; + } else { + page_fraction = 0.25; + } + + ScrollTimeline (-page_fraction); } return off; @@ -187,8 +187,21 @@ MackieControlProtocol::cursor_right_press (Button& ) } else { ZoomIn (); /* EMIT SIGNAL */ } - } + } else { + float page_fraction; + if (_modifier_state == MODIFIER_CONTROL) { + page_fraction = 1.0; + } else if (_modifier_state == MODIFIER_OPTION) { + page_fraction = 0.1; + } else if (_modifier_state == MODIFIER_SHIFT) { + page_fraction = 2.0; + } else { + page_fraction = 0.25; + } + ScrollTimeline (page_fraction); + } + return off; } @@ -202,11 +215,14 @@ LedState MackieControlProtocol::cursor_up_press (Button&) { if (_zoom_mode) { - if (_modifier_state & MODIFIER_OPTION) { - VerticalZoomOutSelected (); /* EMIT SIGNAL */ + + if (_modifier_state & MODIFIER_CONTROL) { + VerticalZoomInSelected (); /* EMIT SIGNAL */ } else { - VerticalZoomOutAll (); /* EMIT SIGNAL */ + VerticalZoomInAll (); /* EMIT SIGNAL */ } + } else { + StepTracksUp (); /* EMIT SIGNAL */ } return off; } @@ -221,12 +237,13 @@ LedState MackieControlProtocol::cursor_down_press (Button&) { if (_zoom_mode) { - if (_modifier_state & MODIFIER_OPTION) { - VerticalZoomInSelected (); /* EMIT SIGNAL */ + VerticalZoomOutSelected (); /* EMIT SIGNAL */ } else { - VerticalZoomInAll (); /* EMIT SIGNAL */ + VerticalZoomOutAll (); /* EMIT SIGNAL */ } + } else { + StepTracksDown (); /* EMIT SIGNAL */ } return off; } @@ -289,14 +306,16 @@ MackieControlProtocol::zoom_release (Mackie::Button &) Mackie::LedState MackieControlProtocol::scrub_press (Mackie::Button &) { - _scrub_mode = !_scrub_mode; - return (_scrub_mode ? on : off); + if (!surfaces.empty()) { + surfaces.front()->next_jog_mode (); + } + return none; } Mackie::LedState MackieControlProtocol::scrub_release (Mackie::Button &) { - return (_scrub_mode ? on : off); + return none; } LedState @@ -386,17 +405,11 @@ MackieControlProtocol::timecode_beats_release (Button &) LedState MackieControlProtocol::marker_press (Button &) { - // cut'n'paste from LocationUI::add_new_location() string markername; - framepos_t where = session->audible_frame(); - session->locations()->next_available_name(markername,"mcu"); - Location *location = new Location (*session, where, where, markername, Location::IsMark); - session->begin_reversible_command (_("add marker")); - XMLNode &before = session->locations()->get_state(); - session->locations()->add (location, true); - XMLNode &after = session->locations()->get_state(); - session->add_command (new MementoCommand(*(session->locations()), &before, &after)); - session->commit_reversible_command (); + + session->locations()->next_available_name (markername,"mcu"); + add_marker (markername); + return on; } @@ -416,9 +429,7 @@ MackieControlProtocol::frm_left_press (Button &) // can use first_mark_before/after as well unsigned long elapsed = _frm_left_last.restart(); - Location * loc = session->locations()->first_location_before ( - session->transport_frame() - ); + Location * loc = session->locations()->first_location_before (session->transport_frame()); // allow a quick double to go past a previous mark if (session->transport_rolling() && elapsed < 500 && loc != 0) { @@ -432,6 +443,8 @@ MackieControlProtocol::frm_left_press (Button &) // move to the location, if it's valid if (loc != 0) { session->request_locate (loc->start(), session->transport_rolling()); + } else { + session->request_locate (session->locations()->session_range_location()->start(), session->transport_rolling()); } return on; @@ -451,6 +464,8 @@ MackieControlProtocol::frm_right_press (Button &) if (loc != 0) { session->request_locate (loc->start(), session->transport_rolling()); + } else { + session->request_locate (session->locations()->session_range_location()->end(), session->transport_rolling()); } return on; @@ -478,7 +493,11 @@ MackieControlProtocol::stop_release (Button &) LedState MackieControlProtocol::play_press (Button &) { - transport_play (); + /* if we're already rolling at normal speed, and we're pressed + again, jump back to where we started last time + */ + + transport_play (session->transport_speed() == 1.0); return none; } @@ -504,7 +523,11 @@ MackieControlProtocol::record_release (Button &) LedState MackieControlProtocol::rewind_press (Button &) { - rewind (); + if (_modifier_state == MODIFIER_CONTROL) { + goto_start (); + } else { + rewind (); + } return none; } @@ -517,7 +540,11 @@ MackieControlProtocol::rewind_release (Button &) LedState MackieControlProtocol::ffwd_press (Button &) { - ffwd (); + if (_modifier_state == MODIFIER_CONTROL) { + goto_end(); + } else { + ffwd (); + } return none; } @@ -530,8 +557,13 @@ MackieControlProtocol::ffwd_release (Button &) LedState MackieControlProtocol::loop_press (Button &) { - session->request_play_loop (!session->get_play_loop()); - return none; + if (_modifier_state & MODIFIER_CONTROL) { + set_view_mode (Loop); + return on; + } else { + session->request_play_loop (!session->get_play_loop()); + return none; + } } LedState @@ -632,10 +664,10 @@ MackieControlProtocol::enter_release (Button &) { return off; } + LedState MackieControlProtocol::F1_press (Button &) { - f_press (0); return off; } LedState @@ -646,7 +678,6 @@ MackieControlProtocol::F1_release (Button &) LedState MackieControlProtocol::F2_press (Button &) { - f_press (1); return off; } LedState @@ -657,7 +688,6 @@ MackieControlProtocol::F2_release (Button &) LedState MackieControlProtocol::F3_press (Button &) { - f_press (2); return off; } LedState @@ -668,7 +698,6 @@ MackieControlProtocol::F3_release (Button &) LedState MackieControlProtocol::F4_press (Button &) { - f_press (3); return off; } LedState @@ -679,7 +708,6 @@ MackieControlProtocol::F4_release (Button &) LedState MackieControlProtocol::F5_press (Button &) { - f_press (4); return off; } LedState @@ -690,7 +718,6 @@ MackieControlProtocol::F5_release (Button &) LedState MackieControlProtocol::F6_press (Button &) { - f_press (5); return off; } LedState @@ -701,7 +728,6 @@ MackieControlProtocol::F6_release (Button &) LedState MackieControlProtocol::F7_press (Button &) { - f_press (6); return off; } LedState @@ -736,12 +762,13 @@ MackieControlProtocol::io_release (Button &) LedState MackieControlProtocol::sends_press (Button &) { - return off; + set_view_mode (Sends); + return on; } LedState MackieControlProtocol::sends_release (Button &) { - return off; + return none; } LedState MackieControlProtocol::pan_press (Button &) @@ -766,33 +793,35 @@ MackieControlProtocol::plugin_release (Button &) LedState MackieControlProtocol::eq_press (Button &) { - return off; + set_view_mode (EQ); + return on; } LedState MackieControlProtocol::eq_release (Button &) { - return off; + return none; } LedState MackieControlProtocol::dyn_press (Button &) { - return off; + set_view_mode (Dynamics); + return on; } LedState MackieControlProtocol::dyn_release (Button &) { - return off; + return none; } LedState MackieControlProtocol::flip_press (Button &) { - _flip_mode = !_flip_mode; + set_flip_mode (!_flip_mode); return (_flip_mode ? on : off); } LedState MackieControlProtocol::flip_release (Button &) { - return (_flip_mode ? on : off); + return none; } LedState MackieControlProtocol::edit_press (Button &) @@ -947,6 +976,7 @@ MackieControlProtocol::mixer_release (Button &) LedState MackieControlProtocol::user_a_press (Button &) { + transport_play (session->transport_speed() == 1.0); return off; } LedState @@ -957,6 +987,7 @@ MackieControlProtocol::user_a_release (Button &) LedState MackieControlProtocol::user_b_press (Button &) { + transport_stop(); return off; } LedState @@ -964,3 +995,224 @@ MackieControlProtocol::user_b_release (Button &) { return off; } + +Mackie::LedState +MackieControlProtocol::snapshot_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::snapshot_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::read_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::read_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::write_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::write_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::fdrgroup_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::fdrgroup_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::clearsolo_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::clearsolo_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::track_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::track_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::send_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::send_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::miditracks_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::miditracks_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::inputs_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::inputs_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::audiotracks_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::audiotracks_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::audioinstruments_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::audioinstruments_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::aux_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::aux_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::busses_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::busses_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::outputs_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::outputs_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::user_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::user_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::trim_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::trim_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::latch_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::latch_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::grp_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::grp_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::nudge_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::nudge_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::replace_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::replace_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::click_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::click_release (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::view_press (Mackie::Button&) +{ + return none; +} +Mackie::LedState +MackieControlProtocol::view_release (Mackie::Button&) +{ + return none; +}