mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 04:50:34 -04:00 
			
		
		
		
	Two new validator classes CallsignValidator and MaidenheadLocatorValidator are introduced and used in the Configuration and MainWindow implementations. MaidenheadLocatorValidator supports different lengths and minimum required lengths with a default of subsquare with square being required. The message_aggregator application has been enhanced to show the current DX call and DX grid as shown in the WSJT-X main window. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6903 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
		
			
				
	
	
		
			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.toLower ());
 | |
|     }
 | |
|   if (match.hasMatch ()) return Acceptable;
 | |
|   if (!input.size () || match.hasPartialMatch ()) return Intermediate;
 | |
|   pos = input.size ();
 | |
|   return Invalid;
 | |
| }
 |