]> git.sesse.net Git - nageru/commitdiff
Support editing descriptions.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 16 Jun 2018 19:09:03 +0000 (21:09 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 16 Jun 2018 19:25:02 +0000 (21:25 +0200)
clip_list.cpp
clip_list.h
defs.h

index 39dbe9ba0e060a9ae0393bc06eaf2bb1a8a81f59..cdf97807e3213a35e7a149fb4a3dbc9adbfd5d21 100644 (file)
@@ -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());
index e97f04f56ed91759f9110a127be88dbc2b09632c..9db4d07bf6ddfc0bca414472a912c88eaf5d8530 100644 (file)
@@ -8,9 +8,11 @@
 #include <vector>
 #include <string>
 
+#include "defs.h"
+
 struct Clip {
        int64_t pts_in = -1, pts_out = -1;
-       std::vector<std::string> 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 058b2dea4508357e0b6f41d70d370c6dc6231351..9d11750a43d86cb9564b88fd6bf0037e704ae19b 100644 (file)
--- 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)