cut 3.4.1-rc1
Loading...
Searching...
No Matches
QeAngleLineEdit.hpp
1#ifndef QEANGLELINEEDIT_H
2#define QEANGLELINEEDIT_H
3
4#include <QDoubleSpinBox>
5#include <QDebug>
6
23class QeAngleLineEdit : public QDoubleSpinBox {
24 Q_OBJECT
29 Q_PROPERTY(Units unit READ getUnits WRITE setUnits NOTIFY unitChanged)
34 Q_PROPERTY(double radians READ getRadians WRITE setRadians NOTIFY radiansChanged )
40 Q_PROPERTY(int precision READ getPrecision WRITE setPrecision NOTIFY precisionChanged )
45 Q_PROPERTY(double minimum READ getMinimum WRITE setMinimum NOTIFY minimumChanged )
50 Q_PROPERTY(double maximum READ getMaximum WRITE setMaximum NOTIFY maximumChanged )
51
52
53public:
63 Q_ENUM(Units)
64
65
69 explicit QeAngleLineEdit(QWidget* parent = nullptr);
70
76 [[deprecated("Please use getUnits() instead")]]
77 Units getUnit() const { return getUnits(); }
78
83 Units getUnits() const { return m_unit; }
84
89 int getPrecision() { return decimals(); }
90
95 double getRadians() { return value(); }
96
101 double getMinimum() { return minimum(); }
102
107 double getMaximum() { return maximum(); }
108
109signals:
114 void unitChanged(Units newUnit);
115
120 void validationStateChanged(QValidator::State state);
121
127
133
139
145
146public slots:
152 [[deprecated("Please use setUnits(Units unit) instead")]]
153 void setUnit(Units unit);
154
159 void setUnits(Units unit);
160
165 void setPrecision(int newValue) { setDecimals(newValue); emit precisionChanged(newValue); }
166
171 void setRadians(double newValue) { setValue(newValue); }
172
177 void setUnitsInt(int unit) {
178 Units enum_unit = static_cast<Units>(unit);
179 setUnits(enum_unit);
180 }
181
186 void setMinimum(double newValue) {
187 if (qFuzzyCompare(minimum(), newValue))
188 return;
189
190 QDoubleSpinBox::setMinimum(newValue);
191 emit minimumChanged(newValue);
192 }
193
198 void setMaximum(double newValue) {
199 if (qFuzzyCompare(maximum(), newValue))
200 return;
201
202 QDoubleSpinBox::setMaximum(newValue);
203 emit maximumChanged(newValue);
204 }
205
206protected:
212 QString textFromValue(double value) const override;
213
219 double valueFromText(const QString& text) const override;
220
227 QValidator::State validate(QString& input, int& pos) const override;
228
233 void handleState(QValidator::State state);
234
235private:
236 Units m_unit;
237
243 QString formatHMS(double value) const;
244
251 double parseHMS(const QString& text, bool& ok) const;
252
258 QString formatDMS(double value) const;
259
266 double parseDMS(const QString& text, bool& ok) const;
267
273 QString formatDegrees(double value) const;
274
281 double parseDegrees(const QString& text, bool& ok) const;
282
289 double parseRadians(const QString& text, bool& ok) const;
290};
291
292
293#endif // QEANGLELINEEDIT_H
void minimumChanged(double minimum)
Emitted when the minimum value changes.
double valueFromText(const QString &text) const override
Parse display text back to an internal radian value.
Definition QeAngleLineEdit.cpp:72
void handleState(QValidator::State state)
Handle a change in validation state.
Definition QeAngleLineEdit.cpp:27
void setMaximum(double newValue)
Set the maximum allowable value.
Definition QeAngleLineEdit.hpp:198
Units
Angular unit formats.
Definition QeAngleLineEdit.hpp:57
@ SEXAGESIMAL
Standard degrees format.
Definition QeAngleLineEdit.hpp:58
@ DMS
Degrees:Minutes:Seconds format.
Definition QeAngleLineEdit.hpp:61
@ HMS
Hours:Minutes:Seconds format.
Definition QeAngleLineEdit.hpp:60
@ RADIANS
Radians format.
Definition QeAngleLineEdit.hpp:59
void precisionChanged(int precision)
Emitted when the precision changes.
void setUnits(Units unit)
Set the display unit format.
Definition QeAngleLineEdit.cpp:41
QString textFromValue(double value) const override
Convert an internal radian value to display text.
Definition QeAngleLineEdit.cpp:58
void setUnitsInt(int unit)
Convenience method to set Units using its integer representation.
Definition QeAngleLineEdit.hpp:177
void setMinimum(double newValue)
Set the minimum allowable value.
Definition QeAngleLineEdit.hpp:186
double radians
Value to represent in radians.
Definition QeAngleLineEdit.hpp:34
int getPrecision()
Get the precision (number of decimals) for subsecond display.
Definition QeAngleLineEdit.hpp:89
Units getUnits() const
Get the current unit format.
Definition QeAngleLineEdit.hpp:83
int precision
Precision used in the subsecond section of the label.
Definition QeAngleLineEdit.hpp:40
double getMaximum()
Get the maximum allowable value.
Definition QeAngleLineEdit.hpp:107
void maximumChanged(double maximum)
Emitted when the maximum value changes.
double getRadians()
Get the current angle value in radians.
Definition QeAngleLineEdit.hpp:95
Units unit
Enum value to determine which units should be used to represent displayed value.
Definition QeAngleLineEdit.hpp:29
void setPrecision(int newValue)
Set the precision for subsecond display.
Definition QeAngleLineEdit.hpp:165
void unitChanged(Units newUnit)
Emitted when the display unit changes.
void validationStateChanged(QValidator::State state)
Emitted when the input validation state changes.
void radiansChanged(double radians)
Emitted when the radian value changes.
void setUnit(Units unit)
Set the display unit format.
Definition QeAngleLineEdit.cpp:37
QeAngleLineEdit(QWidget *parent=nullptr)
Construct a QeAngleLineEdit widget.
Definition QeAngleLineEdit.cpp:12
double minimum
Bottom range value that can be set.
Definition QeAngleLineEdit.hpp:45
Units getUnit() const
Get the current unit format.
Definition QeAngleLineEdit.hpp:77
double getMinimum()
Get the minimum allowable value.
Definition QeAngleLineEdit.hpp:101
void setRadians(double newValue)
Set the angle value in radians.
Definition QeAngleLineEdit.hpp:171
double maximum
Top range value that can be set.
Definition QeAngleLineEdit.hpp:50
QValidator::State validate(QString &input, int &pos) const override
Validate user input.
Definition QeAngleLineEdit.cpp:97