]> git.sesse.net Git - kdenlive/blobdiff - src/keyframeedit.h
Improve keyframe editor (keyframe value can now be adjusted with mouse wheel)
[kdenlive] / src / keyframeedit.h
index e9bca17bf76d55d9f1e011a4a1af922854198749..82621c80048c962dd962267007464949ca8587fc 100644 (file)
 
 #include <QWidget>
 #include <QDomElement>
+#include <QItemDelegate>
+#include <QAbstractItemView>
+#include <QSpinBox>
 
 
 #include "ui_keyframeeditor_ui.h"
 #include "definitions.h"
 #include "keyframehelper.h"
 
-//class QGraphicsScene;
+class KeyItemDelegate: public QItemDelegate
+{
+    Q_OBJECT
+public:
+    KeyItemDelegate(int min, int max, QAbstractItemView* parent = 0): QItemDelegate(parent), m_min(min), m_max(max) {
+    }
+
+    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const {
+        if (index.column() == 1) {
+            QSpinBox *spin = new QSpinBox(parent);
+            connect(spin, SIGNAL(valueChanged(int)), this, SLOT(commitEditorData()));
+            connect(spin, SIGNAL(editingFinished()), this, SLOT(commitAndCloseEditor()));
+            return spin;
+        } else return QItemDelegate::createEditor(parent, option, index);
+    }
+
+
+    void setEditorData(QWidget *editor, const QModelIndex &index) const {
+        if (index.column() == 1) {
+            QSpinBox *spin = qobject_cast< QSpinBox* >(editor);
+            spin->setRange(m_min, m_max);
+            spin->setValue(index.model()->data(index).toInt());
+        } else QItemDelegate::setEditorData(editor, index);
+    }
+
+private slots:
+    void commitAndCloseEditor() {
+        QSpinBox *spin = qobject_cast< QSpinBox* >(sender());
+        emit closeEditor(spin);
+    }
+
+    void commitEditorData() {
+        QSpinBox *spin = qobject_cast< QSpinBox* >(sender());
+        emit commitData(spin);
+    }
+
+private:
+    int m_min;
+    int m_max;
+};
 
 class KeyframeEdit : public QWidget
 {
     Q_OBJECT
 public:
-    explicit KeyframeEdit(QDomElement e, int max, Timecode tc, QWidget* parent = 0);
+    explicit KeyframeEdit(QDomElement e, int maxFrame, int minVal, int maxVal, Timecode tc, QWidget* parent = 0);
     void setupParam(QDomElement e = QDomElement());
 
 private:
     Ui::KeyframeEditor_UI m_ui;
     QDomElement m_param;
     int m_max;
+    int m_minVal;
+    int m_maxVal;
     Timecode m_timecode;
     int m_previousPos;