]> git.sesse.net Git - kdenlive/blobdiff - src/dragvalue.h
Fix on-monitor controls in corners effect shifted when clip is cropped from start
[kdenlive] / src / dragvalue.h
index 9fc3543cc065904357176f0873c8f86255c6f1fc..53adb2b8b3e639c2785584eb463e2283807ef50f 100644 (file)
 #define DRAGVALUE_H_
 
 #include <QWidget>
+#include <kselectaction.h>
+#include <QSpinBox>
+#include <QDoubleSpinBox>
+#include <QLabel>
+#include <QProgressBar>
 
 class QValidator;
 class QToolButton;
 class QLineEdit;
 class QAction;
 class QMenu;
+class KSelectAction;
+
+
+class CustomLabel : public QProgressBar
+{
+    Q_OBJECT
+public:
+    CustomLabel(const QString &label, bool showSlider = true, int precision = 0, QWidget *parent = 0);
+    void setProgressValue(double value);
+    void setStep(double step);
+    
+protected:
+    //virtual void mouseDoubleClickEvent(QMouseEvent * event);
+    virtual void mousePressEvent(QMouseEvent * event);
+    virtual void mouseReleaseEvent(QMouseEvent *event);
+    virtual void mouseMoveEvent(QMouseEvent *event);
+    //virtual void paintEvent(QPaintEvent *event);
+    virtual void wheelEvent(QWheelEvent * event);
+
+private:
+    QPoint m_dragStartPosition;
+    QPoint m_dragLastPosition;
+    bool m_dragMode;
+    double m_step;
+    bool m_showSlider;
+    double m_precision;
+    double m_value;
+    void slotValueInc(double factor = 1);
+    void slotValueDec(double factor = 1);
+    void setNewValue(double, bool);
+    
+signals:
+    void valueChanged(double, bool);
+    void setInTimeline();
+    void resetValue();
+};
 
 /**
  * @brief A widget for modifing numbers by dragging, using the mouse wheel or entering them with the keyboard.
@@ -36,7 +77,7 @@ class DragValue : public QWidget
     Q_OBJECT
 
 public:
-    DragValue(QWidget* parent = 0);
+    DragValue(const QString &label, double defaultValue, int decimals, int id, const QString suffix, bool showSlider = true, QWidget* parent = 0);
     virtual ~DragValue();
 
     /** @brief Returns the precision = number of decimals */
@@ -59,14 +100,23 @@ public:
 
     /** @brief Returns the current value */
     qreal value() const;
+    /** @brief Change the "inTimeline" property to paint the intimeline widget differently. */
+    void setInTimelineProperty(bool intimeline);
+    /** @brief Returns minimum size for QSpinBox, used to set all spinboxes to the same width. */
+    int spinSize();
+    /** @brief Sets the minimum size for QSpinBox, used to set all spinboxes to the same width. */
+    void setSpinSize(int width);
     
 public slots:
     /** @brief Sets the value (forced to be in the valid range) and emits valueChanged. */
-    void setValue(qreal value, bool final = true);
+    void setValue(double value, bool final = true);
+    /** @brief Resets to default value */
+    void slotReset();
 
 signals:
-    void valueChanged(qreal value, bool final);
-
+    void valueChanged(int value, bool final = true);
+    void valueChanged(double value, bool final = true);
+    void inTimeline(int);
 
 
 
@@ -75,39 +125,39 @@ signals:
      */
 
 protected:
-    virtual void mousePressEvent(QMouseEvent *e);
+    /*virtual void mousePressEvent(QMouseEvent *e);
     virtual void mouseMoveEvent(QMouseEvent *e);
-    virtual void mouseReleaseEvent(QMouseEvent *e);
+    virtual void mouseReleaseEvent(QMouseEvent *e);*/
     /** @brief Forwards tab focus to lineedit since it is disabled. */
     virtual void focusInEvent(QFocusEvent *e);
     //virtual void keyPressEvent(QKeyEvent *e);
-    virtual void wheelEvent(QWheelEvent *e);
+    //virtual void wheelEvent(QWheelEvent *e);
+    //virtual void paintEvent( QPaintEvent * event );
 
 private slots:
-    void slotValueInc();
-    void slotValueDec();
+
     void slotEditingFinished();
 
-    void slotSetNonlinearScale(bool nonlinear);
+    void slotSetScaleMode(int mode);
     void slotSetDirectUpdate(bool directUpdate);
     void slotShowContextMenu(const QPoint &pos);
+    void slotSetValue(int value);
+    void slotSetValue(double value);
+    void slotSetInTimeline();
 
 private:
-    qreal m_maximum;
-    qreal m_minimum;
-    int m_precision;
-    qreal m_step;
-    QLineEdit *m_edit;
-    QPoint m_dragStartPosition;
-    QPoint m_dragLastPosition;
-    bool m_dragMode;
+    double m_maximum;
+    double m_minimum;
+    int m_decimals;
+    double m_default;
+    int m_id;
+    QSpinBox *m_intEdit;
+    QDoubleSpinBox *m_doubleEdit;
 
     QMenu *m_menu;
-    QAction *m_nonlinearScale;
+    KSelectAction *m_scale;
     QAction *m_directUpdate;
-
-    /** @brief Sets the maximum width of the widget so that there is enough space for the widest possible value. */
-    void updateMaxWidth();
+    CustomLabel *m_label;
 };
 
 #endif