00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _ANGLESPINBOX_HPP_
00021 #define _ANGLESPINBOX_HPP_
00022
00023 #include <QAbstractSpinBox>
00024 #include <QString>
00025
00030 class AngleSpinBox : public QAbstractSpinBox
00031 {
00032 Q_OBJECT
00033
00034 public:
00037 enum DisplayFormat
00038 {
00039 DMSLetters,
00040 DMSSymbols,
00041 HMSLetters,
00042 HMSSymbols,
00043 DecimalDeg
00044 };
00045
00048 enum PrefixType
00049 {
00050 Normal,
00051 NormalPlus,
00052 Longitude,
00053 Latitude,
00054 Unknown
00055 };
00056
00057 AngleSpinBox(QWidget* parent=0, DisplayFormat format=DMSSymbols, PrefixType prefix=Normal);
00058 ~AngleSpinBox();
00059
00060
00061 virtual void stepBy(int steps);
00062 virtual QValidator::State validate(QString& input, int& pos) const;
00063
00066 double valueRadians();
00069 double valueDegrees();
00070
00073 void setDecimals(int places) { decimalPlaces = places; }
00074
00077 int decimals() { return decimalPlaces; }
00078
00081 void setDisplayFormat(DisplayFormat format) { angleSpinBoxFormat=format; formatText(); }
00082
00085 DisplayFormat displayFormat() { return angleSpinBoxFormat; }
00086
00089 void setPrefixType(PrefixType prefix) { currentPrefixType=prefix; formatText(); }
00090
00093 PrefixType prefixType() { return currentPrefixType; }
00094
00095 public slots:
00097 virtual void clear();
00098
00101 void setRadians(double radians);
00102
00105 void setDegrees(double degrees);
00106
00107 signals:
00109 void valueChanged();
00110
00111 protected:
00112 virtual StepEnabled stepEnabled() const;
00113
00114 private slots:
00116 void updateValue(void);
00117
00118 private:
00126 double stringToDouble(QString input, QValidator::State* state, PrefixType prefix=Unknown) const;
00127
00129 enum AngleSpinboxSection
00130 {
00131 SectionPrefix,
00132 SectionDegreesHours,
00133 SectionMinutes,
00134 SectionSeconds,
00135 SectionNone
00136 };
00137
00139 AngleSpinboxSection getCurrentSection() const;
00140
00144 void formatText(void);
00145
00146 static const QString positivePrefix(PrefixType prefix);
00147 static const QString negativePrefix(PrefixType prefix);
00148
00149 DisplayFormat angleSpinBoxFormat;
00150 PrefixType currentPrefixType;
00151 int decimalPlaces;
00152 double radAngle;
00153
00154 };
00155
00156 #endif // _ANGLESPINBOX_HPP_