koUnit.cc
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "koUnit.h"
00022 #include <klocale.h>
00023 #include <kglobal.h>
00024 #include <qregexp.h>
00025 #include <kdebug.h>
00026
00027 QStringList KoUnit::listOfUnitName()
00028 {
00029 QStringList lst;
00030 for ( uint i = 0 ; i <= KoUnit::U_LASTUNIT ; ++i )
00031 {
00032 KoUnit::Unit unit = static_cast<KoUnit::Unit>( i );
00033 lst.append( KoUnit::unitDescription( unit ) );
00034 }
00035 return lst;
00036 }
00037
00038 QString KoUnit::unitDescription( Unit _unit )
00039 {
00040 switch ( _unit )
00041 {
00042 case KoUnit::U_MM:
00043 return i18n("Millimeters (mm)");
00044 case KoUnit::U_CM:
00045 return i18n("Centimeters (cm)");
00046 case KoUnit::U_DM:
00047 return i18n("Decimeters (dm)");
00048 case KoUnit::U_INCH:
00049 return i18n("Inches (in)");
00050 case KoUnit::U_PI:
00051 return i18n("Pica (pi)");
00052 case KoUnit::U_DD:
00053 return i18n("Didot (dd)");
00054 case KoUnit::U_CC:
00055 return i18n("Cicero (cc)");
00056 case KoUnit::U_PT:
00057 return i18n("Points (pt)" );
00058 default:
00059 return i18n("Error!");
00060 }
00061 }
00062
00063 double KoUnit::ptToUnit( double ptValue, Unit unit )
00064 {
00065 switch ( unit ) {
00066 case U_MM:
00067 return toMM( ptValue );
00068 case U_CM:
00069 return toCM( ptValue );
00070 case U_DM:
00071 return toDM( ptValue );
00072 case U_INCH:
00073 return toInch( ptValue );
00074 case U_PI:
00075 return toPI( ptValue );
00076 case U_DD:
00077 return toDD( ptValue );
00078 case U_CC:
00079 return toCC( ptValue );
00080 case U_PT:
00081 default:
00082 return toPoint( ptValue );
00083 }
00084 }
00085
00086 QString KoUnit::userValue( double ptValue, Unit unit )
00087 {
00088 return KGlobal::locale()->formatNumber( ptToUnit( ptValue, unit ) );
00089 }
00090
00091 double KoUnit::ptFromUnit( double value, Unit unit )
00092 {
00093 switch ( unit ) {
00094 case U_MM:
00095 return MM_TO_POINT( value );
00096 case U_CM:
00097 return CM_TO_POINT( value );
00098 case U_DM:
00099 return DM_TO_POINT( value );
00100 case U_INCH:
00101 return INCH_TO_POINT( value );
00102 case U_PI:
00103 return PI_TO_POINT( value );
00104 case U_DD:
00105 return DD_TO_POINT( value );
00106 case U_CC:
00107 return CC_TO_POINT( value );
00108 case U_PT:
00109 default:
00110 return value;
00111 }
00112 }
00113
00114 double KoUnit::fromUserValue( const QString& value, Unit unit )
00115 {
00116 bool ok;
00117 return ptFromUnit( KGlobal::locale()->readNumber( value, &ok ), unit );
00118 }
00119
00120 double KoUnit::parseValue( QString value, double defaultVal )
00121 {
00122 value.simplifyWhiteSpace();
00123 value.remove( ' ' );
00124
00125 if( value.isEmpty() )
00126 return defaultVal;
00127
00128 int index = value.find( QRegExp( "[a-z]+$" ) );
00129 if ( index == -1 )
00130 return value.toDouble();
00131
00132 QString unit = value.mid( index );
00133 value.truncate ( index );
00134 double val = value.toDouble();
00135
00136 if ( unit == "pt" )
00137 return val;
00138
00139 Unit u = KoUnit::unit( unit );
00140 if( u != U_PT )
00141 return ptFromUnit( val, u );
00142 if( unit == "m" )
00143 return ptFromUnit( val * 10.0, U_DM );
00144 else if( unit == "km" )
00145 return ptFromUnit( val * 10000.0, U_DM );
00146 kdWarning() << "KoUnit::parseValue: Unit " << unit << "is not supported, please report." << endl;
00147
00148
00149 return defaultVal;
00150 }
00151
This file is part of the documentation for lib Library Version 1.3.5.