You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegraphics/kpovmodeler/pmlineedits.cpp

230 lines
6.4 KiB

/*
**************************************************************************
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 <tdemessagebox.h>
#include <tdelocale.h>
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"