X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=clip_list.h;h=2d37eab4fda0959e23e004f78cdd4120523f6188;hb=076918036d80757e92d2512e2d0419b0bac97320;hp=e97f04f56ed91759f9110a127be88dbc2b09632c;hpb=93d9a81bcc73658f361d57cc67f0ffa32458534f;p=nageru diff --git a/clip_list.h b/clip_list.h index e97f04f..2d37eab 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. + int64_t pts_in = -1, pts_out = -1; // pts_in is inclusive, pts_out is exclusive. + std::string descriptions[NUM_CAMERAS]; unsigned stream_idx = 0; // For the playlist only. }; @@ -59,15 +61,17 @@ 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(); } bool empty() const { return clips.empty(); } - ClipProxy clip(size_t index) { return ClipProxy(clips[index], this, index); } + ClipProxy mutable_clip(size_t index) { return ClipProxy(clips[index], this, index); } const Clip *clip(size_t index) const { return &clips[index]; } - ClipProxy back() { return clip(size() - 1); } + ClipProxy mutable_back() { return mutable_clip(size() - 1); } const Clip *back() const { return clip(size() - 1); } void emit_data_changed(size_t row) override; @@ -96,18 +100,27 @@ 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); + + // is inclusive in all of these. + void duplicate_clips(size_t first, size_t last); + void erase_clips(size_t first, size_t last); + // is -1 to move upwards, +1 to move downwards. + void move_clips(size_t first, size_t last, int delta); + size_t size() const { return clips.size(); } bool empty() const { return clips.empty(); } - ClipProxy clip(size_t index) { return ClipProxy(clips[index], this, index); } + ClipProxy mutable_clip(size_t index) { return ClipProxy(clips[index], this, index); } const Clip *clip(size_t index) const { return &clips[index]; } - ClipProxy back() { return clip(size() - 1); } + ClipProxy mutable_back() { return mutable_clip(size() - 1); } const Clip *back() const { return clip(size() - 1); } - void set_currently_playing(int index); // -1 = none. + void set_currently_playing(int index, double progress); // -1 = none. int get_currently_playing() const { return currently_playing_index; } void emit_data_changed(size_t row) override; @@ -115,6 +128,7 @@ public: private: std::vector clips; int currently_playing_index = -1; + double play_progress = 0.0; }; #endif // !defined (_CLIP_LIST_H)