summaryrefslogtreecommitdiff
path: root/libs/surfaces/tranzport/button_events.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/surfaces/tranzport/button_events.cc')
-rw-r--r--libs/surfaces/tranzport/button_events.cc380
1 files changed, 380 insertions, 0 deletions
diff --git a/libs/surfaces/tranzport/button_events.cc b/libs/surfaces/tranzport/button_events.cc
new file mode 100644
index 0000000000..37c62a6ab7
--- /dev/null
+++ b/libs/surfaces/tranzport/button_events.cc
@@ -0,0 +1,380 @@
+/*
+ * Copyright (C) 2006 Paul Davis
+ * Copyright (C) 2007 Michael Taht
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * */
+
+#include <tranzport_common.h>
+#include <tranzport_control_protocol.h>
+
+using namespace ARDOUR;
+using namespace std;
+using namespace sigc;
+using namespace PBD;
+
+#include "i18n.h"
+
+#include <pbd/abstract_ui.cc>
+
+
+
+void
+TranzportControlProtocol::button_event_battery_press (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_battery_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_backlight_press (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_backlight_release (bool shifted)
+{
+#if DEBUG_TRANZPORT
+ printf("backlight released, redrawing (and possibly crashing) display\n");
+#endif
+ if (shifted) {
+ lcd_damage();
+ lcd_clear();
+ last_where += 1; /* force time redisplay */
+ last_track_gain = FLT_MAX;
+ }
+}
+
+void
+TranzportControlProtocol::button_event_trackleft_press (bool shifted)
+{
+ prev_track ();
+ // not really the right layer for this
+ if(display_mode == DisplayBigMeter) {
+ if (route_table[0] != 0) {
+ notify(route_get_name (0).substr (0, 15).c_str());
+ }
+ }
+}
+
+void
+TranzportControlProtocol::button_event_trackleft_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_trackright_press (bool shifted)
+{
+ next_track ();
+ // not really the right layer for this
+ if(display_mode == DisplayBigMeter) {
+ if (route_table[0] != 0) {
+ notify(route_get_name (0).substr (0, 15).c_str());
+ }
+ }
+}
+
+void
+TranzportControlProtocol::button_event_trackright_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_trackrec_press (bool shifted)
+{
+ if (shifted) {
+ toggle_all_rec_enables ();
+ } else {
+ route_set_rec_enable (0, !route_get_rec_enable (0));
+ }
+}
+
+void
+TranzportControlProtocol::button_event_trackrec_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_trackmute_press (bool shifted)
+{
+ if (shifted) {
+ // Mute ALL? Something useful when a phone call comes in. Mute master?
+ } else {
+ route_set_muted (0, !route_get_muted (0));
+ }
+}
+
+void
+TranzportControlProtocol::button_event_trackmute_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_tracksolo_press (bool shifted)
+{
+#if DEBUG_TRANZPORT
+ printf("solo pressed\n");
+#endif
+ if (display_mode == DisplayBigMeter) {
+ light_off (LightAnysolo);
+ return;
+ }
+
+ if (shifted) {
+ session->set_all_solo (!session->soloing());
+ } else {
+ route_set_soloed (0, !route_get_soloed (0));
+ }
+}
+
+void
+TranzportControlProtocol::button_event_tracksolo_release (bool shifted)
+{
+#if DEBUG_TRANZPORT
+ printf("solo released\n");
+#endif
+}
+
+void
+TranzportControlProtocol::button_event_undo_press (bool shifted)
+{
+// undohistory->get_state(1);
+//XMLNode&
+//UndoHistory::get_state (uint32_t depth)
+
+ if (shifted) {
+ redo (); // someday flash the screen with what was redone
+ notify("Redone!!");
+ } else {
+ undo (); // someday flash the screen with what was undone
+ notify("Undone!!");
+ }
+}
+
+void
+TranzportControlProtocol::button_event_undo_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_in_press (bool shifted)
+{
+ if (shifted) {
+ toggle_punch_in ();
+ } else {
+ ControlProtocol::ZoomIn (); /* EMIT SIGNAL */
+ }
+}
+
+void
+TranzportControlProtocol::button_event_in_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_out_press (bool shifted)
+{
+ if (shifted) {
+ toggle_punch_out ();
+ } else {
+ ControlProtocol::ZoomOut (); /* EMIT SIGNAL */
+ }
+}
+
+void
+TranzportControlProtocol::button_event_out_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_punch_press (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_punch_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_loop_press (bool shifted)
+{
+ if (shifted) {
+ next_wheel_shift_mode ();
+ } else {
+ loop_toggle ();
+ }
+}
+
+void
+TranzportControlProtocol::button_event_loop_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_prev_press (bool shifted)
+{
+ if (shifted) {
+ ControlProtocol::ZoomToSession (); /* EMIT SIGNAL */
+ } else {
+ prev_marker ();
+ }
+}
+
+void
+TranzportControlProtocol::button_event_prev_release (bool shifted)
+{
+}
+
+// Note - add_marker should adhere to the snap to setting
+// maybe session->audible_frame does that
+
+void
+TranzportControlProtocol::button_event_add_press (bool shifted)
+{
+ add_marker ();
+}
+
+void
+TranzportControlProtocol::button_event_add_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_next_press (bool shifted)
+{
+ if (shifted) {
+ next_wheel_mode ();
+ } else {
+ next_marker ();
+ }
+}
+
+void
+TranzportControlProtocol::button_event_next_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_rewind_press (bool shifted)
+{
+ if (shifted) {
+ goto_start ();
+ } else {
+ rewind ();
+ }
+}
+
+void
+TranzportControlProtocol::button_event_rewind_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_fastforward_press (bool shifted)
+{
+ if (shifted) {
+ goto_end ();
+ } else {
+ ffwd ();
+ }
+}
+
+void
+TranzportControlProtocol::button_event_fastforward_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_stop_press (bool shifted)
+{
+ if (shifted) {
+ next_display_mode ();
+ } else {
+ transport_stop ();
+ }
+}
+
+void
+TranzportControlProtocol::button_event_stop_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_play_press (bool shifted)
+{
+ if (shifted) {
+ set_transport_speed (1.0f);
+ } else {
+ transport_play ();
+ }
+}
+
+void
+TranzportControlProtocol::button_event_play_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_record_press (bool shifted)
+{
+ if (shifted) {
+ save_state ();
+ } else {
+ rec_enable_toggle ();
+ }
+}
+
+void
+TranzportControlProtocol::button_event_record_release (bool shifted)
+{
+}
+
+void
+TranzportControlProtocol::button_event_footswitch_press (bool shifted)
+{
+ if (shifted) {
+ next_marker (); // think this through, we could also do punch in
+ } else {
+ prev_marker (); // think this through, we could also do punch in
+ }
+}
+
+void
+TranzportControlProtocol::button_event_footswitch_release (bool shifted)
+{
+ if(session->transport_speed() == 0.0)
+ {
+ transport_play ();
+ }
+}
+
+// Possible new api example
+// tries harder to do the right thing if we somehow missed a button down event
+// which currently happens... a lot.
+
+void button_event_mute (bool pressed, bool shifted)
+{
+ static int was_pressed = 0;
+ if((!pressed && !was_pressed) || pressed) {
+ was_pressed = 1;
+ }
+
+ was_pressed = 0;
+}