]> git.sesse.net Git - kdenlive/blobdiff - src/timecodedisplay.h
Const'ref
[kdenlive] / src / timecodedisplay.h
index 074b3e744ba3432fc22fb4048af39c553c664a67..285bde74c7b2245353e6b4cd74aa9fc1aa9b528b 100644 (file)
 #ifndef TIMECODEDISPLAY_H_
 #define TIMECODEDISPLAY_H_
 
-#include "ui_timecodedisplay_ui.h"
 #include "timecode.h"
+#include "gentime.h"
 
-#include <KRestrictedLine>
-
+#include <QAbstractSpinBox>
 
 /**
- * @short A widget for qreal values with a popup slider
- *
- * TimecodeDisplay combines a numerical input and a dropdown slider in a way that takes up as
- * little screen space as possible.
- *
- * It allows the user to either enter a floating point value or quickly set the value using a slider
- *
- * One signal is emitted when the value changes. The signal is even emitted when the slider
- * is moving. The second argument of the signal however tells you if the value is final or not. A
- * final value is produced by entering a value numerically or by releasing the slider.
+ * @class TimecodeDisplay
+ * @brief A widget for inserting a timecode value.
+ * @author Jean-Baptiste Mardelle
  *
- * The input of the numerical line edit is constrained to numbers and decimal signs.
+ * TimecodeDisplay can be used to insert eigther frames
+ * or a timecode in the format HH:MM:SS:FF
  */
-class TimecodeDisplay : public QWidget, public Ui::TimecodeDisplay_UI
+class TimecodeDisplay : public QAbstractSpinBox
 {
-
     Q_OBJECT
 
 public:
+    /** @brief Constructor for the widget, sets value to 0.
+    * @param t Timecode object used to setup correct input (frames or HH:MM:SS:FF)
+    * @param parent parent Widget */
+    explicit TimecodeDisplay(const Timecode& t, QWidget *parent = 0);
 
-    /**
-     * Constructor for the widget, where value is set to 0
-     *
-     * @param parent parent QWidget
-     */
-    TimecodeDisplay(Timecode t, QWidget *parent = 0);
-
-    /**
-     * Destructor
-     */
-    virtual ~TimecodeDisplay();
-
-    /**
-     * The minimum value that can be entered.
-     * default is 0
-     */
+    /** @brief Returns the minimum value, which can be entered.
+    * default is 0 */
     int minimum() const;
 
-    /**
-     * The maximum value that can be entered.
-     * default is 100
-     */
+    /** @brief Returns the maximum value, which can be entered.
+    * default is no maximum (-1) */
     int maximum() const;
 
-    /**
-     * Sets the minimum maximum value that can be entered.
-     * @param min the minimum value
-     * @param max the maximum value
-     */
+    /** @brief Sets the minimum maximum value that can be entered.
+    * @param min the minimum value
+    * @param max the maximum value */
     void setRange(int min, int max);
 
-    /**
-    * The value shown.
-    */
-    int value() const;
+    /** @brief Returns the current input in frames. */
+    int getValue() const;
+
+    /** @brief Returns the current input as a GenTime object. */
+    GenTime gentime() const;
 
+    /** @brief Returs the widget's timecode object. */
     Timecode timecode() const;
 
-    //virtual QSize minimumSizeHint() const; ///< reimplemented from QComboBox
-    //virtual QSize sizeHint() const; ///< reimplemented from QComboBox
+    /** @brief Sets value's format to frames or HH:MM:SS:FF according to @param frametimecode.
+    * @param frametimecode true = frames, false = HH:MM:SS:FF
+    * @param init true = force the change, false = update only if the frametimecode param changed */
+    void setTimeCodeFormat(bool frametimecode, bool init = false);
+
+    /** @brief Sets timecode for current project.
+     * @param t the new timecode */
+    void updateTimeCode(const Timecode &t);
+
+    virtual void stepBy(int steps);
 
 private:
     /** timecode for widget */
     Timecode m_timecode;
-    /** Should we display the timecode in frames or in format hh:mm:ss:ff */
+    /** Should we display the timecode in frames or in format hh:mm:ss:ff */
     bool m_frametimecode;
     int m_minimum;
     int m_maximum;
+    int m_value;
 
 public slots:
-
-    /**
-    * Sets the value.
-    * The value actually set is forced to be within the legal range: minimum <= value <= maximum
+    /** @brief Sets the value.
     * @param value the new value
-    */
+    * The value actually set is forced to be within the legal range: minimum <= value <= maximum */
     void setValue(int value);
     void setValue(const QString &value);
-    void slotPrepareTimeCodeFormat(Timecode t);
+    void setValue(const GenTime &value);
+
+    /** @brief Sets value's format according to Kdenlive's settings.
+    * @param t (optional, if already existing) Timecode object to use */
+    void slotUpdateTimeCodeFormat();
 
 private slots:
-    void slotValueUp();
-    void slotValueDown();
+    void slotEditingFinished();
 
 signals:
-
     /**
      * Emitted every time the value changes (by calling setValue() or
      * by user interaction).
@@ -120,11 +108,13 @@ signals:
      * @param final if the value is final ie not produced during sliding (on slider release it's final)
      */
     void valueChanged(int value, bool final);
-    void editingFinished();
+    void timeCodeEditingFinished();
 
 protected:
     virtual void keyPressEvent(QKeyEvent *e);
+    virtual void mouseReleaseEvent(QMouseEvent *);
     virtual void wheelEvent(QWheelEvent *e);
+    virtual QAbstractSpinBox::StepEnabled stepEnabled () const;
 
 };