diff options
Diffstat (limited to 'kexi/3rdparty/kolibs/koUnit.cpp')
-rw-r--r-- | kexi/3rdparty/kolibs/koUnit.cpp | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/kexi/3rdparty/kolibs/koUnit.cpp b/kexi/3rdparty/kolibs/koUnit.cpp new file mode 100644 index 00000000..a2eb289a --- /dev/null +++ b/kexi/3rdparty/kolibs/koUnit.cpp @@ -0,0 +1,219 @@ +/* This file is part of the KDE project + Copyright (C) 2001 David Faure <[email protected]> + Copyright (C) 2004, Nicolas GOUTTE <[email protected]> + + This library 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 library 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 library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +//#include <KoGlobal.h> +#include "KoUnit.h" +#ifndef SIMPLE_KOLIBS +# include <KoXmlWriter.h> +#endif + +#include <tdelocale.h> +#include <tdeglobal.h> +#include <kdebug.h> + +#include <tqregexp.h> +#include <tqdom.h> + +TQStringList KoUnit::listOfUnitName() +{ + TQStringList lst; + for ( uint i = 0 ; i <= KoUnit::U_LASTUNIT ; ++i ) + { + KoUnit::Unit unit = static_cast<KoUnit::Unit>( i ); + lst.append( KoUnit::unitDescription( unit ) ); + } + return lst; +} + +TQString KoUnit::unitDescription( Unit _unit ) +{ + switch ( _unit ) + { + case KoUnit::U_MM: + return i18n("Millimeters (mm)"); + case KoUnit::U_CM: + return i18n("Centimeters (cm)"); + case KoUnit::U_DM: + return i18n("Decimeters (dm)"); + case KoUnit::U_INCH: + return i18n("Inches (in)"); + case KoUnit::U_PI: + return i18n("Pica (pi)"); + case KoUnit::U_DD: + return i18n("Didot (dd)"); + case KoUnit::U_CC: + return i18n("Cicero (cc)"); + case KoUnit::U_PT: + return i18n("Points (pt)" ); + default: + return i18n("Error!"); + } +} + +double KoUnit::toUserValue( double ptValue, Unit unit ) +{ + switch ( unit ) { + case U_MM: + return toMM( ptValue ); + case U_CM: + return toCM( ptValue ); + case U_DM: + return toDM( ptValue ); + case U_INCH: + return toInch( ptValue ); + case U_PI: + return toPI( ptValue ); + case U_DD: + return toDD( ptValue ); + case U_CC: + return toCC( ptValue ); + case U_PT: + default: + return toPoint( ptValue ); + } +} + +double KoUnit::ptToUnit( const double ptValue, const Unit unit ) +{ + switch ( unit ) + { + case U_MM: + return POINT_TO_MM( ptValue ); + case U_CM: + return POINT_TO_CM( ptValue ); + case U_DM: + return POINT_TO_DM( ptValue ); + case U_INCH: + return POINT_TO_INCH( ptValue ); + case U_PI: + return POINT_TO_PI( ptValue ); + case U_DD: + return POINT_TO_DD( ptValue ); + case U_CC: + return POINT_TO_CC( ptValue ); + case U_PT: + default: + return ptValue; + } +} + +TQString KoUnit::toUserStringValue( double ptValue, Unit unit ) +{ + return TDEGlobal::locale()->formatNumber( toUserValue( ptValue, unit ) ); +} + +double KoUnit::fromUserValue( double value, Unit unit ) +{ + switch ( unit ) { + case U_MM: + return MM_TO_POINT( value ); + case U_CM: + return CM_TO_POINT( value ); + case U_DM: + return DM_TO_POINT( value ); + case U_INCH: + return INCH_TO_POINT( value ); + case U_PI: + return PI_TO_POINT( value ); + case U_DD: + return DD_TO_POINT( value ); + case U_CC: + return CC_TO_POINT( value ); + case U_PT: + default: + return value; + } +} + +double KoUnit::fromUserValue( const TQString& value, Unit unit, bool* ok ) +{ + return fromUserValue( TDEGlobal::locale()->readNumber( value, ok ), unit ); +} + +double KoUnit::parseValue( TQString value, double defaultVal ) +{ + value.simplifyWhiteSpace(); + value.remove( ' ' ); + + if( value.isEmpty() ) + return defaultVal; + + int index = value.find( TQRegExp( "[a-z]+$" ) ); + if ( index == -1 ) + return value.toDouble(); + + TQString unit = value.mid( index ); + value.truncate ( index ); + double val = value.toDouble(); + + if ( unit == "pt" ) + return val; + + bool ok; + Unit u = KoUnit::unit( unit, &ok ); + if( ok ) + return fromUserValue( val, u ); + + if( unit == "m" ) + return fromUserValue( val * 10.0, U_DM ); + else if( unit == "km" ) + return fromUserValue( val * 10000.0, U_DM ); + kdWarning() << "KoUnit::parseValue: Unit " << unit << " is not supported, please report." << endl; + + // TODO : add support for mi/ft ? + return defaultVal; +} + +KoUnit::Unit KoUnit::unit( const TQString &_unitName, bool* ok ) +{ + if ( ok ) + *ok = true; + if ( _unitName == TQString::fromLatin1( "mm" ) ) return U_MM; + if ( _unitName == TQString::fromLatin1( "cm" ) ) return U_CM; + if ( _unitName == TQString::fromLatin1( "dm" ) ) return U_DM; + if ( _unitName == TQString::fromLatin1( "in" ) + || _unitName == TQString::fromLatin1("inch") /*compat*/ ) return U_INCH; + if ( _unitName == TQString::fromLatin1( "pi" ) ) return U_PI; + if ( _unitName == TQString::fromLatin1( "dd" ) ) return U_DD; + if ( _unitName == TQString::fromLatin1( "cc" ) ) return U_CC; + if ( _unitName == TQString::fromLatin1( "pt" ) ) return U_PT; + if ( ok ) + *ok = false; + return U_PT; +} + +TQString KoUnit::unitName( Unit _unit ) +{ + if ( _unit == U_MM ) return TQString::fromLatin1( "mm" ); + if ( _unit == U_CM ) return TQString::fromLatin1( "cm" ); + if ( _unit == U_DM ) return TQString::fromLatin1( "dm" ); + if ( _unit == U_INCH ) return TQString::fromLatin1( "in" ); + if ( _unit == U_PI ) return TQString::fromLatin1( "pi" ); + if ( _unit == U_DD ) return TQString::fromLatin1( "dd" ); + if ( _unit == U_CC ) return TQString::fromLatin1( "cc" ); + return TQString::fromLatin1( "pt" ); +} + +#ifndef SIMPLE_KOLIBS +void KoUnit::saveOasis(KoXmlWriter* settingsWriter, Unit _unit) +{ + settingsWriter->addConfigItem( "unit", unitName(_unit) ); +} +#endif |