1080 QValidator::State &state)
const
1082 if (cachedText == input && !input.isEmpty()) {
1083 state = cachedState;
1084 QSBDEBUG() <<
"cachedText was '" << cachedText <<
"' state was "
1085 << state <<
" and value was " << cachedValue;
1089 const int max = maximum.toInt();
1090 const int min = minimum.toInt();
1092 QString copy = stripped(input, &pos);
1093 QSBDEBUG() <<
"input" << input <<
"copy" << copy;
1094 state = QValidator::Acceptable;
1097 if (max != min && (copy.isEmpty()
1098 || (min < 0 && copy ==
"-"_L1)
1099 || (max >= 0 && copy ==
"+"_L1))) {
1100 state = QValidator::Intermediate;
1101 QSBDEBUG() << __FILE__ << __LINE__<<
"num is set to" << num;
1102 }
else if (copy.startsWith(u'-') && min >= 0) {
1103 state = QValidator::Invalid;
1109 num = locale.toInt(copy, &ok);
1110 if (!ok && (max >= 1000 || min <= -1000)) {
1111 const QString sep(locale.groupSeparator());
1112 const QString doubleSep = sep + sep;
1113 if (copy.contains(sep) && !copy.contains(doubleSep)) {
1114 QString copy2 = copy;
1116 num = locale.toInt(copy2, &ok);
1120 QSBDEBUG() << __FILE__ << __LINE__<<
"num is set to" << num;
1122 state = QValidator::Invalid;
1123 }
else if (num >= min && num <= max) {
1124 state = QValidator::Acceptable;
1125 }
else if (max == min) {
1126 state = QValidator::Invalid;
1128 if ((num >= 0 && num > max) || (num < 0 && num < min)) {
1129 state = QValidator::Invalid;
1130 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1132 state = QValidator::Intermediate;
1133 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Intermediate";
1137 if (state != QValidator::Acceptable)
1138 num = max > 0 ? min : max;
1139 input = prefix + copy + suffix;
1141 cachedState = state;
1142 cachedValue = QVariant((
int)num);
1144 QSBDEBUG() <<
"cachedText is set to '" << cachedText <<
"' state is set to "
1145 << state <<
" and value is set to " << cachedValue;
1233 QValidator::State &state)
const
1235 if (cachedText == input && !input.isEmpty()) {
1236 state = cachedState;
1237 QSBDEBUG() <<
"cachedText was '" << cachedText <<
"' state was "
1238 << state <<
" and value was " << cachedValue;
1241 const double max = maximum.toDouble();
1242 const double min = minimum.toDouble();
1244 QString copy = stripped(input, &pos);
1245 QSBDEBUG() <<
"input" << input <<
"copy" << copy;
1246 int len = copy.size();
1248 const bool plus = max >= 0;
1249 const bool minus = min <= 0;
1251 const QString group(locale.groupSeparator());
1252 const uint groupUcs = (group.isEmpty() ? 0 :
1253 (group.size() > 1 && group.at(0).isHighSurrogate()
1254 ? QChar::surrogateToUcs4(group.at(0), group.at(1))
1255 : group.at(0).unicode()));
1258 state = max != min ? QValidator::Intermediate : QValidator::Invalid;
1261 if (copy.at(0) == locale.decimalPoint()
1262 || (plus && copy.at(0) == u'+')
1263 || (minus && copy.at(0) == u'-')) {
1264 state = QValidator::Intermediate;
1269 if (copy.at(1) == locale.decimalPoint()
1270 && ((plus && copy.at(0) == u'+') || (minus && copy.at(0) == u'-'))) {
1271 state = QValidator::Intermediate;
1278 if (groupUcs && copy.startsWith(group)) {
1279 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1280 state = QValidator::Invalid;
1282 }
else if (len > 1) {
1283 const int dec = copy.indexOf(locale.decimalPoint());
1285 if (dec + 1 < copy.size() && copy.at(dec + 1) == locale.decimalPoint() && pos == dec + 1) {
1286 copy.remove(dec + 1, 1);
1289 if (copy.size() - dec >
decimals + 1) {
1290 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1291 state = QValidator::Invalid;
1294 for (
int i = dec + 1; i < copy.size(); ++i) {
1295 if (copy.at(i).isSpace()
1296 || (groupUcs && QStringView{copy}.sliced(i).startsWith(group))) {
1297 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1298 state = QValidator::Invalid;
1303 const QChar last = copy.back();
1304 const bool groupEnd = groupUcs && copy.endsWith(group);
1305 const QStringView head(copy.constData(), groupEnd ? len - group.size() : len - 1);
1306 const QChar secondLast = head.back();
1307 if ((groupEnd || last.isSpace())
1308 && ((groupUcs && head.endsWith(group)) || secondLast.isSpace())) {
1309 state = QValidator::Invalid;
1310 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1312 }
else if (last.isSpace() && (!QChar::isSpace(groupUcs) || secondLast.isSpace())) {
1313 state = QValidator::Invalid;
1314 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1322 num = locale.toDouble(copy, &ok);
1323 QSBDEBUG() << __FILE__ << __LINE__ << locale << copy << num << ok;
1326 if (QChar::isPrint(groupUcs)) {
1327 if (max < 1000 && min > -1000 && groupUcs && copy.contains(group)) {
1328 state = QValidator::Invalid;
1329 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1333 const int len = copy.size();
1334 for (
int i = 0; i < len - 1;) {
1335 if (groupUcs && QStringView{copy}.sliced(i).startsWith(group)) {
1336 if (QStringView(copy).mid(i + group.size()).startsWith(group)) {
1337 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1338 state = QValidator::Invalid;
1347 QString copy2 = copy;
1349 copy2.remove(group);
1350 num = locale.toDouble(copy2, &ok);
1351 QSBDEBUG() << group << num << copy2 << ok;
1354 state = QValidator::Invalid;
1355 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1362 state = QValidator::Invalid;
1363 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1364 }
else if (num >= min && num <= max) {
1365 state = QValidator::Acceptable;
1366 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Acceptable";
1367 }
else if (max == min) {
1368 state = QValidator::Invalid;
1369 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1371 if ((num >= 0 && num > max) || (num < 0 && num < min)) {
1372 state = QValidator::Invalid;
1373 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1375 state = QValidator::Intermediate;
1376 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Intermediate";
1382 if (state != QValidator::Acceptable) {
1383 num = max > 0 ? min : max;
1386 input = prefix + copy + suffix;
1388 cachedState = state;
1389 cachedValue = QVariant(num);
1390 return QVariant(num);