]> git.sesse.net Git - kdenlive/blob - src/dragvalue.h
Add "drag value" widget: Numbers can be edited by dragging horizontal on the widget...
[kdenlive] / src / dragvalue.h
1 /***************************************************************************
2  *   Copyright (C) 2011 by Till Theato (root@ttill.de)                     *
3  *   This file is part of Kdenlive (www.kdenlive.org).                     *
4  *                                                                         *
5  *   Kdenlive is free software: you can redistribute it and/or modify      *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation, either version 2 of the License, or     *
8  *   (at your option) any later version.                                   *
9  *                                                                         *
10  *   Kdenlive is distributed in the hope that it will be useful,           *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with Kdenlive.  If not, see <http://www.gnu.org/licenses/>.     *
17  ***************************************************************************/
18
19 #ifndef DRAGVALUE_H_
20 #define DRAGVALUE_H_
21
22 #include <QWidget>
23
24 class QValidator;
25 class QToolButton;
26 class QLineEdit;
27
28 /**
29  * @brief A widget for modifing numbers by dragging, using the mouse wheel or entering them with the keyboard.
30  */
31
32 class DragValue : public QWidget
33 {
34     Q_OBJECT
35
36 public:
37     DragValue(QWidget* parent = 0);
38     virtual ~DragValue();
39
40     /** @brief Returns the precision = number of decimals */
41     int precision() const;
42     /** @brief Returns the maximum value */
43     qreal minimum() const;
44     /** @brief Returns the minimum value */
45     qreal maximum() const;
46
47     /** @brief Sets the precision (number of decimals) to @param precision. */
48     void setPrecision(int precision);
49     /** @brief Sets the minimum value. */
50     void setMinimum(qreal min);
51     /** @brief Sets the maximum value. */
52     void setMaximum(qreal max);
53     /** @brief Sets minimum and maximum value. */
54     void setRange(qreal min, qreal max);
55     /** @brief Sets the size of a step (when dragging or using the mouse wheel). */
56     void setStep(qreal step);
57
58     /** @brief Returns the current value */
59     qreal value() const;
60     
61 public slots:
62     /** @brief Sets the value (forced to be in the valid range) and emits valueChanged. */
63     void setValue(qreal value, bool final = true);
64
65 signals:
66     void valueChanged(qreal value, bool final);
67
68
69
70
71     /*
72      * Private
73      */
74
75 protected:
76     virtual void mousePressEvent(QMouseEvent *e);
77     virtual void mouseMoveEvent(QMouseEvent *e);
78     virtual void mouseReleaseEvent(QMouseEvent *e);
79     /** @brief Forwards tab focus to lineedit since it is disabled. */
80     virtual void focusInEvent(QFocusEvent *e);
81     //virtual void keyPressEvent(QKeyEvent *e);
82     virtual void wheelEvent(QWheelEvent *e);
83
84 private slots:
85     void slotValueInc();
86     void slotValueDec();
87     void slotEditingFinished();
88
89 private:
90     qreal m_maximum;
91     qreal m_minimum;
92     int m_precision;
93     qreal m_step;
94     QLineEdit *m_edit;
95     /*QToolButton *m_buttonInc;
96     QToolButton *m_buttonDec;*/
97     QPoint m_dragStartPosition;
98     QPoint m_dragLastPosition;
99     bool m_dragMode;
100     bool m_finalValue;
101
102     /** @brief Sets the maximum width of the widget so that there is enough space for the widest possible value. */
103     void updateMaxWidth();
104 };
105
106 #endif