mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2026-06-01 21:45:00 -04:00
Start implememntation of database based Fox log model and a new Fox log window widget
This change incorporates a reorganization of the GUI code with widgets, validators, models, and item delegates being moved to sub-directories. Relax the requirements of the ForeignKeyDelegate and related CandidateKeyFilter classes to allow them to work with constant model pointers for both referenced and referencing models.
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
#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.toLower ());
|
||||
}
|
||||
if (match.hasMatch ()) return Acceptable;
|
||||
if (!input.size () || match.hasPartialMatch ()) return Intermediate;
|
||||
pos = input.size ();
|
||||
return Invalid;
|
||||
}
|
||||
Reference in New Issue
Block a user