X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fmainwindow.cpp;h=dfc2ea5b2ec5514158d4f11bad9d684574ed1342;hb=refs%2Fheads%2Faudio-delay;hp=9b6b47845a46b62b2549eeb2dddd71c127f6ecd0;hpb=9966c32542c522588e3aee2e8089f42ec485e06f;p=nageru diff --git a/futatabi/mainwindow.cpp b/futatabi/mainwindow.cpp index 9b6b478..dfc2ea5 100644 --- a/futatabi/mainwindow.cpp +++ b/futatabi/mainwindow.cpp @@ -246,7 +246,7 @@ MainWindow::MainWindow() live_player_done(); }); }); - live_player->set_progress_callback([this](const map &progress, double time_remaining) { + live_player->set_progress_callback([this](const map &progress, TimeRemaining time_remaining) { post_to_main_thread([this, progress, time_remaining] { live_player_clip_progress(progress, time_remaining); }); @@ -289,7 +289,7 @@ MainWindow::MainWindow() if (!load_midi_mapping_from_file(global_flags.midi_mapping_filename, &midi_mapping)) { fprintf(stderr, "Couldn't load MIDI mapping '%s'; exiting.\n", global_flags.midi_mapping_filename.c_str()); - exit(1); + abort(); } midi_mapper.set_midi_mapping(midi_mapping); } @@ -424,11 +424,9 @@ void MainWindow::queue_clicked() if (!selected->hasSelection()) { Clip clip = *cliplist_clips->back(); clip.stream_idx = 0; - if (clip.pts_out != -1) { - playlist_clips->add_clip(clip); - playlist_selection_changed(); - ui->playlist->scrollToBottom(); - } + playlist_clips->add_clip(clip); + playlist_selection_changed(); + ui->playlist->scrollToBottom(); return; } @@ -440,15 +438,13 @@ void MainWindow::queue_clicked() clip.stream_idx = ui->preview_display->get_stream_idx(); } - if (clip.pts_out != -1) { - playlist_clips->add_clip(clip); - playlist_selection_changed(); - ui->playlist->scrollToBottom(); - if (!ui->playlist->selectionModel()->hasSelection()) { - // TODO: Figure out why this doesn't always seem to actually select the row. - QModelIndex bottom = playlist_clips->index(playlist_clips->size() - 1, 0); - ui->playlist->setCurrentIndex(bottom); - } + playlist_clips->add_clip(clip); + playlist_selection_changed(); + ui->playlist->scrollToBottom(); + if (!ui->playlist->selectionModel()->hasSelection()) { + // TODO: Figure out why this doesn't always seem to actually select the row. + QModelIndex bottom = playlist_clips->index(playlist_clips->size() - 1, 0); + ui->playlist->setCurrentIndex(bottom); } } @@ -487,6 +483,9 @@ void MainWindow::preview_clicked() } else { clip.stream_idx = ui->preview_display->get_stream_idx(); } + if (clip.pts_out == -1) { + clip.pts_out = clip.pts_in + int64_t(TIMEBASE) * 86400 * 7; // One week; effectively infinite, but without overflow issues. + } preview_player->play(clip); preview_playing = true; enable_or_disable_preview_button(); @@ -688,7 +687,11 @@ void MainWindow::play_clicked() vector clips; for (unsigned row = start_row; row < playlist_clips->size(); ++row) { - clips.emplace_back(*playlist_clips->clip_with_id(row)); + ClipWithID clip = *playlist_clips->clip_with_id(row); + if (clip.clip.pts_out == -1) { + clip.clip.pts_out = clip.clip.pts_in + int64_t(TIMEBASE) * 86400 * 7; // One week; effectively infinite, but without overflow issues. + } + clips.emplace_back(clip); } live_player->play(clips); playlist_clips->set_progress({ { start_row, 0.0f } }); @@ -743,7 +746,7 @@ void MainWindow::live_player_done() playlist_selection_changed(); } -void MainWindow::live_player_clip_progress(const map &progress, double time_remaining) +void MainWindow::live_player_clip_progress(const map &progress, TimeRemaining time_remaining) { playlist_clips->set_progress(progress); set_output_status(format_duration(time_remaining) + " left"); @@ -841,6 +844,11 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) if (mouse->modifiers() & Qt::KeyboardModifier::ShiftModifier) { scrub_sensitivity *= 10; wheel_sensitivity *= 10; + if (mouse->modifiers() & Qt::KeyboardModifier::ControlModifier) { + // Ctrl+Shift is a super-modifier, meant only for things like “go back two hours”. + scrub_sensitivity *= 100; + wheel_sensitivity *= 100; + } } if (mouse->modifiers() & Qt::KeyboardModifier::AltModifier) { // Note: Shift + Alt cancel each other out. scrub_sensitivity /= 10; @@ -896,6 +904,11 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) if (wheel->modifiers() & Qt::KeyboardModifier::ShiftModifier) { scrub_sensitivity *= 10; wheel_sensitivity *= 10; + if (wheel->modifiers() & Qt::KeyboardModifier::ControlModifier) { + // Ctrl+Shift is a super-modifier, meant only for things like “go back two hours”. + scrub_sensitivity *= 100; + wheel_sensitivity *= 100; + } } if (wheel->modifiers() & Qt::KeyboardModifier::AltModifier) { // Note: Shift + Alt cancel each other out. scrub_sensitivity /= 10; @@ -1009,7 +1022,7 @@ void MainWindow::playlist_selection_changed() for (size_t row = selected->selectedRows().front().row(); row < playlist_clips->size(); ++row) { clips.emplace_back(*playlist_clips->clip_with_id(row)); } - double remaining = compute_total_time(clips); + TimeRemaining remaining = compute_total_time(clips); set_output_status(format_duration(remaining) + " ready"); } } @@ -1279,15 +1292,7 @@ void MainWindow::enable_or_disable_queue_button() if (cliplist_clips->empty()) { enabled = false; } else { - QItemSelectionModel *selected = ui->clip_list->selectionModel(); - if (!selected->hasSelection()) { - Clip clip = *cliplist_clips->back(); - enabled = clip.pts_out != -1; - } else { - QModelIndex index = selected->currentIndex(); - Clip clip = *cliplist_clips->clip(index.row()); - enabled = clip.pts_out != -1; - } + enabled = true; } ui->queue_btn->setEnabled(enabled);