mirror of
https://github.com/JS8Call-improved/JS8Call-improved
synced 2026-08-13 17:47:36 -04:00
- cast numeric_limits to double explicitly before comparison/division in Radio.cpp and FrequencyLineEdit.cpp
66 lines
1.7 KiB
C++
66 lines
1.7 KiB
C++
/**
|
|
* @file FrequencyLineEdit.cpp
|
|
* @brief Implementation of the editor for the JS8 standard operating
|
|
* frequencies
|
|
*/
|
|
|
|
#include "FrequencyLineEdit.h"
|
|
|
|
#include <QDoubleValidator>
|
|
#include <QLocale>
|
|
#include <QString>
|
|
|
|
#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.,
|
|
static_cast<double>(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) {
|
|
const auto delta_max =
|
|
static_cast<double>(std::numeric_limits<FrequencyDelta>::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));
|
|
}
|