/** * @file FrequencyLineEdit.cpp * @brief Implementation of the editor for the JS8 standard operating * frequencies */ #include "FrequencyLineEdit.h" #include #include #include #include #include "moc_FrequencyLineEdit.cpp" namespace { class MHzValidator : public QDoubleValidator { public: MHzValidator(double bottom, double top, QObject *parent = nullptr) : QDoubleValidator{bottom, top, 6, parent} {} State validate(QString &input, int &pos) const override { State result = QDoubleValidator::validate(input, pos); if (Acceptable == result) { bool ok; (void)QLocale{}.toDouble(input, &ok); if (!ok) { result = Intermediate; } } return result; } }; } // namespace FrequencyLineEdit::FrequencyLineEdit(QWidget *parent) : QLineEdit(parent) { setValidator(new MHzValidator{ 0., static_cast(std::numeric_limits::max()) / 10.e6, this}); } auto FrequencyLineEdit::frequency() const -> Frequency { return Radio::frequency(text(), 6); } void FrequencyLineEdit::frequency(Frequency f) { setText(Radio::frequency_MHz_string(f)); } FrequencyDeltaLineEdit::FrequencyDeltaLineEdit(QWidget *parent) : QLineEdit(parent) { const auto delta_max = static_cast(std::numeric_limits::max()); setValidator(new MHzValidator{-delta_max / 10.e6, delta_max / 10.e6, this}); } auto FrequencyDeltaLineEdit::frequency_delta() const -> FrequencyDelta { return Radio::frequency_delta(text(), 6); } void FrequencyDeltaLineEdit::frequency_delta(FrequencyDelta d) { setText(Radio::frequency_MHz_string(d)); }