1 #include "FrequencyDeltaLineEdit.hpp"
2
3 #include <limits>
4
5 #include <QDoubleValidator>
6 #include <QString>
7 #include <QLocale>
8
9 #include "moc_FrequencyDeltaLineEdit.cpp"
10
11 namespace
12 {
13 class MHzValidator
14 : public QDoubleValidator
15 {
16 public:
MHzValidator(double bottom,double top,QObject * parent=nullptr)17 MHzValidator (double bottom, double top, QObject * parent = nullptr)
18 : QDoubleValidator {bottom, top, 6, parent}
19 {
20 }
21
validate(QString & input,int & pos) const22 State validate (QString& input, int& pos) const override
23 {
24 State result = QDoubleValidator::validate (input, pos);
25 if (Acceptable == result)
26 {
27 bool ok;
28 (void)QLocale {}.toDouble (input, &ok);
29 if (!ok)
30 {
31 result = Intermediate;
32 }
33 }
34 return result;
35 }
36 };
37 }
38
FrequencyDeltaLineEdit(QWidget * parent)39 FrequencyDeltaLineEdit::FrequencyDeltaLineEdit (QWidget * parent)
40 : QLineEdit (parent)
41 {
42 setValidator (new MHzValidator {-(float)std::numeric_limits<FrequencyDelta>::max () / 10.e6,
43 (float)std::numeric_limits<FrequencyDelta>::max () / 10.e6, this});
44 }
45
frequency_delta() const46 auto FrequencyDeltaLineEdit::frequency_delta () const -> FrequencyDelta
47 {
48 return Radio::frequency_delta (text (), 6);
49 }
50
frequency_delta(FrequencyDelta d)51 void FrequencyDeltaLineEdit::frequency_delta (FrequencyDelta d)
52 {
53 setText (Radio::frequency_MHz_string (d));
54 }
55