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();
}
}
}
} else {
switch (PlayListColumn(section)) {
+ case PlayListColumn::PLAYING:
+ return "";
case PlayListColumn::IN:
return "In";
case PlayListColumn::OUT:
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);
+ }
+ }
+}
NUM_COLUMNS
};
enum class PlayListColumn {
+ PLAYING,
IN,
OUT,
DURATION,
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)
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()
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);
}