/* This file is part of the KDE project Copyright (C) 2006 Jaroslaw Staniek Based on KIntValidator code by Glen Parker 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 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; }