/* ************************************************************************** description -------------------- copyright : (C) 2000-2001 by Andreas Zehender email : zehender@kde.org ************************************************************************** ************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * **************************************************************************/ #include "pmlineedits.h" #include #include PMFloatEdit::PMFloatEdit( TQWidget* parent, const char* name /*= 0*/ ) : TQLineEdit( parent, name ) { m_bCheckLower = false; m_bCheckUpper = false; m_lowerValue = 0; m_upperValue = 0; m_lowerOp = OpGreaterEqual; m_upperOp = OpLessEqual; connect( this, TQ_SIGNAL( textChanged( const TQString& ) ), TQ_SLOT( slotEditTextChanged( const TQString& ) ) ); } void PMFloatEdit::setValidation( bool checkLower, double lowerValue, bool checkUpper, double upperValue ) { m_bCheckLower = checkLower; m_bCheckUpper = checkUpper; m_lowerValue = lowerValue; m_upperValue = upperValue; } void PMFloatEdit::setValidationOperator( ValidationOp l, ValidationOp u ) { m_lowerOp = l; m_upperOp = u; } bool PMFloatEdit::isDataValid( ) { bool ok = true; double d; d = text( ).toDouble( &ok ); if( ok ) { if( m_bCheckLower ) ok = ok && ( m_lowerOp == OpGreaterEqual ? d >= m_lowerValue : d > m_lowerValue ); if( m_bCheckUpper ) ok = ok && ( m_upperOp == OpLessEqual ? d <= m_upperValue : d < m_upperValue ); if( !ok ) { if( m_bCheckLower && m_bCheckUpper ) KMessageBox::error( this, i18n( "Please enter a float value " "between %1 and %2" ) .arg( m_lowerValue ).arg( m_upperValue ), i18n( "Error" ) ); else if( m_bCheckLower ) { if( m_lowerOp == OpGreaterEqual ) KMessageBox::error( this, i18n( "Please enter a float value " ">= %1" ).arg( m_lowerValue ), i18n( "Error" ) ); else KMessageBox::error( this, i18n( "Please enter a float value " "> %1" ).arg( m_lowerValue ), i18n( "Error" ) ); } else { if( m_upperOp == OpLessEqual ) KMessageBox::error( this, i18n( "Please enter a float value " "<= %1" ).arg( m_upperValue ), i18n( "Error" ) ); else KMessageBox::error( this, i18n( "Please enter a float value " "< %1" ).arg( m_upperValue ), i18n( "Error" ) ); } } } else { KMessageBox::error( this, i18n( "Please enter a valid float value!" ), i18n( "Error" ) ); } if( !ok ) { setFocus( ); selectAll( ); } return ok; } double PMFloatEdit::value( ) const { return text( ).toDouble( ); } void PMFloatEdit::setValue( double d, int precision ) { TQString str; str.setNum( d, 'g', precision ); setText( str ); } void PMFloatEdit::slotEditTextChanged( const TQString& /*t*/ ) { emit dataChanged( ); } PMIntEdit::PMIntEdit( TQWidget* parent, const char* name /*= 0*/ ) : TQLineEdit( parent, name ) { m_bCheckLower = false; m_bCheckUpper = false; m_lowerValue = 0; m_upperValue = 0; connect( this, TQ_SIGNAL( textChanged( const TQString& ) ), TQ_SLOT( slotEditTextChanged( const TQString& ) ) ); } void PMIntEdit::setValidation( bool checkLower, int lowerValue, bool checkUpper, int upperValue ) { m_bCheckLower = checkLower; m_bCheckUpper = checkUpper; m_lowerValue = lowerValue; m_upperValue = upperValue; } bool PMIntEdit::isDataValid( ) { bool ok = true; int i; double d; i = text( ).toInt( &ok ); if( !ok ) { d = text( ).toDouble( &ok ); if( ok ) { i = ( int ) d; TQString str; bool b = signalsBlocked( ); blockSignals( true ); str.setNum( i ); setText( str ); blockSignals( b ); } } if( ok ) { if( m_bCheckLower ) ok = ok && ( i >= m_lowerValue ); if( m_bCheckUpper ) ok = ok && ( i <= m_upperValue ); if( !ok ) { if( m_bCheckLower && m_bCheckUpper ) KMessageBox::error( this, i18n( "Please enter an integer value " "between %1 and %2" ) .arg( m_lowerValue ).arg( m_upperValue ), i18n( "Error" ) ); else if( m_bCheckLower ) KMessageBox::error( this, i18n( "Please enter an integer value " ">= %1" ).arg( m_lowerValue ), i18n( "Error" ) ); else KMessageBox::error( this, i18n( "Please enter an integer value " "<= %1" ).arg( m_upperValue ), i18n( "Error" ) ); } } else { KMessageBox::error( this, i18n( "Please enter a valid integer value!" ), i18n( "Error" ) ); } if( !ok ) { setFocus( ); selectAll( ); } return ok; } int PMIntEdit::value( ) const { return text( ).toInt( ); } void PMIntEdit::setValue( int i ) { TQString str; str.setNum( i ); setText( str ); } void PMIntEdit::slotEditTextChanged( const TQString& /*t*/ ) { emit dataChanged( ); } #include "pmlineedits.moc"