1079 QValidator::State &state)
const
1081 if (cachedText == input && !input.isEmpty()) {
1082 state = cachedState;
1083 QSBDEBUG() <<
"cachedText was '" << cachedText <<
"' state was "
1084 << state <<
" and value was " << cachedValue;
1088 const int max = maximum.toInt();
1089 const int min = minimum.toInt();
1091 QString copy = stripped(input, &pos);
1092 QSBDEBUG() <<
"input" << input <<
"copy" << copy;
1093 state = QValidator::Acceptable;
1096 if (max != min && (copy.isEmpty()
1097 || (min < 0 && copy ==
"-"_L1)
1098 || (max >= 0 && copy ==
"+"_L1))) {
1099 state = QValidator::Intermediate;
1100 QSBDEBUG() << __FILE__ << __LINE__<<
"num is set to" << num;
1101 }
else if (copy.startsWith(u'-') && min >= 0) {
1102 state = QValidator::Invalid;
1108 num = locale.toInt(copy, &ok);
1109 if (!ok && (max >= 1000 || min <= -1000)) {
1110 const QString sep(locale.groupSeparator());
1111 const QString doubleSep = sep + sep;
1112 if (copy.contains(sep) && !copy.contains(doubleSep)) {
1113 QString copy2 = copy;
1115 num = locale.toInt(copy2, &ok);
1119 QSBDEBUG() << __FILE__ << __LINE__<<
"num is set to" << num;
1121 state = QValidator::Invalid;
1122 }
else if (num >= min && num <= max) {
1123 state = QValidator::Acceptable;
1124 }
else if (max == min) {
1125 state = QValidator::Invalid;
1127 if ((num >= 0 && num > max) || (num < 0 && num < min)) {
1128 state = QValidator::Invalid;
1129 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1131 state = QValidator::Intermediate;
1132 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Intermediate";
1136 if (state != QValidator::Acceptable)
1137 num = max > 0 ? min : max;
1138 input = prefix + copy + suffix;
1140 cachedState = state;
1141 cachedValue = QVariant((
int)num);
1143 QSBDEBUG() <<
"cachedText is set to '" << cachedText <<
"' state is set to "
1144 << state <<
" and value is set to " << cachedValue;
1232 QValidator::State &state)
const
1234 if (cachedText == input && !input.isEmpty()) {
1235 state = cachedState;
1236 QSBDEBUG() <<
"cachedText was '" << cachedText <<
"' state was "
1237 << state <<
" and value was " << cachedValue;
1240 const double max = maximum.toDouble();
1241 const double min = minimum.toDouble();
1243 QString copy = stripped(input, &pos);
1244 QSBDEBUG() <<
"input" << input <<
"copy" << copy;
1245 int len = copy.size();
1247 const bool plus = max >= 0;
1248 const bool minus = min <= 0;
1250 const QString group(locale.groupSeparator());
1251 const uint groupUcs = (group.isEmpty() ? 0 :
1252 (group.size() > 1 && group.at(0).isHighSurrogate()
1253 ? QChar::surrogateToUcs4(group.at(0), group.at(1))
1254 : group.at(0).unicode()));
1257 state = max != min ? QValidator::Intermediate : QValidator::Invalid;
1260 if (copy.at(0) == locale.decimalPoint()
1261 || (plus && copy.at(0) == u'+')
1262 || (minus && copy.at(0) == u'-')) {
1263 state = QValidator::Intermediate;
1268 if (copy.at(1) == locale.decimalPoint()
1269 && ((plus && copy.at(0) == u'+') || (minus && copy.at(0) == u'-'))) {
1270 state = QValidator::Intermediate;
1277 if (groupUcs && copy.startsWith(group)) {
1278 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1279 state = QValidator::Invalid;
1281 }
else if (len > 1) {
1282 const int dec = copy.indexOf(locale.decimalPoint());
1284 if (dec + 1 < copy.size() && copy.at(dec + 1) == locale.decimalPoint() && pos == dec + 1) {
1285 copy.remove(dec + 1, 1);
1288 if (copy.size() - dec >
decimals + 1) {
1289 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1290 state = QValidator::Invalid;
1293 for (
int i = dec + 1; i < copy.size(); ++i) {
1294 if (copy.at(i).isSpace()
1295 || (groupUcs && QStringView{copy}.sliced(i).startsWith(group))) {
1296 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1297 state = QValidator::Invalid;
1302 const QChar last = copy.back();
1303 const bool groupEnd = groupUcs && copy.endsWith(group);
1304 const QStringView head(copy.constData(), groupEnd ? len - group.size() : len - 1);
1305 const QChar secondLast = head.back();
1306 if ((groupEnd || last.isSpace())
1307 && ((groupUcs && head.endsWith(group)) || secondLast.isSpace())) {
1308 state = QValidator::Invalid;
1309 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1311 }
else if (last.isSpace() && (!QChar::isSpace(groupUcs) || secondLast.isSpace())) {
1312 state = QValidator::Invalid;
1313 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1321 num = locale.toDouble(copy, &ok);
1322 QSBDEBUG() << __FILE__ << __LINE__ << locale << copy << num << ok;
1325 if (QChar::isPrint(groupUcs)) {
1326 if (max < 1000 && min > -1000 && groupUcs && copy.contains(group)) {
1327 state = QValidator::Invalid;
1328 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1332 const int len = copy.size();
1333 for (
int i = 0; i < len - 1;) {
1334 if (groupUcs && QStringView{copy}.sliced(i).startsWith(group)) {
1335 if (QStringView(copy).mid(i + group.size()).startsWith(group)) {
1336 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1337 state = QValidator::Invalid;
1346 QString copy2 = copy;
1348 copy2.remove(group);
1349 num = locale.toDouble(copy2, &ok);
1350 QSBDEBUG() << group << num << copy2 << ok;
1353 state = QValidator::Invalid;
1354 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1361 state = QValidator::Invalid;
1362 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1363 }
else if (num >= min && num <= max) {
1364 state = QValidator::Acceptable;
1365 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Acceptable";
1366 }
else if (max == min) {
1367 state = QValidator::Invalid;
1368 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1370 if ((num >= 0 && num > max) || (num < 0 && num < min)) {
1371 state = QValidator::Invalid;
1372 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Invalid";
1374 state = QValidator::Intermediate;
1375 QSBDEBUG() << __FILE__ << __LINE__<<
"state is set to Intermediate";
1381 if (state != QValidator::Acceptable) {
1382 num = max > 0 ? min : max;
1385 input = prefix + copy + suffix;
1387 cachedState = state;
1388 cachedValue = QVariant(num);
1389 return QVariant(num);