js8call/JS8_Main/FrequencyLineEdit.cpp

64 lines
1.7 KiB
C++
Raw Permalink Normal View History

2026-01-18 12:53:55 -06:00
/**
* @file FrequencyLineEdit.cpp
* @brief Implementation of the editor for the JS8 standard operating
* frequencies
*/
2026-01-18 12:53:55 -06:00
#include "FrequencyLineEdit.h"
#include <QDoubleValidator>
#include <QLocale>
#include <QString>
2026-01-18 12:53:55 -06:00
#include <limits>
#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., std::numeric_limits<Radio::Frequency>::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) {
setValidator(new MHzValidator{
-std::numeric_limits<FrequencyDelta>::max() / 10.e6,
std::numeric_limits<FrequencyDelta>::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));
}