]> git.sesse.net Git - nageru/blobdiff - clip_list.h
Hook up some more clip modifications.
[nageru] / clip_list.h
index adf3748aec8ba96da394f92aae61fc5a0e14d7d8..cb58564b33a47ea42b818842d022f011b775ddeb 100644 (file)
@@ -22,8 +22,35 @@ public:
        QVariant data(const QModelIndex &parent, int role) const override;
        QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
 
-       void add_clip(int64_t pts_in);
+       void add_clip(const Clip &clip);
        size_t size() const { return clips.size(); }
+       bool empty() const { return clips.empty(); }
+
+       // Like a smart pointer to a Clip, but emits dataChanged when it goes out of scope.
+       struct ClipProxy {
+       public:
+               ClipProxy(Clip &clip, ClipList *clip_list, size_t row)
+                       : clip(clip), clip_list(clip_list), row(row) {}
+               ~ClipProxy() {
+                       if (clip_list != nullptr) {
+                               clip_list->emit_data_changed(row);
+                       }
+               }
+               Clip *operator->() { return &clip; }
+
+       private:
+               Clip &clip;
+               ClipList *clip_list;
+               size_t row;
+       };
+
+       ClipProxy 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); }
+       const Clip *back() const { return clip(size() - 1); }
+
+       void emit_data_changed(size_t row);
 
 private:
        std::vector<Clip> clips;