27 #include <QtGui/QWidget>
28 #include <QtCore/QCharRef>
37 class KIntValidator::KIntValidatorPrivate
40 KIntValidatorPrivate()
41 : _base(0), _min(0), _max(0)
49 :
QValidator(parent), d(new KIntValidatorPrivate)
55 :
QValidator(parent), d(new KIntValidatorPrivate)
72 newStr = str.trimmed();
74 newStr = newStr.toUpper();
76 if (newStr == QLatin1String(
"-")) {
77 if ((d->_min || d->_max) && d->_min >= 0)
80 return QValidator::Acceptable;
82 else if (!newStr.isEmpty())
83 val = newStr.toInt(&ok, d->_base);
90 return QValidator::Invalid;
92 if ((! d->_min && ! d->_max) || (val >= d->_min && val <= d->_max))
93 return QValidator::Acceptable;
95 if (d->_max && d->_min >= 0 && val < 0)
96 return QValidator::Invalid;
98 return QValidator::Intermediate;
105 QValidator::State state;
109 if (state == QValidator::Invalid || state == QValidator::Acceptable)
112 if (! d->_min && ! d->_max)
115 val = str.toInt(0, d->_base);
117 if (val < d->_min) val = d->_min;
118 if (val > d->_max) val = d->_max;
120 str.setNum(val, d->_base);
128 if (d->_max < d->_min)
135 if (d->_base < 2) d->_base = 2;
136 if (d->_base > 36) d->_base = 36;
159 class KFloatValidator::KFloatValidatorPrivate
162 KFloatValidatorPrivate()
172 :
QValidator(parent), d(new KFloatValidatorPrivate)
174 d->acceptLocalizedNumbers=
false;
178 :
QValidator(parent), d(new KFloatValidatorPrivate)
180 d->acceptLocalizedNumbers=
false;
185 :
QValidator(parent), d(new KFloatValidatorPrivate)
187 d->acceptLocalizedNumbers = localeAware;
198 d->acceptLocalizedNumbers=_b;
203 return d->acceptLocalizedNumbers;
211 newStr = str.trimmed();
213 if (newStr == QLatin1String(
"-")) {
214 if ((d->_min || d->_max) && d->_min >= 0)
217 return QValidator::Acceptable;
220 return QValidator::Acceptable;
221 else if (!newStr.isEmpty())
223 val = newStr.toDouble(&ok);
224 if(!ok && d->acceptLocalizedNumbers)
233 return QValidator::Invalid;
235 if (( !d->_min && !d->_max) || (val >= d->_min && val <= d->_max))
236 return QValidator::Acceptable;
238 if (d->_max && d->_min >= 0 && val < 0)
239 return QValidator::Invalid;
241 if ( (d->_min || d->_max) && (val < d->_min || val > d->_max))
242 return QValidator::Invalid;
244 return QValidator::Intermediate;
251 QValidator::State state;
255 if (state == QValidator::Invalid || state == QValidator::Acceptable)
258 if (! d->_min && ! d->_max)
261 val = str.toDouble();
263 if (val < d->_min) val = d->_min;
264 if (val > d->_max) val = d->_max;
274 if (d->_max < d->_min)
295 class KDoubleValidator::KDoubleValidatorPrivate {
309 :
QDoubleValidator( bottom, top, decimals, parent ), d( new KDoubleValidatorPrivate() )
319 return d->acceptLocalizedNumbers;
323 d->acceptLocalizedNumbers = accept;
342 for (
int idx = s.indexOf( p ) ; idx >= 0 ; idx = s.indexOf( p, idx ) )
343 s.remove( idx, p.length() );
347 for (
int idx = s.indexOf( t ) ; idx >= 0 ; idx = s.indexOf( t, idx ) )
348 s.remove( idx, t.length() );
351 if ( ( !n.isEmpty() && n.indexOf(
'.') != -1 ) ||
352 ( !d.isEmpty() && d.indexOf(
'-') != -1 ) ) {
354 kWarning() <<
"KDoubleValidator: decimal symbol contains '-' or "
355 "negative sign contains '.' -> improve algorithm" << endl;
359 if ( !d.isEmpty() && d !=
"." )
360 for (
int idx = s.indexOf( d ) ; idx >= 0 ; idx = s.indexOf( d, idx + 1 ) )
361 s.replace( idx, d.length(),
'.');
363 if ( !n.isEmpty() && n !=
"-" )
364 for (
int idx = s.indexOf( n ) ; idx >= 0 ; idx = s.indexOf( n, idx + 1 ) )
365 s.replace( idx, n.length(),
'-' );
371 #include "knumvalidator.moc"