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
|