QValidator::State KoUnitDoubleSpinBox::validate(QString &input, int &pos) const { #ifdef DEBUG_VALIDATOR kDebug(30004) <<"KoUnitDoubleSpinBox::validate :" << input <<" at" << pos; #else Q_UNUSED(pos); #endif QRegExp regexp ("([ a-zA-Z]+)$"); // Letters or spaces at end const int res = input.indexOf( regexp ); if ( res == -1 ) { // Nothing like an unit? The user is probably editing the unit #ifdef DEBUG_VALIDATOR kDebug(30004) <<"Intermediate (no unit)"; #endif return QValidator::Intermediate; } // ### TODO: are all the QString::trimmed really necessary? const QString number ( input.left( res ).trimmed() ); const QString unitName ( regexp.cap( 1 ).trimmed().toLower() ); #ifdef DEBUG_VALIDATOR kDebug(30004) <<"Split:" << number <<":" << unitName <<":"; #endif const double value = valueFromText( number ); double newVal = 0.0; if( value != NAN ) { bool ok; KoUnit unit = KoUnit::unit( unitName, &ok ); if ( ok ) newVal = unit.fromUserValue( value ); else { // Probably the user is trying to edit the unit #ifdef DEBUG_VALIDATOR kDebug(30004) <<"Intermediate (unknown unit)"; #endif return QValidator::Intermediate; } } else { kWarning(30004) << "Not a number: " << number; return QValidator::Invalid; } newVal = KoUnit::ptToUnit( newVal, d->unit ); //input = textFromValue( newVal ); // don't overwrite for now; the effect is not exactly what I expect... return QValidator::Acceptable; }
void ULongLongSpinBox::onEditingFinished() { qulonglong value = valueFromText(text()); qulonglong clampedValue = std::min(m_max, std::max(value, m_min)); if (clampedValue == m_value) return; m_value = clampedValue; emit valueChanged(m_value); }
// Textual value change notification. void qtractorTimeSpinBox::valueChangedSlot ( const QString& sText ) { #ifdef CONFIG_DEBUG_0 qDebug("qtractorTimeSpinBox[%p]::valueChangedSlot(\"%s\")", this, sText.toUtf8().constData()); #endif // Kind of interim fixup. if (updateValue(valueFromText(sText), false)) { // Just forward this one... emit valueChanged(sText); } }
// Pseudo-fixup slot. void qtractorTimeSpinBox::editingFinishedSlot (void) { #ifdef CONFIG_DEBUG_0 qDebug("qtractorTimeSpinBox[%p]::editingFinishedSlot()", this); #endif if (m_iValueChanged > 0) { // Kind of final fixup. if (updateValue(valueFromText(), true)) { // Rephrase text display... updateText(); } } }
// Value/text format converters. unsigned long qtractorTimeSpinBox::valueFromText (void) const { return valueFromText(QAbstractSpinBox::text()); }