mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-23 12:48:40 -05:00
74 lines
2.4 KiB
C++
74 lines
2.4 KiB
C++
#include "MaidenheadLocatorValidator.hpp"
|
|
|
|
MaidenheadLocatorValidator::MaidenheadLocatorValidator (QObject * parent, Length length, Length required)
|
|
: QValidator {parent}
|
|
{
|
|
switch (length)
|
|
{
|
|
case Length::field:
|
|
re_.setPattern ({R"(^(?<field>[A-Ra-r]{2})$)"});
|
|
break;
|
|
case Length::square:
|
|
if (Length::field == required)
|
|
{
|
|
re_.setPattern ({R"(^(?<field>[A-Ra-r]{2})([0-9]{2}){0,1}$)"});
|
|
}
|
|
else
|
|
{
|
|
re_.setPattern ({R"(^(?<field>[A-Ra-r]{2})[0-9]{2}$)"});
|
|
}
|
|
break;
|
|
case Length::subsquare:
|
|
if (Length::field == required)
|
|
{
|
|
re_.setPattern ({R"(^(?<field>[A-Ra-r]{2})([0-9]{2}((?<subsquare>[A-Xa-x]{2}){0,1})){0,1}$)"});
|
|
}
|
|
else if (Length::square == required)
|
|
{
|
|
re_.setPattern ({R"(^(?<field>[A-Ra-r]{2})[0-9]{2}(?<subsquare>[A-Xa-x]{2}){0,1}$)"});
|
|
}
|
|
else
|
|
{
|
|
re_.setPattern ({R"(^(?<field>[A-Ra-r]{2})[0-9]{2}(?<subsquare>[A-Xa-x]{2})$)"});
|
|
}
|
|
break;
|
|
case Length::extended:
|
|
if (Length::field == required)
|
|
{
|
|
re_.setPattern ({R"(^(?<field>[A-Ra-r]{2})([0-9]{2}((?<subsquare>[A-Xa-x]{2}){0,1}([0-9]{2}){0,1})){0,1}$)"});
|
|
}
|
|
else if (Length::square == required)
|
|
{
|
|
re_.setPattern ({R"(^(?<field>[A-Ra-r]{2})[0-9]{2}((?<subsquare>[A-Xa-x]{2})([0-9]{2}){0,1}){0,1}$)"});
|
|
}
|
|
else if (Length::subsquare == required)
|
|
{
|
|
re_.setPattern ({R"(^(?<field>[A-Ra-r]{2})[0-9]{2}(?<subsquare>[A-Xa-x]{2})([0-9]{2}){0,1}$)"});
|
|
}
|
|
else
|
|
{
|
|
re_.setPattern ({R"(^(?<field>[A-Ra-r]{2})[0-9]{2}(?<subsquare>[A-Xa-x]{2})[0-9]{2}$)"});
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
auto MaidenheadLocatorValidator::validate (QString& input, int& pos) const -> State
|
|
{
|
|
auto match = re_.match (input, 0, QRegularExpression::PartialPreferCompleteMatch);
|
|
auto field = match.captured ("field");
|
|
if (field.size ())
|
|
{
|
|
input.replace (match.capturedStart ("field"), match.capturedLength ("field"), field.toUpper ());
|
|
}
|
|
auto subsquare = match.captured ("subsquare");
|
|
if (subsquare.size ())
|
|
{
|
|
input.replace (match.capturedStart ("subsquare"), match.capturedLength ("subsquare"), subsquare.toUpper ());
|
|
}
|
|
if (match.hasMatch ()) return Acceptable;
|
|
if (!input.size () || match.hasPartialMatch ()) return Intermediate;
|
|
pos = input.size ();
|
|
return Invalid;
|
|
}
|