X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fmainwindow.cpp;h=189102b88cdf63e8659e8c1fe7e75de5ab95510a;hb=686a02a3ffed47c099c1d91d95d0d90e222d297d;hp=23a286b0530ba4304d3e8b070424b6d26d1941d7;hpb=b7a32af3a037f9fa70cf54f992314f68279c1204;p=nageru diff --git a/futatabi/mainwindow.cpp b/futatabi/mainwindow.cpp index 23a286b..189102b 100644 --- a/futatabi/mainwindow.cpp +++ b/futatabi/mainwindow.cpp @@ -203,6 +203,12 @@ MainWindow::MainWindow() playlist_selection_changed(); // First time set-up. preview_player.reset(new Player(ui->preview_display, Player::NO_STREAM_OUTPUT)); + preview_player->set_done_callback([this] { + post_to_main_thread([this] { + preview_player_done(); + }); + }); + live_player.reset(new Player(ui->live_display, Player::HTTPD_STREAM_OUTPUT)); live_player->set_done_callback([this] { post_to_main_thread([this] { @@ -393,6 +399,8 @@ void MainWindow::preview_clicked() QModelIndex index = selected->currentIndex(); const Clip &clip = *playlist_clips->clip(index.row()); preview_player->play(clip); + preview_playing = true; + enable_or_disable_preview_button(); return; } } @@ -403,6 +411,8 @@ void MainWindow::preview_clicked() QItemSelectionModel *selected = ui->clip_list->selectionModel(); if (!selected->hasSelection()) { preview_player->play(*cliplist_clips->back()); + preview_playing = true; + enable_or_disable_preview_button(); return; } @@ -414,6 +424,8 @@ void MainWindow::preview_clicked() clip.stream_idx = ui->preview_display->get_stream_idx(); } preview_player->play(clip); + preview_playing = true; + enable_or_disable_preview_button(); } void MainWindow::preview_angle_clicked(unsigned stream_idx) @@ -603,16 +615,11 @@ void MainWindow::lock_blink_timer_expired() void MainWindow::play_clicked() { - if (playlist_clips->empty()) - return; - QItemSelectionModel *selected = ui->playlist->selectionModel(); - unsigned start_row; if (!selected->hasSelection()) { - start_row = 0; - } else { - start_row = selected->selectedRows(0)[0].row(); + return; } + unsigned start_row = selected->selectedRows(0)[0].row(); vector clips; for (unsigned row = start_row; row < playlist_clips->size(); ++row) { @@ -621,9 +628,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() @@ -634,6 +640,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) @@ -652,11 +659,17 @@ void MainWindow::speed_lock_clicked() lock_blink_timeout->stop(); } +void MainWindow::preview_player_done() +{ + preview_playing = false; + enable_or_disable_preview_button(); +} + 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) @@ -895,8 +908,14 @@ void MainWindow::playlist_selection_changed() ui->playlist_move_down_btn->setEnabled( any_selected && selected->selectedRows().back().row() < int(playlist_clips->size()) - 1); - ui->play_btn->setEnabled(!playlist_clips->empty()); - midi_mapper.set_play_enabled(!playlist_clips->empty()); + ui->play_btn->setEnabled(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"); @@ -1131,14 +1150,18 @@ void MainWindow::enable_or_disable_preview_button() QItemSelectionModel *selected = ui->playlist->selectionModel(); if (selected->hasSelection()) { ui->preview_btn->setEnabled(true); - midi_mapper.set_preview_enabled(true); + midi_mapper.set_preview_enabled(preview_playing ? MIDIMapper::On : MIDIMapper::Blinking); return; } } // TODO: Perhaps only enable this if something is actually selected. ui->preview_btn->setEnabled(!cliplist_clips->empty()); - midi_mapper.set_preview_enabled(!cliplist_clips->empty()); + if (preview_playing) { + midi_mapper.set_preview_enabled(MIDIMapper::On); + } else { + midi_mapper.set_preview_enabled(cliplist_clips->empty() ? MIDIMapper::Off : MIDIMapper::Blinking); + } } void MainWindow::enable_or_disable_queue_button()