#include "Radio.hpp" #include <cmath> #include <QMetaType> #include <QString> #include <QChar> #include <QDebug> #include <QRegExpValidator> #include <QDataStream> namespace Radio { namespace { struct init { init () { qRegisterMetaType<Frequency> ("Frequency"); qRegisterMetaType<Frequencies> ("Frequencies"); qRegisterMetaTypeStreamOperators<Frequencies> ("Frequencies"); qRegisterMetaType<FrequencyDelta> ("FrequencyDelta"); } } static_initaializer; double constexpr MHz_factor {1.e6}; int constexpr frequency_precsion {6}; } Frequency frequency (QVariant const& v, int scale) { return std::llround (v.toDouble () * std::pow (10., scale)); } FrequencyDelta frequency_delta (QVariant const& v, int scale) { return std::llround (v.toDouble () * std::pow (10., scale)); } QString frequency_MHz_string (Frequency f, QLocale const& locale) { return locale.toString (f / MHz_factor, 'f', frequency_precsion); } QString frequency_MHz_string (FrequencyDelta d, QLocale const& locale) { return locale.toString (d / MHz_factor, 'f', frequency_precsion); } QString pretty_frequency_MHz_string (Frequency f, QLocale const& locale) { auto f_string = locale.toString (f / MHz_factor, 'f', frequency_precsion); return f_string.insert (f_string.size () - 3, QChar::Nbsp); } QString pretty_frequency_MHz_string (double f, int scale, QLocale const& locale) { auto f_string = locale.toString (f / std::pow (10., scale - 6), 'f', frequency_precsion); return f_string.insert (f_string.size () - 3, QChar::Nbsp); } QString pretty_frequency_MHz_string (FrequencyDelta d, QLocale const& locale) { auto d_string = locale.toString (d / MHz_factor, 'f', frequency_precsion); return d_string.insert (d_string.size () - 3, QChar::Nbsp); } }