cut 3.3.0
Loading...
Searching...
No Matches
QeAngleLineEdit.hpp
1#ifndef QEANGLELINEEDIT_H
2#define QEANGLELINEEDIT_H
3
4#include <QDoubleSpinBox>
5#include <QDebug>
6
7
8class QeAngleLineEdit : public QDoubleSpinBox {
9 Q_OBJECT
14 Q_PROPERTY(Units unit READ getUnits WRITE setUnits NOTIFY unitChanged)
19 Q_PROPERTY(double radians READ getRadians WRITE setRadians NOTIFY radiansChanged )
25 Q_PROPERTY(int precision READ getPrecision WRITE setPrecision NOTIFY precisionChanged )
30 Q_PROPERTY(double minimum READ getMinimum WRITE setMinimum NOTIFY minimumChanged )
35 Q_PROPERTY(double maximum READ getMaximum WRITE setMaximum NOTIFY maximumChanged )
36
37
38public:
39 enum class Units { SEXAGESIMAL=0, RADIANS, HMS, DMS };
40 Q_ENUM(Units)
41
42 explicit QeAngleLineEdit(QWidget* parent = nullptr);
43
44 [[deprecated("Please use getUnits() instead")]]
45 Units getUnit() const { return getUnits(); }
46 Units getUnits() const { return m_unit; }
47 int getPrecision() { return decimals(); }
48 double getRadians() { return value(); }
49 double getMinimum() { return minimum(); }
50 double getMaximum() { return maximum(); }
51
52signals:
53 void unitChanged(Units newUnit);
54 void validationStateChanged(QValidator::State state);
55 void radiansChanged(double radians);
56 void precisionChanged(int precision);
57 void minimumChanged(double minimum);
58 void maximumChanged(double maximum);
59
60public slots:
61 [[deprecated("Please use setUnits(Units unit) instead")]]
62 void setUnit(Units unit);
63 void setUnits(Units unit);
64 void setPrecision(int newValue) { setDecimals(newValue); emit precisionChanged(newValue); }
65 void setRadians(double newValue) { setValue(newValue); }
70 void setUnitsInt(int unit) {
71 Units enum_unit = static_cast<Units>(unit);
72 setUnits(enum_unit);
73 }
74 void setMinimum(double newValue) {
75 if (qFuzzyCompare(minimum(), newValue))
76 return;
77
78 QDoubleSpinBox::setMinimum(newValue);
79 emit minimumChanged(newValue);
80 }
81 void setMaximum(double newValue) {
82 if (qFuzzyCompare(maximum(), newValue))
83 return;
84
85 QDoubleSpinBox::setMaximum(newValue);
86 emit maximumChanged(newValue);
87 }
88
89protected:
90 QString textFromValue(double value) const override;
91 double valueFromText(const QString& text) const override;
92 QValidator::State validate(QString& input, int& pos) const override;
93 void handleState(QValidator::State state);
94
95private:
96 Units m_unit;
97
98 QString formatHMS(double value) const;
99 double parseHMS(const QString& text, bool& ok) const;
100
101 QString formatDMS(double value) const;
102 double parseDMS(const QString& text, bool& ok) const;
103
104 QString formatDegrees(double value) const;
105 double parseDegrees(const QString& text, bool& ok) const;
106
107 double parseRadians(const QString& text, bool& ok) const;
108};
109
110
111#endif // QEANGLELINEEDIT_H