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.
koffice/kexi/kexiutils/longlongvalidator.cpp

137 lines
2.9 KiB

/* This file is part of the KDE project
Copyright (C) 2006 Jaroslaw Staniek <js@iidea.pl>
Based on KIntValidator code by Glen Parker <glenebob@nwlink.com>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include "longlongvalidator.h"
#include <tqwidget.h>
using namespace KexiUtils;
LongLongValidator::LongLongValidator( TQWidget * parent, int base, const char * name )
: TQValidator(parent, name)
, m_min(0), m_max(0)
{
setBase(base);
}
LongLongValidator::LongLongValidator( TQ_LLONG bottom, TQ_LLONG top, TQWidget * parent, int base, const char * name )
: TQValidator(parent, name)
{
setBase(base);
setRange( bottom, top );
}
LongLongValidator::~LongLongValidator()
{
}
TQValidator::State LongLongValidator::validate( TQString &str, int & ) const
{
bool ok;
TQ_LLONG val = 0;
TQString newStr;
newStr = str.stripWhiteSpace();
if (m_base > 10)
newStr = newStr.upper();
if (newStr == TQString::fromLatin1("-")) {// a special case
if ((m_min || m_max) && m_min >= 0)
ok = false;
else
return TQValidator::Acceptable;
}
else if (!newStr.isEmpty())
val = newStr.toLongLong(&ok, m_base);
else {
val = 0;
ok = true;
}
if (! ok)
return TQValidator::Invalid;
if ((! m_min && ! m_max) || (val >= m_min && val <= m_max))
return TQValidator::Acceptable;
if (m_max && m_min >= 0 && val < 0)
return TQValidator::Invalid;
return TQValidator::Valid;
}
void LongLongValidator::fixup( TQString &str ) const
{
int dummy;
TQ_LLONG val;
TQValidator::State state;
state = validate(str, dummy);
if (state == TQValidator::Invalid || state == TQValidator::Acceptable)
return;
if (! m_min && ! m_max)
return;
val = str.toLongLong(0, m_base);
if (val < m_min)
val = m_min;
if (val > m_max)
val = m_max;
str.setNum(val, m_base);
}
void LongLongValidator::setRange( TQ_LLONG bottom, TQ_LLONG top )
{
m_min = bottom;
m_max = top;
if (m_max < m_min)
m_max = m_min;
}
void LongLongValidator::setBase( int base )
{
m_base = base;
if (m_base < 2)
m_base = 2;
if (m_base > 36)
m_base = 36;
}
TQ_LLONG LongLongValidator::bottom() const
{
return m_min;
}
TQ_LLONG LongLongValidator::top() const
{
return m_max;
}
int LongLongValidator::base() const
{
return m_base;
}