From 4ee7c0cbe14d845a4174852e0fb10292763a5a88 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 16 Jun 2018 21:09:03 +0200 Subject: [PATCH] Support editing descriptions. --- clip_list.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ clip_list.h | 6 +++++- defs.h | 3 ++- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/clip_list.cpp b/clip_list.cpp index 39dbe9b..cdf9780 100644 --- a/clip_list.cpp +++ b/clip_list.cpp @@ -97,6 +97,13 @@ QVariant ClipList::data(const QModelIndex &parent, int role) const { } else { return QVariant(); } + case Column::CAMERA_1: + case Column::CAMERA_2: + case Column::CAMERA_3: + case Column::CAMERA_4: { + unsigned stream_idx = column - int(Column::CAMERA_1); + return QString::fromStdString(clips[row].descriptions[stream_idx]); + } default: return ""; } @@ -146,6 +153,8 @@ QVariant PlayList::data(const QModelIndex &parent, int role) const { } case Column::CAMERA: return qlonglong(clips[row].stream_idx + 1); + case Column::DESCRIPTION: + return QString::fromStdString(clips[row].descriptions[clips[row].stream_idx]); default: return ""; } @@ -201,6 +210,50 @@ QVariant PlayList::headerData(int section, Qt::Orientation orientation, int role } } +Qt::ItemFlags ClipList::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; + const int row = index.row(), column = index.column(); + if (size_t(row) >= clips.size()) + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; + + switch (Column(column)) { + case Column::CAMERA_1: + case Column::CAMERA_2: + case Column::CAMERA_3: + case Column::CAMERA_4: + return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsDragEnabled; + default: + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; + } +} + +bool ClipList::setData(const QModelIndex &index, const QVariant &value, int role) +{ + if (!index.isValid() || role != Qt::EditRole) { + return false; + } + + const int row = index.row(), column = index.column(); + if (size_t(row) >= clips.size()) + return false; + + switch (Column(column)) { + case Column::CAMERA_1: + case Column::CAMERA_2: + case Column::CAMERA_3: + case Column::CAMERA_4: { + unsigned stream_idx = column - int(Column::CAMERA_1); + clips[row].descriptions[stream_idx] = value.toString().toStdString(); + emit_data_changed(row); + return true; + } + default: + return false; + } +} + void ClipList::add_clip(const Clip &clip) { beginInsertRows(QModelIndex(), clips.size(), clips.size()); diff --git a/clip_list.h b/clip_list.h index e97f04f..9db4d07 100644 --- a/clip_list.h +++ b/clip_list.h @@ -8,9 +8,11 @@ #include #include +#include "defs.h" + struct Clip { int64_t pts_in = -1, pts_out = -1; - std::vector descriptions; // One per camera. + std::string descriptions[NUM_CAMERAS]; unsigned stream_idx = 0; // For the playlist only. }; @@ -59,6 +61,8 @@ public: int columnCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &parent, int role) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; void add_clip(const Clip &clip); size_t size() const { return clips.size(); } diff --git a/defs.h b/defs.h index 058b2de..9d11750 100644 --- a/defs.h +++ b/defs.h @@ -2,6 +2,7 @@ #define _DEFS_H 1 #define MAX_STREAMS 16 -#define CACHE_SIZE 1000 +#define CACHE_SIZE 1000 // In number of frames. +#define NUM_CAMERAS 4 #endif // !defined(_DEFS_H) -- 2.39.2