]> git.sesse.net Git - nageru/blobdiff - clip_list.cpp
Support editing descriptions.
[nageru] / clip_list.cpp
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());