2026-01-10 21:33:24 -05:00
|
|
|
/**
|
|
|
|
|
* @file CallsignValidator.cpp
|
2026-01-18 12:53:55 -06:00
|
|
|
* @brief Construct a new Callsign Validator:: Callsign Validator object
|
|
|
|
|
* @param parent
|
|
|
|
|
* @param allow_compound
|
2026-01-10 21:33:24 -05:00
|
|
|
*/
|
2026-01-18 12:53:55 -06:00
|
|
|
|
2026-01-01 15:12:24 -06:00
|
|
|
#include "CallsignValidator.h"
|
|
|
|
|
|
|
|
|
|
CallsignValidator::CallsignValidator(QObject *parent, bool allow_compound)
|
|
|
|
|
: QValidator{parent},
|
|
|
|
|
re_{allow_compound ? R"(^[A-Za-z0-9/]+$)" : R"(^[A-Za-z0-9]+$)"} {}
|
|
|
|
|
|
2026-01-10 21:33:24 -05:00
|
|
|
/**
|
|
|
|
|
* @brief Validate the callsign input
|
2026-01-18 12:53:55 -06:00
|
|
|
*
|
|
|
|
|
* @param input
|
|
|
|
|
* @param pos
|
|
|
|
|
* @return State
|
2026-01-10 21:33:24 -05:00
|
|
|
*/
|
2026-01-01 15:12:24 -06:00
|
|
|
auto CallsignValidator::validate(QString &input, int &pos) const -> State {
|
|
|
|
|
auto match =
|
|
|
|
|
re_.match(input, 0, QRegularExpression::PartialPreferCompleteMatch);
|
|
|
|
|
input = input.toUpper();
|
|
|
|
|
if (input.count(QLatin1Char('/')) > 2)
|
|
|
|
|
return Invalid;
|
|
|
|
|
if (match.hasMatch())
|
|
|
|
|
return Acceptable;
|
|
|
|
|
if (!input.size() || match.hasPartialMatch())
|
|
|
|
|
return Intermediate;
|
|
|
|
|
pos = input.size();
|
|
|
|
|
return Invalid;
|
|
|
|
|
}
|