File: SliderTextWidget.h

package info (click to toggle)
camitk 6.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 389,496 kB
  • sloc: cpp: 103,476; sh: 2,448; python: 1,618; xml: 984; makefile: 128; perl: 84; sed: 20
file content (138 lines) | stat: -rw-r--r-- 3,845 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*****************************************************************************
 * $CAMITK_LICENCE_BEGIN$
 *
 * CamiTK - Computer Assisted Medical Intervention ToolKit
 * (c) 2001-2025 Univ. Grenoble Alpes, CNRS, Grenoble INP - UGA, TIMC, 38000 Grenoble, France
 *
 * Visit http://camitk.imag.fr for more information
 *
 * This file is part of CamiTK.
 *
 * CamiTK is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * CamiTK is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with CamiTK.  If not, see <http://www.gnu.org/licenses/>.
 *
 * $CAMITK_LICENCE_END$
 ****************************************************************************/

#ifndef SLIDER_TEXT_WIDGET_H
#define SLIDER_TEXT_WIDGET_H

// -- Core stuff
#include "CamiTKAPI.h"

// -- QT stuff
#include <QColor>
#include <QLabel>
#include <QLineEdit>
#include <QSlider>


namespace camitk {
/**
 * @ingroup group_sdk_libraries_core_utils
 *
 * @brief
 * This widget allows you to use a slider with a lineedit in a Dialog Box.
 * The [min,max] interval is divided by 100 line steps (10 page steps),
 * the slider controling the variation in percentage.
 *
 * 1 label is used to give the parameter a name (default is objectName())
 *
 * Your own initialization: in YourDialog class,you can init a SliderTextWidget
 * using setText(..) and init(..).
 *
 * In line edit, if the value is superior or inferior than the initial bounds, the
 * bounds are automatically updated.
 *
 *
 */
class CAMITK_API SliderTextWidget : public QWidget {
    Q_OBJECT

public:
    /// Default constructor, name is automatically used as the text label
    SliderTextWidget(QWidget* parent = nullptr, Qt::WindowFlags fl = Qt::WindowFlags());

    /// Destructor
    ~SliderTextWidget() override;

    /// set the text label (name of the manipulated data)
    void setName(const QString&);

    /** initialize slider and lineedit with the label, min, max, and current value
      * Default values are min=0, max=100 and current value=50
      */
    void init(double min = 0.0, double max = 100.0, double value = 50.0);

    /// Get the current value
    double getValue() const;

    /// Update slider and lineedit GUI, emit the valueChanged signal only if the boolean is true (default=no)
    void setValue(const double, bool emitValueChanged = false);

signals:

    /// Signal emitted when the value has changed (either directly using the slider or when the user pressed return)
    void valueChanged();


protected slots:
    /// when the user press return in the line edit
    void returnPressed();

    /// Update the value of the lineedit when slider moves
    void valueChanged(int);

    /// When the user change the text
    void textModified(QString);

private:
    /// update the slider position
    void updateSlider();

    /// Update the line edit value
    void updateLineEdit();

    /// convert from slider value to double
    double sliderToValue(const int);

    /// convert from value to slider
    int valueToSlider(const double);

    /// the current value
    double value;

    /// the line edit bg color
    QColor bgColor;

    /// the min real value
    double min;

    /// the max real value
    double max;

    /// the text label
    QLabel* label;

    /// the line edit
    QLineEdit* lineEdit;

    /// the slider
    QSlider* slider;
};

inline double SliderTextWidget::getValue() const {
    return value;
}

}
#endif // SLIDERTEXTWIDGET_H