]> git.sesse.net Git - nageru/commitdiff
Show how much would be queued before pressing play.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 14 Oct 2018 18:03:32 +0000 (20:03 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 14 Oct 2018 18:03:32 +0000 (20:03 +0200)
mainwindow.cpp

index 2fb897bb55e6e7215d9ee825010ac61594d1d910..559894271e8b9ed808ddb7ac7efcc06e34d405f5 100644 (file)
@@ -360,6 +360,21 @@ Clip MainWindow::live_player_get_next_clip()
        return clip.get();
 }
 
+static string format_duration(double t)
+{
+       int t_ms = lrint(t * 1e3);
+
+       int ms = t_ms % 1000;
+       t_ms /= 1000;
+       int s = t_ms % 60;
+       t_ms /= 60;
+       int m = t_ms;
+
+       char buf[256];
+       snprintf(buf, sizeof(buf), "%d:%02d.%03d", m, s, ms);
+       return buf;
+}
+
 void MainWindow::live_player_clip_progress(double played_this_clip, double total_length)
 {
        playlist_clips->set_currently_playing(playlist_clips->get_currently_playing(), played_this_clip / total_length);
@@ -369,17 +384,7 @@ void MainWindow::live_player_clip_progress(double played_this_clip, double total
                const Clip clip = *playlist_clips->clip(row);
                remaining += double(clip.pts_out - clip.pts_in) / TIMEBASE / 0.5;  // FIXME: stop hardcoding speed.
        }
-       int remaining_ms = lrint(remaining * 1e3);
-
-       int ms = remaining_ms % 1000;
-       remaining_ms /= 1000;
-       int s = remaining_ms % 60;
-       remaining_ms /= 60;
-       int m = remaining_ms;
-
-       char buf[256];
-       snprintf(buf, sizeof(buf), "%d:%02d.%03d left", m, s, ms);
-       set_output_status(buf);
+       set_output_status(format_duration(remaining) + " left");
 }
 
 void MainWindow::resizeEvent(QResizeEvent *event)
@@ -632,6 +637,17 @@ 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());
+
+       if (!any_selected) {
+               set_output_status("paused");
+       } else {
+               double remaining = 0.0;
+               for (int row = selected->selectedRows().front().row(); row < int(playlist_clips->size()); ++row) {
+                       const Clip clip = *playlist_clips->clip(row);
+                       remaining += double(clip.pts_out - clip.pts_in) / TIMEBASE / 0.5;  // FIXME: stop hardcoding speed.
+               }
+               set_output_status(format_duration(remaining) + " ready");
+       }
 }
 
 void MainWindow::clip_list_selection_changed(const QModelIndex &current, const QModelIndex &)