]> git.sesse.net Git - nageru/commitdiff
Allow playing from the playlist.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 13 Jun 2018 17:44:45 +0000 (19:44 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 13 Jun 2018 17:44:45 +0000 (19:44 +0200)
clip_list.cpp
clip_list.h
mainwindow.cpp
mainwindow.h

index 0d9fc6c66e49c97a35b30e4b44be25ceac667467..5602d90e6376f51c265d6e2e95163a07a53153e0 100644 (file)
@@ -32,23 +32,48 @@ QVariant ClipList::data(const QModelIndex &parent, int role) const {
        if (size_t(row) >= clips.size())
                return QVariant();
 
-       switch (column) {
-       case 0:
-               return qlonglong(clips[row].pts_in);
-       case 1:
-               if (clips[row].pts_out >= 0) {
-                       return qlonglong(clips[row].pts_out);
-               } else {
-                       return QVariant();
+       if (display_type == ListDisplay::CLIP_LIST) {
+               switch (ClipListColumn(column)) {
+               case ClipListColumn::IN:
+                       return qlonglong(clips[row].pts_in);
+               case ClipListColumn::OUT:
+                       if (clips[row].pts_out >= 0) {
+                               return qlonglong(clips[row].pts_out);
+                       } else {
+                               return QVariant();
+                       }
+               case ClipListColumn::DURATION:
+                       if (clips[row].pts_out >= 0) {
+                               return qlonglong(clips[row].pts_out - clips[row].pts_in);
+                       } else {
+                               return QVariant();
+                       }
+               default:
+                       return "";
                }
-       case 2:
-               if (clips[row].pts_out >= 0) {
-                       return qlonglong(clips[row].pts_out - clips[row].pts_in);
-               } else {
-                       return QVariant();
+       } else {
+               switch (PlayListColumn(column)) {
+               case PlayListColumn::PLAYING:
+                       return (row == currently_playing_index) ? "→" : "";
+               case PlayListColumn::IN:
+                       return qlonglong(clips[row].pts_in);
+               case PlayListColumn::OUT:
+                       if (clips[row].pts_out >= 0) {
+                               return qlonglong(clips[row].pts_out);
+                       } else {
+                               return QVariant();
+                       }
+               case PlayListColumn::DURATION:
+                       if (clips[row].pts_out >= 0) {
+                               return qlonglong(clips[row].pts_out - clips[row].pts_in);
+                       } else {
+                               return QVariant();
+                       }
+               case PlayListColumn::CAMERA:
+                       return qlonglong(clips[row].stream_idx + 1);
+               default:
+                       return "";
                }
-       default:
-               return QVariant();
        }
 }
 
@@ -79,6 +104,8 @@ QVariant ClipList::headerData(int section, Qt::Orientation orientation, int role
                }
        } else {
                switch (PlayListColumn(section)) {
+               case PlayListColumn::PLAYING:
+                       return "";
                case PlayListColumn::IN:
                        return "In";
                case PlayListColumn::OUT:
@@ -110,3 +137,17 @@ void ClipList::emit_data_changed(size_t row)
                emit dataChanged(index(row, 0), index(row, int(PlayListColumn::NUM_COLUMNS)));
        }
 }
+
+void ClipList::set_currently_playing(int index)
+{
+       int old_index = currently_playing_index;
+       if (index != old_index) {
+               currently_playing_index = index;
+               if (old_index != -1) {
+                       emit_data_changed(old_index);
+               }
+               if (index != -1) {
+                       emit_data_changed(index);
+               }
+       }
+}
index ddb4a4a7d862f24e2f91c91a7d078e225675df3e..851f86a1296d818005984dae117cf9ad7d13dbc2 100644 (file)
@@ -36,6 +36,7 @@ public:
                NUM_COLUMNS
        };
        enum class PlayListColumn {
+               PLAYING,
                IN,
                OUT,
                DURATION,
@@ -78,11 +79,14 @@ public:
        ClipProxy back() { return clip(size() - 1); }
        const Clip *back() const { return clip(size() - 1); }
 
+       void set_currently_playing(int index);  // -1 = none. Only makes sense for the playlist.
+
        void emit_data_changed(size_t row);
 
 private:
        std::vector<Clip> clips;
        ListDisplay display_type;
+       int currently_playing_index = -1;
 };
 
 #endif  // !defined (_CLIP_LIST_H)
index aba38db9f734a202f87a9aa6aa4f2c280ee81916..74b67e4396f221ee552a1822f8e3a334792ea102 100644 (file)
@@ -62,6 +62,7 @@ MainWindow::MainWindow()
        connect(ui->play_btn, &QPushButton::clicked, this, &MainWindow::play_clicked);
 
        preview_player = new Player(ui->preview_display);
+       live_player = new Player(ui->live_display);
 }
 
 void MainWindow::queue_clicked()
@@ -102,8 +103,14 @@ void MainWindow::preview_clicked()
 void MainWindow::play_clicked()
 {
        QItemSelectionModel *selected = ui->playlist->selectionModel();
+       int row;
        if (!selected->hasSelection()) {
-               ui->playlist->selectRow(0);
-               return;
+               row = 0;
+       } else {
+               row = selected->selectedRows(0)[0].row();
        }
+
+       const Clip &clip = *cliplist_clips->clip(row);
+       live_player->play_clip(clip, clip.stream_idx);
+       playlist_clips->set_currently_playing(row);
 }
index 583f0e2ebe28033ae659d7d12c756bbec9b8dc83..e9b8dc14ee1942f88387f57bf858e586bca3f519 100644 (file)
@@ -22,7 +22,7 @@ public:
        Ui::MainWindow *ui;
 
 private:
-       Player *preview_player;
+       Player *preview_player, *live_player;
 
        void queue_clicked();
        void preview_clicked();