]> git.sesse.net Git - nageru/blobdiff - mainwindow.cpp
Fix some crashes.
[nageru] / mainwindow.cpp
index 74b67e4396f221ee552a1822f8e3a334792ea102..0b32e3d49840ff0c4f5a7f73f336e57bfc1f8be5 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "clip_list.h"
 #include "player.h"
+#include "post_to_main_thread.h"
 #include "ui_mainwindow.h"
 
 #include <string>
@@ -63,6 +64,11 @@ MainWindow::MainWindow()
 
        preview_player = new Player(ui->preview_display);
        live_player = new Player(ui->live_display);
+       live_player->set_done_callback([this]{
+               post_to_main_thread([this]{
+                       live_player_clip_done();
+               });
+       });
 }
 
 void MainWindow::queue_clicked()
@@ -86,6 +92,8 @@ void MainWindow::queue_clicked()
 
 void MainWindow::preview_clicked()
 {
+       if (cliplist_clips->empty()) return;
+
        QItemSelectionModel *selected = ui->clip_list->selectionModel();
        if (!selected->hasSelection()) {
                preview_player->play_clip(*cliplist_clips->back(), 0);
@@ -102,6 +110,8 @@ void MainWindow::preview_clicked()
 
 void MainWindow::play_clicked()
 {
+       if (playlist_clips->empty()) return;
+
        QItemSelectionModel *selected = ui->playlist->selectionModel();
        int row;
        if (!selected->hasSelection()) {
@@ -110,7 +120,34 @@ void MainWindow::play_clicked()
                row = selected->selectedRows(0)[0].row();
        }
 
-       const Clip &clip = *cliplist_clips->clip(row);
+       const Clip &clip = *playlist_clips->clip(row);
        live_player->play_clip(clip, clip.stream_idx);
        playlist_clips->set_currently_playing(row);
 }
+
+void MainWindow::live_player_clip_done()
+{
+       int row = playlist_clips->get_currently_playing();
+       if (row != -1 && row < int(playlist_clips->size()) - 1) {
+               ++row;
+               const Clip &clip = *playlist_clips->clip(row);
+               live_player->play_clip(clip, clip.stream_idx);
+               playlist_clips->set_currently_playing(row);
+       } else {
+               playlist_clips->set_currently_playing(-1);
+       }
+}
+
+void MainWindow::resizeEvent(QResizeEvent *event)
+{
+       QMainWindow::resizeEvent(event);
+
+       // Ask for a relayout, but only after the event loop is done doing relayout
+       // on everything else.
+       QMetaObject::invokeMethod(this, "relayout", Qt::QueuedConnection);
+}
+
+void MainWindow::relayout()
+{
+       ui->live_display->setMinimumHeight(ui->live_display->width() * 9 / 16);
+}