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