]> git.sesse.net Git - nageru/blobdiff - mainwindow.cpp
Make it possible to switch camera angles for previews with the 1–4 keys.
[nageru] / mainwindow.cpp
index 0a3b7dc7d3216aeaf327e2d54c7920c44e3d2ad2..67f58624d648fb7feff540daa8458fe074333f46 100644 (file)
@@ -38,27 +38,13 @@ MainWindow::MainWindow()
        ui->clip_list->viewport()->installEventFilter(this);
        ui->playlist->viewport()->installEventFilter(this);
 
-       // TODO: These are too big for lambdas.
        QShortcut *cue_in = new QShortcut(QKeySequence(Qt::Key_A), this);
        connect(cue_in, &QShortcut::activated, ui->cue_in_btn, &QPushButton::click);
-       connect(ui->cue_in_btn, &QPushButton::clicked, []{
-               if (!cliplist_clips->empty() && cliplist_clips->back()->pts_out < 0) {
-                       cliplist_clips->back()->pts_in = current_pts;
-                       return;
-               }
-               Clip clip;
-               clip.pts_in = current_pts;
-               cliplist_clips->add_clip(clip);
-       });
+       connect(ui->cue_in_btn, &QPushButton::clicked, this, &MainWindow::cue_in_clicked);
 
        QShortcut *cue_out = new QShortcut(QKeySequence(Qt::Key_S), this);
        connect(cue_out, &QShortcut::activated, ui->cue_out_btn, &QPushButton::click);
-       connect(ui->cue_out_btn, &QPushButton::clicked, []{
-               if (!cliplist_clips->empty()) {
-                       cliplist_clips->back()->pts_out = current_pts;
-                       // TODO: select the row in the clip list?
-               }
-       });
+       connect(ui->cue_out_btn, &QPushButton::clicked, this, &MainWindow::cue_out_clicked);
 
        QShortcut *queue = new QShortcut(QKeySequence(Qt::Key_Q), this);
        connect(queue, &QShortcut::activated, ui->queue_btn, &QPushButton::click);
@@ -72,6 +58,22 @@ MainWindow::MainWindow()
        connect(play, &QShortcut::activated, ui->play_btn, &QPushButton::click);
        connect(ui->play_btn, &QPushButton::clicked, this, &MainWindow::play_clicked);
 
+       QShortcut *preview_1 = new QShortcut(QKeySequence(Qt::Key_1), this);
+       connect(preview_1, &QShortcut::activated, ui->preview_1_btn, &QPushButton::click);
+       connect(ui->preview_1_btn, &QPushButton::clicked, [this]{ preview_angle_clicked(0); });
+
+       QShortcut *preview_2 = new QShortcut(QKeySequence(Qt::Key_2), this);
+       connect(preview_2, &QShortcut::activated, ui->preview_2_btn, &QPushButton::click);
+       connect(ui->preview_2_btn, &QPushButton::clicked, [this]{ preview_angle_clicked(1); });
+
+       QShortcut *preview_3 = new QShortcut(QKeySequence(Qt::Key_3), this);
+       connect(preview_3, &QShortcut::activated, ui->preview_3_btn, &QPushButton::click);
+       connect(ui->preview_3_btn, &QPushButton::clicked, [this]{ preview_angle_clicked(2); });
+
+       QShortcut *preview_4 = new QShortcut(QKeySequence(Qt::Key_4), this);
+       connect(preview_4, &QShortcut::activated, ui->preview_4_btn, &QPushButton::click);
+       connect(ui->preview_4_btn, &QPushButton::clicked, [this]{ preview_angle_clicked(3); });
+
        preview_player = new Player(ui->preview_display);
        live_player = new Player(ui->live_display);
        live_player->set_done_callback([this]{
@@ -81,6 +83,25 @@ MainWindow::MainWindow()
        });
 }
 
+void MainWindow::cue_in_clicked()
+{
+       if (!cliplist_clips->empty() && cliplist_clips->back()->pts_out < 0) {
+               cliplist_clips->back()->pts_in = current_pts;
+               return;
+       }
+       Clip clip;
+       clip.pts_in = current_pts;
+       cliplist_clips->add_clip(clip);
+}
+
+void MainWindow::cue_out_clicked()
+{
+       if (!cliplist_clips->empty()) {
+               cliplist_clips->back()->pts_out = current_pts;
+               // TODO: select the row in the clip list?
+       }
+}
+
 void MainWindow::queue_clicked()
 {
        QItemSelectionModel *selected = ui->clip_list->selectionModel();
@@ -118,6 +139,21 @@ void MainWindow::preview_clicked()
        }
 }
 
+void MainWindow::preview_angle_clicked(unsigned stream_idx)
+{
+       preview_player->override_angle(stream_idx);
+
+       // Change the selection if we were previewing a clip from the clip list.
+       // (The only other thing we could be showing is a pts scrub, and if so,
+       // that would be selected.)
+       QItemSelectionModel *selected = ui->clip_list->selectionModel();
+       if (selected->hasSelection()) {
+               QModelIndex cell = selected->selectedIndexes()[0];
+               int column = int(ClipList::Column::CAMERA_1) + stream_idx;
+               selected->setCurrentIndex(cell.sibling(cell.row(), column), QItemSelectionModel::ClearAndSelect);
+       }
+}
+
 void MainWindow::play_clicked()
 {
        if (playlist_clips->empty()) return;