From fcae09355c1a00a68015b3d727339aebd2e52aa4 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Thu, 17 Jan 2019 01:05:43 +0100 Subject: [PATCH] Make the MIDI play button blinking when something is ready to play, and solid when actually playing. --- futatabi/behringer_cmd_pl1.midimapping | 3 ++- futatabi/futatabi_midi_mapping.proto | 3 ++- futatabi/mainwindow.cpp | 14 ++++++++++---- futatabi/midi_mapper.cpp | 6 ++++-- futatabi/midi_mapper.h | 4 ++-- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/futatabi/behringer_cmd_pl1.midimapping b/futatabi/behringer_cmd_pl1.midimapping index 23da40b..a3a2c64 100644 --- a/futatabi/behringer_cmd_pl1.midimapping +++ b/futatabi/behringer_cmd_pl1.midimapping @@ -20,7 +20,8 @@ camera: { button: { note_number: 23 } is_current: { note_number: 23 } } # Play is naturally mapped to the play button. play: { note_number: 35 } -play_enabled: { note_number: 35 } +play_ready: { note_number: 35 velocity: 2 } +playing: { note_number: 35 } # Queue is marked to Cue; close enough. queue: { note_number: 34 } diff --git a/futatabi/futatabi_midi_mapping.proto b/futatabi/futatabi_midi_mapping.proto index 31b731e..38430fc 100644 --- a/futatabi/futatabi_midi_mapping.proto +++ b/futatabi/futatabi_midi_mapping.proto @@ -43,7 +43,8 @@ message MIDIMappingProto { optional MIDIButtonProto play = 24; optional int32 play_bank = 25; - optional MIDILightProto play_enabled = 26; + optional MIDILightProto playing = 26; + optional MIDILightProto play_ready = 40; optional MIDIButtonProto toggle_lock = 36; optional int32 toggle_lock_bank = 37; diff --git a/futatabi/mainwindow.cpp b/futatabi/mainwindow.cpp index 3ecab3f..11419c7 100644 --- a/futatabi/mainwindow.cpp +++ b/futatabi/mainwindow.cpp @@ -616,9 +616,8 @@ void MainWindow::play_clicked() live_player->play(clips); playlist_clips->set_progress({ { start_row, 0.0f } }); ui->playlist->selectionModel()->clear(); - playlist_selection_changed(); - ui->stop_btn->setEnabled(true); + playlist_selection_changed(); } void MainWindow::stop_clicked() @@ -629,6 +628,7 @@ void MainWindow::stop_clicked() playlist_clips->set_progress({}); live_player->play(fake_clip); ui->stop_btn->setEnabled(false); + playlist_selection_changed(); } void MainWindow::speed_slider_changed(int percent) @@ -649,9 +649,9 @@ void MainWindow::speed_lock_clicked() void MainWindow::live_player_done() { - playlist_selection_changed(); playlist_clips->set_progress({}); ui->stop_btn->setEnabled(false); + playlist_selection_changed(); } void MainWindow::live_player_clip_progress(const map &progress, double time_remaining) @@ -891,7 +891,13 @@ void MainWindow::playlist_selection_changed() any_selected && selected->selectedRows().back().row() < int(playlist_clips->size()) - 1); ui->play_btn->setEnabled(any_selected); - midi_mapper.set_play_enabled(any_selected); + if (ui->stop_btn->isEnabled()) { // Playing. + midi_mapper.set_play_enabled(MIDIMapper::On); + } else if (any_selected) { + midi_mapper.set_play_enabled(MIDIMapper::Blinking); + } else { + midi_mapper.set_play_enabled(MIDIMapper::Off); + } if (!any_selected) { set_output_status("paused"); diff --git a/futatabi/midi_mapper.cpp b/futatabi/midi_mapper.cpp index 061dd2d..63b21e4 100644 --- a/futatabi/midi_mapper.cpp +++ b/futatabi/midi_mapper.cpp @@ -228,8 +228,10 @@ void MIDIMapper::update_lights_lock_held() if (queue_enabled_light) { activate_mapped_light(*mapping_proto, MIDIMappingProto::kQueueEnabledFieldNumber, &active_lights); } - if (play_enabled_light) { - activate_mapped_light(*mapping_proto, MIDIMappingProto::kPlayEnabledFieldNumber, &active_lights); + if (play_enabled_light == On) { // Playing. + activate_mapped_light(*mapping_proto, MIDIMappingProto::kPlayingFieldNumber, &active_lights); + } else if (play_enabled_light == Blinking) { // Play ready. + activate_mapped_light(*mapping_proto, MIDIMappingProto::kPlayReadyFieldNumber, &active_lights); } if (locked_light == On) { activate_mapped_light(*mapping_proto, MIDIMappingProto::kLockedFieldNumber, &active_lights); diff --git a/futatabi/midi_mapper.h b/futatabi/midi_mapper.h index abaadaf..2240e70 100644 --- a/futatabi/midi_mapper.h +++ b/futatabi/midi_mapper.h @@ -71,7 +71,7 @@ public: queue_enabled_light = enabled; refresh_lights(); } - void set_play_enabled(bool enabled) { + void set_play_enabled(LightState enabled) { play_enabled_light = enabled; refresh_lights(); } @@ -108,7 +108,7 @@ private: std::atomic preview_enabled_light{false}; std::atomic queue_enabled_light{false}; - std::atomic play_enabled_light{false}; + std::atomic play_enabled_light{Off}; std::atomic locked_light{On}; std::atomic current_highlighted_camera{-1}; -- 2.39.2