]> git.sesse.net Git - kdenlive/blobdiff - src/dragvalue.h
Const'ref
[kdenlive] / src / dragvalue.h
index 5c8b4f5a2bf693ee3fbfc4c6455d9c013888cccd..2ca950ed668124506310b2b0b75c6f330b363eec 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:
+    explicit CustomLabel(const QString &label, bool showSlider = true, int range = 1000, QWidget *parent = 0);
+    void setProgressValue(double value);
+    void setStep(double step);
+    
+protected:
+    //virtual void mouseDoubleClickEvent(QMouseEvent * event);
+    void mousePressEvent(QMouseEvent * event);
+    void mouseReleaseEvent(QMouseEvent *event);
+    void mouseMoveEvent(QMouseEvent *event);
+    //virtual void paintEvent(QPaintEvent *event);
+    void wheelEvent(QWheelEvent * event);
+    void focusInEvent(QFocusEvent *e);
+    void focusOutEvent(QFocusEvent *e);
+
+private:
+    QPoint m_dragStartPosition;
+    QPoint m_dragLastPosition;
+    bool m_dragMode;
+    bool m_showSlider;
+    double m_step;
+    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.
@@ -34,7 +74,18 @@ class DragValue : public QWidget
     Q_OBJECT
 
 public:
-    DragValue(QWidget* parent = 0);
+    /**
+    * @brief Default constructor.
+    * @param label The label that will be displayed in the progress bar
+    * @param defaultValue The default value
+    * @param decimals The number of decimals for the parameter. 0 means it is an integer
+    * @param min The minimum value
+    * @param max The maximum value
+    * @param id Used to identify this widget. If this parameter is set, "Show in Timeline" will be available in context menu.
+    * @param suffix The suffix that will be displayed in the spinbox (for example '%')
+    * @param showSlider If disabled, user can still drag on the label but no progress bar is shown
+    */    
+    explicit DragValue(const QString &label, double defaultValue, int decimals, double min = 0, double max = 100, int id = -1, const QString &suffix = QString(), bool showSlider = true, QWidget* parent = 0);
     virtual ~DragValue();
 
     /** @brief Returns the precision = number of decimals */
@@ -57,14 +108,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);
+    void setValueFromProgress(double value, bool final);
+    /** @brief Resets to default value */
+    void slotReset();
 
 signals:
-    void valueChanged(qreal value, bool final);
-
+    void valueChanged(double value, bool final = true);
+    void inTimeline(int);
 
 
 
@@ -73,34 +133,40 @@ 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 focusOutEvent(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();
 
-private:
-    qreal m_maximum;
-    qreal m_minimum;
-    int m_precision;
-    qreal m_step;
-    QLineEdit *m_edit;
-    /*QToolButton *m_buttonInc;
-    QToolButton *m_buttonDec;*/
-    QPoint m_dragStartPosition;
-    QPoint m_dragLastPosition;
-    bool m_dragMode;
-    bool m_finalValue;
+    void slotSetScaleMode(int mode);
+    void slotSetDirectUpdate(bool directUpdate);
+    void slotShowContextMenu(const QPoint &pos);
+    void slotSetValue(int value);
+    void slotSetValue(double value);
+    void slotSetInTimeline();
 
-    /** @brief Sets the maximum width of the widget so that there is enough space for the widest possible value. */
-    void updateMaxWidth();
+private:
+    double m_maximum;
+    double m_minimum;
+    int m_decimals;
+    double m_default;
+    int m_id;
+    QSpinBox *m_intEdit;
+    QDoubleSpinBox *m_doubleEdit;
+
+    QMenu *m_menu;
+    KSelectAction *m_scale;
+    QAction *m_directUpdate;
+    CustomLabel *m_label;
 };
 
 #endif