19f62ea84SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 39f62ea84SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 49f62ea84SAndrew Rist * or more contributor license agreements. See the NOTICE file 59f62ea84SAndrew Rist * distributed with this work for additional information 69f62ea84SAndrew Rist * regarding copyright ownership. The ASF licenses this file 79f62ea84SAndrew Rist * to you under the Apache License, Version 2.0 (the 89f62ea84SAndrew Rist * "License"); you may not use this file except in compliance 99f62ea84SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 119f62ea84SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 139f62ea84SAndrew Rist * Unless required by applicable law or agreed to in writing, 149f62ea84SAndrew Rist * software distributed under the License is distributed on an 159f62ea84SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 169f62ea84SAndrew Rist * KIND, either express or implied. See the License for the 179f62ea84SAndrew Rist * specific language governing permissions and limitations 189f62ea84SAndrew Rist * under the License. 19cdf0e10cSrcweir * 209f62ea84SAndrew Rist *************************************************************/ 219f62ea84SAndrew Rist 229f62ea84SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_vcl.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <sot/object.hxx> 28cdf0e10cSrcweir #define _TOOLS_BIGINT 29cdf0e10cSrcweir #include <sot/factory.hxx> 30cdf0e10cSrcweir #include <tools/debug.hxx> 31cdf0e10cSrcweir #include <tools/bigint.hxx> 32cdf0e10cSrcweir 33cdf0e10cSrcweir #include <tools/rc.h> 34cdf0e10cSrcweir 35cdf0e10cSrcweir #include <vcl/event.hxx> 36cdf0e10cSrcweir #include <vcl/svapp.hxx> 37cdf0e10cSrcweir #include <vcl/longcurr.hxx> 38cdf0e10cSrcweir 39cdf0e10cSrcweir #include <svdata.hxx> 40cdf0e10cSrcweir 41cdf0e10cSrcweir #include <unotools/localedatawrapper.hxx> 42cdf0e10cSrcweir 43cdf0e10cSrcweir 44cdf0e10cSrcweir // ======================================================================= 45cdf0e10cSrcweir 46cdf0e10cSrcweir #define FORMAT_LONGCURRENCY 4 47cdf0e10cSrcweir 48cdf0e10cSrcweir // ======================================================================= 49cdf0e10cSrcweir 50cdf0e10cSrcweir static BigInt ImplPower10( sal_uInt16 n ) 51cdf0e10cSrcweir { 52cdf0e10cSrcweir sal_uInt16 i; 53cdf0e10cSrcweir BigInt nValue = 1; 54cdf0e10cSrcweir 55cdf0e10cSrcweir for ( i=0; i < n; i++ ) 56cdf0e10cSrcweir nValue *= 10; 57cdf0e10cSrcweir 58cdf0e10cSrcweir return nValue; 59cdf0e10cSrcweir } 60cdf0e10cSrcweir 61cdf0e10cSrcweir // ----------------------------------------------------------------------- 62cdf0e10cSrcweir 63cdf0e10cSrcweir static XubString ImplGetCurr( const LocaleDataWrapper& rLocaleDataWrapper, const BigInt &rNumber, sal_uInt16 nDigits, const String& rCurrSymbol, sal_Bool bShowThousandSep ) 64cdf0e10cSrcweir { 65cdf0e10cSrcweir DBG_ASSERT( nDigits < 10, "LongCurrency duerfen nur maximal 9 Nachkommastellen haben" ); 66cdf0e10cSrcweir 67cdf0e10cSrcweir if ( rNumber.IsZero() || (long)rNumber ) 68cdf0e10cSrcweir return rLocaleDataWrapper.getCurr( (long)rNumber, nDigits, rCurrSymbol, bShowThousandSep ); 69cdf0e10cSrcweir 70cdf0e10cSrcweir BigInt aTmp( ImplPower10( nDigits ) ); 71cdf0e10cSrcweir BigInt aInteger( rNumber ); 72cdf0e10cSrcweir aInteger.Abs(); 73cdf0e10cSrcweir aInteger /= aTmp; 74cdf0e10cSrcweir BigInt aFraction( rNumber ); 75cdf0e10cSrcweir aFraction.Abs(); 76cdf0e10cSrcweir aFraction %= aTmp; 77cdf0e10cSrcweir if ( !aInteger.IsZero() ) 78cdf0e10cSrcweir { 79cdf0e10cSrcweir aFraction += aTmp; 80cdf0e10cSrcweir aTmp = 1000000000L; 81cdf0e10cSrcweir } 82cdf0e10cSrcweir if ( rNumber.IsNeg() ) 83cdf0e10cSrcweir aFraction *= -1; 84cdf0e10cSrcweir 85cdf0e10cSrcweir XubString aTemplate = rLocaleDataWrapper.getCurr( (long)aFraction, nDigits, rCurrSymbol, bShowThousandSep ); 86cdf0e10cSrcweir while( !aInteger.IsZero() ) 87cdf0e10cSrcweir { 88cdf0e10cSrcweir aFraction = aInteger; 89cdf0e10cSrcweir aFraction %= aTmp; 90cdf0e10cSrcweir aInteger /= aTmp; 91cdf0e10cSrcweir if( !aInteger.IsZero() ) 92cdf0e10cSrcweir aFraction += aTmp; 93cdf0e10cSrcweir 94cdf0e10cSrcweir XubString aFractionStr = rLocaleDataWrapper.getNum( (long)aFraction, 0 ); 95cdf0e10cSrcweir 96cdf0e10cSrcweir xub_StrLen nSPos = aTemplate.Search( '1' ); 97cdf0e10cSrcweir if ( aFractionStr.Len() == 1 ) 98cdf0e10cSrcweir aTemplate.SetChar( nSPos, aFractionStr.GetChar( 0 ) ); 99cdf0e10cSrcweir else 100cdf0e10cSrcweir { 101cdf0e10cSrcweir aTemplate.Erase( nSPos, 1 ); 102cdf0e10cSrcweir aTemplate.Insert( aFractionStr, nSPos ); 103cdf0e10cSrcweir } 104cdf0e10cSrcweir } 105cdf0e10cSrcweir 106cdf0e10cSrcweir return aTemplate; 107cdf0e10cSrcweir } 108cdf0e10cSrcweir 109cdf0e10cSrcweir // ----------------------------------------------------------------------- 110cdf0e10cSrcweir 111cdf0e10cSrcweir static sal_Bool ImplNumericProcessKeyInput( Edit*, const KeyEvent& rKEvt, 112cdf0e10cSrcweir sal_Bool bStrictFormat, sal_Bool bThousandSep, 113cdf0e10cSrcweir const LocaleDataWrapper& rLocaleDataWrapper ) 114cdf0e10cSrcweir { 115cdf0e10cSrcweir if ( !bStrictFormat ) 116cdf0e10cSrcweir return sal_False; 117cdf0e10cSrcweir else 118cdf0e10cSrcweir { 119cdf0e10cSrcweir sal_Unicode cChar = rKEvt.GetCharCode(); 120cdf0e10cSrcweir sal_uInt16 nGroup = rKEvt.GetKeyCode().GetGroup(); 121cdf0e10cSrcweir 122cdf0e10cSrcweir if ( (nGroup == KEYGROUP_FKEYS) || (nGroup == KEYGROUP_CURSOR) || 123cdf0e10cSrcweir (nGroup == KEYGROUP_MISC) || 124cdf0e10cSrcweir ((cChar >= '0') && (cChar <= '9')) || 125cdf0e10cSrcweir (bThousandSep && (cChar == rLocaleDataWrapper.getNumThousandSep())) || 126cdf0e10cSrcweir (cChar == rLocaleDataWrapper.getNumDecimalSep() ) || 127cdf0e10cSrcweir (cChar == '-') ) 128cdf0e10cSrcweir return sal_False; 129cdf0e10cSrcweir else 130cdf0e10cSrcweir return sal_True; 131cdf0e10cSrcweir } 132cdf0e10cSrcweir } 133cdf0e10cSrcweir 134cdf0e10cSrcweir // ----------------------------------------------------------------------- 135cdf0e10cSrcweir 136cdf0e10cSrcweir static sal_Bool ImplNumericGetValue( const XubString& rStr, BigInt& rValue, 137cdf0e10cSrcweir sal_uInt16 nDecDigits, const LocaleDataWrapper& rLocaleDataWrapper, 138cdf0e10cSrcweir sal_Bool bCurrency = sal_False ) 139cdf0e10cSrcweir { 140cdf0e10cSrcweir XubString aStr = rStr; 141cdf0e10cSrcweir XubString aStr1; 142cdf0e10cSrcweir XubString aStr2; 143cdf0e10cSrcweir sal_uInt16 nDecPos; 144cdf0e10cSrcweir sal_Bool bNegative = sal_False; 145cdf0e10cSrcweir xub_StrLen i; 146cdf0e10cSrcweir 147cdf0e10cSrcweir // Reaktion auf leeren String 148cdf0e10cSrcweir if ( !rStr.Len() ) 149cdf0e10cSrcweir return sal_False; 150cdf0e10cSrcweir 151cdf0e10cSrcweir // Fuehrende und nachfolgende Leerzeichen entfernen 152cdf0e10cSrcweir aStr.EraseLeadingAndTrailingChars( ' ' ); 153cdf0e10cSrcweir 154cdf0e10cSrcweir // Position des Dezimalpunktes suchen 155cdf0e10cSrcweir nDecPos = aStr.Search( rLocaleDataWrapper.getNumDecimalSep() ); 156cdf0e10cSrcweir 157cdf0e10cSrcweir if ( nDecPos != STRING_NOTFOUND ) 158cdf0e10cSrcweir { 159cdf0e10cSrcweir aStr1 = aStr.Copy( 0, nDecPos ); 160cdf0e10cSrcweir aStr2 = aStr.Copy( nDecPos+1 ); 161cdf0e10cSrcweir } 162cdf0e10cSrcweir else 163cdf0e10cSrcweir aStr1 = aStr; 164cdf0e10cSrcweir 165cdf0e10cSrcweir // Negativ ? 166cdf0e10cSrcweir if ( bCurrency ) 167cdf0e10cSrcweir { 168cdf0e10cSrcweir if ( (aStr.GetChar( 0 ) == '(') && (aStr.GetChar( aStr.Len()-1 ) == ')') ) 169cdf0e10cSrcweir bNegative = sal_True; 170cdf0e10cSrcweir if ( !bNegative ) 171cdf0e10cSrcweir { 172cdf0e10cSrcweir for ( i=0; i < aStr.Len(); i++ ) 173cdf0e10cSrcweir { 174cdf0e10cSrcweir if ( (aStr.GetChar( i ) >= '0') && (aStr.GetChar( i ) <= '9') ) 175cdf0e10cSrcweir break; 176cdf0e10cSrcweir else if ( aStr.GetChar( i ) == '-' ) 177cdf0e10cSrcweir { 178cdf0e10cSrcweir bNegative = sal_True; 179cdf0e10cSrcweir break; 180cdf0e10cSrcweir } 181cdf0e10cSrcweir } 182cdf0e10cSrcweir } 183cdf0e10cSrcweir if ( !bNegative && bCurrency && aStr.Len() ) 184cdf0e10cSrcweir { 185cdf0e10cSrcweir sal_uInt16 nFormat = rLocaleDataWrapper.getCurrNegativeFormat(); 186cdf0e10cSrcweir if ( (nFormat == 3) || (nFormat == 6) || 187cdf0e10cSrcweir (nFormat == 7) || (nFormat == 10) ) 188cdf0e10cSrcweir { 189cdf0e10cSrcweir for ( i = (sal_uInt16)(aStr.Len()-1); i > 0; i++ ) 190cdf0e10cSrcweir { 191cdf0e10cSrcweir if ( (aStr.GetChar( i ) >= '0') && (aStr.GetChar( i ) <= '9') ) 192cdf0e10cSrcweir break; 193cdf0e10cSrcweir else if ( aStr.GetChar( i ) == '-' ) 194cdf0e10cSrcweir { 195cdf0e10cSrcweir bNegative = sal_True; 196cdf0e10cSrcweir break; 197cdf0e10cSrcweir } 198cdf0e10cSrcweir } 199cdf0e10cSrcweir } 200cdf0e10cSrcweir } 201cdf0e10cSrcweir } 202cdf0e10cSrcweir else 203cdf0e10cSrcweir { 204cdf0e10cSrcweir if ( aStr1.GetChar( 0 ) == '-' ) 205cdf0e10cSrcweir bNegative = sal_True; 206cdf0e10cSrcweir } 207cdf0e10cSrcweir 208cdf0e10cSrcweir // Alle unerwuenschten Zeichen rauswerfen 209cdf0e10cSrcweir for ( i=0; i < aStr1.Len(); ) 210cdf0e10cSrcweir { 211cdf0e10cSrcweir if ( (aStr1.GetChar( i ) >= '0') && (aStr1.GetChar( i ) <= '9') ) 212cdf0e10cSrcweir i++; 213cdf0e10cSrcweir else 214cdf0e10cSrcweir aStr1.Erase( i, 1 ); 215cdf0e10cSrcweir } 216cdf0e10cSrcweir for ( i=0; i < aStr2.Len(); ) 217cdf0e10cSrcweir { 218cdf0e10cSrcweir if ( (aStr2.GetChar( i ) >= '0') && (aStr2.GetChar( i ) <= '9') ) 219cdf0e10cSrcweir i++; 220cdf0e10cSrcweir else 221cdf0e10cSrcweir aStr2.Erase( i, 1 ); 222cdf0e10cSrcweir } 223cdf0e10cSrcweir 224cdf0e10cSrcweir if ( !aStr1.Len() && !aStr2.Len() ) 225cdf0e10cSrcweir return sal_False; 226cdf0e10cSrcweir 227cdf0e10cSrcweir if ( !aStr1.Len() ) 228cdf0e10cSrcweir aStr1.Insert( '0' ); 229cdf0e10cSrcweir if ( bNegative ) 230cdf0e10cSrcweir aStr1.Insert( '-', 0 ); 231cdf0e10cSrcweir 232cdf0e10cSrcweir // Nachkommateil zurechtstutzen und dabei runden 233cdf0e10cSrcweir sal_Bool bRound = sal_False; 234cdf0e10cSrcweir if ( aStr2.Len() > nDecDigits ) 235cdf0e10cSrcweir { 236cdf0e10cSrcweir if ( aStr2.GetChar( nDecDigits ) >= '5' ) 237cdf0e10cSrcweir bRound = sal_True; 238cdf0e10cSrcweir aStr2.Erase( nDecDigits ); 239cdf0e10cSrcweir } 240cdf0e10cSrcweir if ( aStr2.Len() < nDecDigits ) 241cdf0e10cSrcweir aStr2.Expand( nDecDigits, '0' ); 242cdf0e10cSrcweir 243cdf0e10cSrcweir aStr = aStr1; 244cdf0e10cSrcweir aStr += aStr2; 245cdf0e10cSrcweir 246cdf0e10cSrcweir // Bereichsueberpruefung 247cdf0e10cSrcweir BigInt nValue( aStr ); 248cdf0e10cSrcweir if ( bRound ) 249cdf0e10cSrcweir { 250cdf0e10cSrcweir if ( !bNegative ) 251cdf0e10cSrcweir nValue+=1; 252cdf0e10cSrcweir else 253cdf0e10cSrcweir nValue-=1; 254cdf0e10cSrcweir } 255cdf0e10cSrcweir 256cdf0e10cSrcweir rValue = nValue; 257cdf0e10cSrcweir 258cdf0e10cSrcweir return sal_True; 259cdf0e10cSrcweir } 260cdf0e10cSrcweir 261cdf0e10cSrcweir // ======================================================================= 262cdf0e10cSrcweir 263cdf0e10cSrcweir static sal_Bool ImplLongCurrencyProcessKeyInput( Edit* pEdit, const KeyEvent& rKEvt, 264cdf0e10cSrcweir sal_Bool, sal_Bool bUseThousandSep, const LocaleDataWrapper& rLocaleDataWrapper ) 265cdf0e10cSrcweir { 266cdf0e10cSrcweir // Es gibt hier kein sinnvolles StrictFormat, also alle 267cdf0e10cSrcweir // Zeichen erlauben 268cdf0e10cSrcweir return ImplNumericProcessKeyInput( pEdit, rKEvt, sal_False, bUseThousandSep, rLocaleDataWrapper ); 269cdf0e10cSrcweir } 270cdf0e10cSrcweir 271cdf0e10cSrcweir // ----------------------------------------------------------------------- 272cdf0e10cSrcweir 273cdf0e10cSrcweir inline sal_Bool ImplLongCurrencyGetValue( const XubString& rStr, BigInt& rValue, 274cdf0e10cSrcweir sal_uInt16 nDecDigits, const LocaleDataWrapper& rLocaleDataWrapper ) 275cdf0e10cSrcweir { 276cdf0e10cSrcweir // Zahlenwert holen 277cdf0e10cSrcweir return ImplNumericGetValue( rStr, rValue, nDecDigits, rLocaleDataWrapper, sal_True ); 278cdf0e10cSrcweir } 279cdf0e10cSrcweir 280cdf0e10cSrcweir // ----------------------------------------------------------------------- 281cdf0e10cSrcweir 282cdf0e10cSrcweir sal_Bool ImplLongCurrencyReformat( const XubString& rStr, BigInt nMin, BigInt nMax, 283cdf0e10cSrcweir sal_uInt16 nDecDigits, 284cdf0e10cSrcweir const LocaleDataWrapper& rLocaleDataWrapper, String& rOutStr, 285cdf0e10cSrcweir LongCurrencyFormatter& rFormatter ) 286cdf0e10cSrcweir { 287cdf0e10cSrcweir BigInt nValue; 288cdf0e10cSrcweir if ( !ImplNumericGetValue( rStr, nValue, nDecDigits, rLocaleDataWrapper, sal_True ) ) 289cdf0e10cSrcweir return sal_True; 290cdf0e10cSrcweir else 291cdf0e10cSrcweir { 292cdf0e10cSrcweir BigInt nTempVal = nValue; 293cdf0e10cSrcweir if ( nTempVal > nMax ) 294cdf0e10cSrcweir nTempVal = nMax; 295cdf0e10cSrcweir else if ( nTempVal < nMin ) 296cdf0e10cSrcweir nTempVal = nMin; 297cdf0e10cSrcweir 298cdf0e10cSrcweir if ( rFormatter.GetErrorHdl().IsSet() && (nValue != nTempVal) ) 299cdf0e10cSrcweir { 300cdf0e10cSrcweir rFormatter.mnCorrectedValue = nTempVal; 301cdf0e10cSrcweir if ( !rFormatter.GetErrorHdl().Call( &rFormatter ) ) 302cdf0e10cSrcweir { 303cdf0e10cSrcweir rFormatter.mnCorrectedValue = 0; 304cdf0e10cSrcweir return sal_False; 305cdf0e10cSrcweir } 306cdf0e10cSrcweir else 307cdf0e10cSrcweir { 308cdf0e10cSrcweir rFormatter.mnCorrectedValue = 0; 309cdf0e10cSrcweir } 310cdf0e10cSrcweir } 311cdf0e10cSrcweir 312cdf0e10cSrcweir rOutStr = ImplGetCurr( rLocaleDataWrapper, nTempVal, nDecDigits, rFormatter.GetCurrencySymbol(), rFormatter.IsUseThousandSep() ); 313cdf0e10cSrcweir return sal_True; 314cdf0e10cSrcweir } 315cdf0e10cSrcweir } 316cdf0e10cSrcweir 317cdf0e10cSrcweir 318cdf0e10cSrcweir // ======================================================================= 319cdf0e10cSrcweir 320cdf0e10cSrcweir void LongCurrencyFormatter::ImpInit() 321cdf0e10cSrcweir { 322cdf0e10cSrcweir mnFieldValue = 0; 323cdf0e10cSrcweir mnLastValue = 0; 324cdf0e10cSrcweir mnMin = 0; 325cdf0e10cSrcweir mnMax = 0x7FFFFFFF; 326cdf0e10cSrcweir mnMax *= 0x7FFFFFFF; 327cdf0e10cSrcweir mnCorrectedValue = 0; 328cdf0e10cSrcweir mnDecimalDigits = 0; 329cdf0e10cSrcweir mnType = FORMAT_LONGCURRENCY; 330cdf0e10cSrcweir mbThousandSep = sal_True; 331cdf0e10cSrcweir SetDecimalDigits( 0 ); 332cdf0e10cSrcweir } 333cdf0e10cSrcweir 334cdf0e10cSrcweir // ----------------------------------------------------------------------- 335cdf0e10cSrcweir 336cdf0e10cSrcweir LongCurrencyFormatter::LongCurrencyFormatter() 337cdf0e10cSrcweir { 338cdf0e10cSrcweir ImpInit(); 339cdf0e10cSrcweir } 340cdf0e10cSrcweir 341cdf0e10cSrcweir // ----------------------------------------------------------------------- 342cdf0e10cSrcweir 343cdf0e10cSrcweir void LongCurrencyFormatter::ImplLoadRes( const ResId& rResId ) 344cdf0e10cSrcweir { 345cdf0e10cSrcweir ImpInit(); 346cdf0e10cSrcweir 347cdf0e10cSrcweir ResMgr* pMgr = rResId.GetResMgr(); 348cdf0e10cSrcweir if( pMgr ) 349cdf0e10cSrcweir { 350cdf0e10cSrcweir sal_uLong nMask = pMgr->ReadLong(); 351cdf0e10cSrcweir 352cdf0e10cSrcweir if ( NUMERICFORMATTER_MIN & nMask ) 353cdf0e10cSrcweir mnMin = pMgr->ReadLong(); 354cdf0e10cSrcweir 355cdf0e10cSrcweir if ( NUMERICFORMATTER_MAX & nMask ) 356cdf0e10cSrcweir mnMax = pMgr->ReadLong(); 357cdf0e10cSrcweir 358cdf0e10cSrcweir if ( NUMERICFORMATTER_STRICTFORMAT & nMask ) 359cdf0e10cSrcweir SetStrictFormat( (sal_Bool)pMgr->ReadShort() ); 360cdf0e10cSrcweir 361cdf0e10cSrcweir if ( NUMERICFORMATTER_DECIMALDIGITS & nMask ) 362cdf0e10cSrcweir SetDecimalDigits( pMgr->ReadShort() ); 363cdf0e10cSrcweir 364cdf0e10cSrcweir if ( NUMERICFORMATTER_VALUE & nMask ) 365cdf0e10cSrcweir { 366cdf0e10cSrcweir mnFieldValue = pMgr->ReadLong(); 367cdf0e10cSrcweir if ( mnFieldValue > mnMax ) 368cdf0e10cSrcweir mnFieldValue = mnMax; 369cdf0e10cSrcweir else if ( mnFieldValue < mnMin ) 370cdf0e10cSrcweir mnFieldValue = mnMin; 371cdf0e10cSrcweir mnLastValue = mnFieldValue; 372cdf0e10cSrcweir } 373cdf0e10cSrcweir } 374cdf0e10cSrcweir } 375cdf0e10cSrcweir 376cdf0e10cSrcweir // ----------------------------------------------------------------------- 377cdf0e10cSrcweir 378cdf0e10cSrcweir LongCurrencyFormatter::~LongCurrencyFormatter() 379cdf0e10cSrcweir { 380cdf0e10cSrcweir } 381cdf0e10cSrcweir 382cdf0e10cSrcweir // ----------------------------------------------------------------------- 383cdf0e10cSrcweir 384cdf0e10cSrcweir void LongCurrencyFormatter::SetCurrencySymbol( const String& rStr ) 385cdf0e10cSrcweir { 386cdf0e10cSrcweir maCurrencySymbol= rStr; 387cdf0e10cSrcweir ReformatAll(); 388cdf0e10cSrcweir } 389cdf0e10cSrcweir 390cdf0e10cSrcweir // ----------------------------------------------------------------------- 391cdf0e10cSrcweir 392cdf0e10cSrcweir String LongCurrencyFormatter::GetCurrencySymbol() const 393cdf0e10cSrcweir { 394cdf0e10cSrcweir return maCurrencySymbol.Len() ? maCurrencySymbol : GetLocaleDataWrapper().getCurrSymbol(); 395cdf0e10cSrcweir } 396cdf0e10cSrcweir 397cdf0e10cSrcweir // ----------------------------------------------------------------------- 398cdf0e10cSrcweir 399cdf0e10cSrcweir void LongCurrencyFormatter::SetValue( BigInt nNewValue ) 400cdf0e10cSrcweir { 401cdf0e10cSrcweir SetUserValue( nNewValue ); 402cdf0e10cSrcweir mnFieldValue = mnLastValue; 403cdf0e10cSrcweir SetEmptyFieldValueData( sal_False ); 404cdf0e10cSrcweir } 405cdf0e10cSrcweir 406cdf0e10cSrcweir // ----------------------------------------------------------------------- 407cdf0e10cSrcweir 408cdf0e10cSrcweir void LongCurrencyFormatter::SetUserValue( BigInt nNewValue ) 409cdf0e10cSrcweir { 410cdf0e10cSrcweir if ( nNewValue > mnMax ) 411cdf0e10cSrcweir nNewValue = mnMax; 412cdf0e10cSrcweir else if ( nNewValue < mnMin ) 413cdf0e10cSrcweir nNewValue = mnMin; 414cdf0e10cSrcweir mnLastValue = nNewValue; 415cdf0e10cSrcweir 416cdf0e10cSrcweir if ( !GetField() ) 417cdf0e10cSrcweir return; 418cdf0e10cSrcweir 419cdf0e10cSrcweir XubString aStr = ImplGetCurr( GetLocaleDataWrapper(), nNewValue, GetDecimalDigits(), GetCurrencySymbol(), IsUseThousandSep() ); 420cdf0e10cSrcweir if ( GetField()->HasFocus() ) 421cdf0e10cSrcweir { 422cdf0e10cSrcweir Selection aSelection = GetField()->GetSelection(); 423cdf0e10cSrcweir GetField()->SetText( aStr ); 424cdf0e10cSrcweir GetField()->SetSelection( aSelection ); 425cdf0e10cSrcweir } 426cdf0e10cSrcweir else 427cdf0e10cSrcweir GetField()->SetText( aStr ); 428cdf0e10cSrcweir MarkToBeReformatted( sal_False ); 429cdf0e10cSrcweir } 430cdf0e10cSrcweir 431cdf0e10cSrcweir // ----------------------------------------------------------------------- 432cdf0e10cSrcweir 433cdf0e10cSrcweir BigInt LongCurrencyFormatter::GetValue() const 434cdf0e10cSrcweir { 435cdf0e10cSrcweir if ( !GetField() ) 436cdf0e10cSrcweir return 0; 437cdf0e10cSrcweir 438cdf0e10cSrcweir BigInt nTempValue; 439cdf0e10cSrcweir if ( ImplLongCurrencyGetValue( GetField()->GetText(), nTempValue, GetDecimalDigits(), GetLocaleDataWrapper() ) ) 440cdf0e10cSrcweir { 441cdf0e10cSrcweir if ( nTempValue > mnMax ) 442cdf0e10cSrcweir nTempValue = mnMax; 443cdf0e10cSrcweir else if ( nTempValue < mnMin ) 444cdf0e10cSrcweir nTempValue = mnMin; 445cdf0e10cSrcweir return nTempValue; 446cdf0e10cSrcweir } 447cdf0e10cSrcweir else 448cdf0e10cSrcweir return mnLastValue; 449cdf0e10cSrcweir } 450cdf0e10cSrcweir 451cdf0e10cSrcweir // ----------------------------------------------------------------------- 452cdf0e10cSrcweir 453cdf0e10cSrcweir void LongCurrencyFormatter::Reformat() 454cdf0e10cSrcweir { 455cdf0e10cSrcweir if ( !GetField() ) 456cdf0e10cSrcweir return; 457cdf0e10cSrcweir 458cdf0e10cSrcweir if ( !GetField()->GetText().Len() && ImplGetEmptyFieldValue() ) 459cdf0e10cSrcweir return; 460cdf0e10cSrcweir 461cdf0e10cSrcweir XubString aStr; 462cdf0e10cSrcweir sal_Bool bOK = ImplLongCurrencyReformat( GetField()->GetText(), mnMin, mnMax, 463cdf0e10cSrcweir GetDecimalDigits(), GetLocaleDataWrapper(), aStr, *this ); 464cdf0e10cSrcweir if ( !bOK ) 465cdf0e10cSrcweir return; 466cdf0e10cSrcweir 467cdf0e10cSrcweir if ( aStr.Len() ) 468cdf0e10cSrcweir { 469cdf0e10cSrcweir GetField()->SetText( aStr ); 470cdf0e10cSrcweir MarkToBeReformatted( sal_False ); 471cdf0e10cSrcweir ImplLongCurrencyGetValue( aStr, mnLastValue, GetDecimalDigits(), GetLocaleDataWrapper() ); 472cdf0e10cSrcweir } 473cdf0e10cSrcweir else 474cdf0e10cSrcweir SetValue( mnLastValue ); 475cdf0e10cSrcweir } 476cdf0e10cSrcweir 477cdf0e10cSrcweir // ----------------------------------------------------------------------- 478cdf0e10cSrcweir 479cdf0e10cSrcweir void LongCurrencyFormatter::ReformatAll() 480cdf0e10cSrcweir { 481cdf0e10cSrcweir Reformat(); 482cdf0e10cSrcweir } 483cdf0e10cSrcweir 484cdf0e10cSrcweir // ----------------------------------------------------------------------- 485cdf0e10cSrcweir 486cdf0e10cSrcweir void LongCurrencyFormatter::SetMin( BigInt nNewMin ) 487cdf0e10cSrcweir { 488cdf0e10cSrcweir mnMin = nNewMin; 489cdf0e10cSrcweir ReformatAll(); 490cdf0e10cSrcweir } 491cdf0e10cSrcweir 492cdf0e10cSrcweir // ----------------------------------------------------------------------- 493cdf0e10cSrcweir 494cdf0e10cSrcweir void LongCurrencyFormatter::SetMax( BigInt nNewMax ) 495cdf0e10cSrcweir { 496cdf0e10cSrcweir mnMax = nNewMax; 497cdf0e10cSrcweir ReformatAll(); 498cdf0e10cSrcweir } 499cdf0e10cSrcweir 500cdf0e10cSrcweir // ----------------------------------------------------------------------- 501cdf0e10cSrcweir 502cdf0e10cSrcweir void LongCurrencyFormatter::SetUseThousandSep( sal_Bool b ) 503cdf0e10cSrcweir { 504cdf0e10cSrcweir mbThousandSep = b; 505cdf0e10cSrcweir ReformatAll(); 506cdf0e10cSrcweir } 507cdf0e10cSrcweir 508cdf0e10cSrcweir 509cdf0e10cSrcweir // ----------------------------------------------------------------------- 510cdf0e10cSrcweir 511cdf0e10cSrcweir void LongCurrencyFormatter::SetDecimalDigits( sal_uInt16 nDigits ) 512cdf0e10cSrcweir { 513cdf0e10cSrcweir // DBG_ASSERT( nDigits < 10, "LongCurrency duerfen nur maximal 9 Nachkommastellen haben" ); 514cdf0e10cSrcweir 515cdf0e10cSrcweir if ( nDigits > 9 ) 516cdf0e10cSrcweir nDigits = 9; 517cdf0e10cSrcweir 518cdf0e10cSrcweir mnDecimalDigits = nDigits; 519cdf0e10cSrcweir ReformatAll(); 520cdf0e10cSrcweir } 521cdf0e10cSrcweir 522cdf0e10cSrcweir // ----------------------------------------------------------------------- 523cdf0e10cSrcweir 524cdf0e10cSrcweir sal_uInt16 LongCurrencyFormatter::GetDecimalDigits() const 525cdf0e10cSrcweir { 526cdf0e10cSrcweir return mnDecimalDigits; 527cdf0e10cSrcweir } 528cdf0e10cSrcweir 529cdf0e10cSrcweir // ----------------------------------------------------------------------- 530cdf0e10cSrcweir 531cdf0e10cSrcweir sal_Bool LongCurrencyFormatter::IsValueModified() const 532cdf0e10cSrcweir { 533cdf0e10cSrcweir if ( ImplGetEmptyFieldValue() ) 534cdf0e10cSrcweir return !IsEmptyValue(); 535cdf0e10cSrcweir else if ( GetValue() != mnFieldValue ) 536cdf0e10cSrcweir return sal_True; 537cdf0e10cSrcweir else 538cdf0e10cSrcweir return sal_False; 539cdf0e10cSrcweir } 540cdf0e10cSrcweir 541cdf0e10cSrcweir // ----------------------------------------------------------------------- 542cdf0e10cSrcweir 543cdf0e10cSrcweir void LongCurrencyFormatter::SetEmptyValue() 544cdf0e10cSrcweir { 545cdf0e10cSrcweir GetField()->SetText( ImplGetSVEmptyStr() ); 546cdf0e10cSrcweir SetEmptyFieldValueData( sal_True ); 547cdf0e10cSrcweir } 548cdf0e10cSrcweir 549cdf0e10cSrcweir // ----------------------------------------------------------------------- 550cdf0e10cSrcweir 551cdf0e10cSrcweir BigInt LongCurrencyFormatter::Normalize( BigInt nValue ) const 552cdf0e10cSrcweir { 553cdf0e10cSrcweir return (nValue * ImplPower10( GetDecimalDigits() ) ); 554cdf0e10cSrcweir } 555cdf0e10cSrcweir 556cdf0e10cSrcweir // ----------------------------------------------------------------------- 557cdf0e10cSrcweir 558cdf0e10cSrcweir BigInt LongCurrencyFormatter::Denormalize( BigInt nValue ) const 559cdf0e10cSrcweir { 560cdf0e10cSrcweir BigInt nFactor = ImplPower10( GetDecimalDigits() ); 561cdf0e10cSrcweir BigInt nTmp = nFactor; 562cdf0e10cSrcweir nTmp /= 2; 563cdf0e10cSrcweir nTmp += nValue; 564cdf0e10cSrcweir nTmp /= nFactor; 565cdf0e10cSrcweir return nTmp; 566cdf0e10cSrcweir } 567cdf0e10cSrcweir 568cdf0e10cSrcweir // ======================================================================= 569cdf0e10cSrcweir 570cdf0e10cSrcweir void ImplNewLongCurrencyFieldValue( LongCurrencyField* pField, BigInt nNewValue ) 571cdf0e10cSrcweir { 572cdf0e10cSrcweir Selection aSelect = pField->GetSelection(); 573cdf0e10cSrcweir aSelect.Justify(); 574cdf0e10cSrcweir XubString aText = pField->GetText(); 575cdf0e10cSrcweir sal_Bool bLastSelected = ((xub_StrLen)aSelect.Max() == aText.Len()) ? sal_True : sal_False; 576cdf0e10cSrcweir 577cdf0e10cSrcweir BigInt nOldLastValue = pField->mnLastValue; 578cdf0e10cSrcweir pField->SetUserValue( nNewValue ); 579cdf0e10cSrcweir pField->mnLastValue = nOldLastValue; 580cdf0e10cSrcweir 581cdf0e10cSrcweir if ( bLastSelected ) 582cdf0e10cSrcweir { 583cdf0e10cSrcweir if ( !aSelect.Len() ) 584cdf0e10cSrcweir aSelect.Min() = SELECTION_MAX; 585cdf0e10cSrcweir aSelect.Max() = SELECTION_MAX; 586cdf0e10cSrcweir } 587cdf0e10cSrcweir pField->SetSelection( aSelect ); 588cdf0e10cSrcweir pField->SetModifyFlag(); 589cdf0e10cSrcweir pField->Modify(); 590cdf0e10cSrcweir } 591cdf0e10cSrcweir 592cdf0e10cSrcweir // ======================================================================= 593cdf0e10cSrcweir 594cdf0e10cSrcweir LongCurrencyField::LongCurrencyField( Window* pParent, WinBits nWinStyle ) : 595cdf0e10cSrcweir SpinField( pParent, nWinStyle ) 596cdf0e10cSrcweir { 597cdf0e10cSrcweir SetField( this ); 598cdf0e10cSrcweir mnSpinSize = 1; 599cdf0e10cSrcweir mnFirst = mnMin; 600cdf0e10cSrcweir mnLast = mnMax; 601cdf0e10cSrcweir 602cdf0e10cSrcweir Reformat(); 603cdf0e10cSrcweir } 604cdf0e10cSrcweir 605cdf0e10cSrcweir // ----------------------------------------------------------------------- 606cdf0e10cSrcweir 607cdf0e10cSrcweir LongCurrencyField::LongCurrencyField( Window* pParent, const ResId& rResId ) : 608cdf0e10cSrcweir SpinField( WINDOW_NUMERICFIELD ) 609cdf0e10cSrcweir { 610cdf0e10cSrcweir rResId.SetRT( RSC_NUMERICFIELD ); 611cdf0e10cSrcweir WinBits nStyle = ImplInitRes( rResId ) ; 612cdf0e10cSrcweir SpinField::ImplInit( pParent, nStyle ); 613cdf0e10cSrcweir 614cdf0e10cSrcweir SetField( this ); 615cdf0e10cSrcweir mnSpinSize = 1; 616cdf0e10cSrcweir mnFirst = mnMin; 617cdf0e10cSrcweir mnLast = mnMax; 618cdf0e10cSrcweir 619cdf0e10cSrcweir Reformat(); 620cdf0e10cSrcweir 621cdf0e10cSrcweir if ( !(nStyle & WB_HIDE) ) 622cdf0e10cSrcweir Show(); 623cdf0e10cSrcweir } 624cdf0e10cSrcweir 625cdf0e10cSrcweir // ----------------------------------------------------------------------- 626cdf0e10cSrcweir 627cdf0e10cSrcweir void LongCurrencyField::ImplLoadRes( const ResId& rResId ) 628cdf0e10cSrcweir { 629cdf0e10cSrcweir SpinField::ImplLoadRes( rResId ); 630cdf0e10cSrcweir LongCurrencyFormatter::ImplLoadRes( ResId( (RSHEADER_TYPE *)GetClassRes(), *rResId.GetResMgr() ) ); 631cdf0e10cSrcweir 632cdf0e10cSrcweir sal_uLong nMask = ReadLongRes(); 633cdf0e10cSrcweir if ( CURRENCYFIELD_FIRST & nMask ) 634cdf0e10cSrcweir mnFirst = ReadLongRes(); 635cdf0e10cSrcweir 636cdf0e10cSrcweir if ( CURRENCYFIELD_LAST & nMask ) 637cdf0e10cSrcweir mnLast = ReadLongRes(); 638cdf0e10cSrcweir 639cdf0e10cSrcweir if ( CURRENCYFIELD_SPINSIZE & nMask ) 640cdf0e10cSrcweir mnSpinSize = ReadLongRes(); 641cdf0e10cSrcweir } 642cdf0e10cSrcweir 643cdf0e10cSrcweir // ----------------------------------------------------------------------- 644cdf0e10cSrcweir 645cdf0e10cSrcweir LongCurrencyField::~LongCurrencyField() 646cdf0e10cSrcweir { 647cdf0e10cSrcweir } 648cdf0e10cSrcweir 649cdf0e10cSrcweir // ----------------------------------------------------------------------- 650cdf0e10cSrcweir 651cdf0e10cSrcweir long LongCurrencyField::PreNotify( NotifyEvent& rNEvt ) 652cdf0e10cSrcweir { 653cdf0e10cSrcweir if( rNEvt.GetType() == EVENT_KEYINPUT ) 654cdf0e10cSrcweir { 655cdf0e10cSrcweir if ( ImplLongCurrencyProcessKeyInput( GetField(), *rNEvt.GetKeyEvent(), IsStrictFormat(), IsUseThousandSep(), GetLocaleDataWrapper() ) ) 656cdf0e10cSrcweir return 1; 657cdf0e10cSrcweir } 658cdf0e10cSrcweir return SpinField::PreNotify( rNEvt ); 659cdf0e10cSrcweir } 660cdf0e10cSrcweir 661cdf0e10cSrcweir // ----------------------------------------------------------------------- 662cdf0e10cSrcweir 663cdf0e10cSrcweir long LongCurrencyField::Notify( NotifyEvent& rNEvt ) 664cdf0e10cSrcweir { 665cdf0e10cSrcweir if( rNEvt.GetType() == EVENT_GETFOCUS ) 666cdf0e10cSrcweir { 667cdf0e10cSrcweir MarkToBeReformatted( sal_False ); 668cdf0e10cSrcweir } 669cdf0e10cSrcweir else if( rNEvt.GetType() == EVENT_LOSEFOCUS ) 670cdf0e10cSrcweir { 671cdf0e10cSrcweir if ( MustBeReformatted() ) 672cdf0e10cSrcweir { 673cdf0e10cSrcweir Reformat(); 674cdf0e10cSrcweir SpinField::Modify(); 675cdf0e10cSrcweir } 676cdf0e10cSrcweir } 677cdf0e10cSrcweir return SpinField::Notify( rNEvt ); 678cdf0e10cSrcweir } 679cdf0e10cSrcweir 680cdf0e10cSrcweir // ----------------------------------------------------------------------- 681cdf0e10cSrcweir 682cdf0e10cSrcweir void LongCurrencyField::Modify() 683cdf0e10cSrcweir { 684cdf0e10cSrcweir MarkToBeReformatted( sal_True ); 685cdf0e10cSrcweir SpinField::Modify(); 686cdf0e10cSrcweir } 687cdf0e10cSrcweir 688cdf0e10cSrcweir // ----------------------------------------------------------------------- 689cdf0e10cSrcweir 690cdf0e10cSrcweir void LongCurrencyField::Up() 691cdf0e10cSrcweir { 692cdf0e10cSrcweir BigInt nValue = GetValue(); 693cdf0e10cSrcweir nValue += mnSpinSize; 694cdf0e10cSrcweir if ( nValue > mnMax ) 695cdf0e10cSrcweir nValue = mnMax; 696cdf0e10cSrcweir 697cdf0e10cSrcweir ImplNewLongCurrencyFieldValue( this, nValue ); 698cdf0e10cSrcweir SpinField::Up(); 699cdf0e10cSrcweir } 700cdf0e10cSrcweir 701cdf0e10cSrcweir // ----------------------------------------------------------------------- 702cdf0e10cSrcweir 703cdf0e10cSrcweir void LongCurrencyField::Down() 704cdf0e10cSrcweir { 705cdf0e10cSrcweir BigInt nValue = GetValue(); 706cdf0e10cSrcweir nValue -= mnSpinSize; 707cdf0e10cSrcweir if ( nValue < mnMin ) 708cdf0e10cSrcweir nValue = mnMin; 709cdf0e10cSrcweir 710cdf0e10cSrcweir ImplNewLongCurrencyFieldValue( this, nValue ); 711cdf0e10cSrcweir SpinField::Down(); 712cdf0e10cSrcweir } 713cdf0e10cSrcweir 714cdf0e10cSrcweir // ----------------------------------------------------------------------- 715cdf0e10cSrcweir 716cdf0e10cSrcweir void LongCurrencyField::First() 717cdf0e10cSrcweir { 718cdf0e10cSrcweir ImplNewLongCurrencyFieldValue( this, mnFirst ); 719cdf0e10cSrcweir SpinField::First(); 720cdf0e10cSrcweir } 721cdf0e10cSrcweir 722cdf0e10cSrcweir // ----------------------------------------------------------------------- 723cdf0e10cSrcweir 724cdf0e10cSrcweir void LongCurrencyField::Last() 725cdf0e10cSrcweir { 726cdf0e10cSrcweir ImplNewLongCurrencyFieldValue( this, mnLast ); 727cdf0e10cSrcweir SpinField::Last(); 728cdf0e10cSrcweir } 729cdf0e10cSrcweir 730cdf0e10cSrcweir // ======================================================================= 731*1dda6fa0Smseidel 732cdf0e10cSrcweir LongCurrencyBox::LongCurrencyBox( Window* pParent, WinBits nWinStyle ) : 733cdf0e10cSrcweir ComboBox( pParent, nWinStyle ) 734cdf0e10cSrcweir { 735cdf0e10cSrcweir SetField( this ); 736cdf0e10cSrcweir Reformat(); 737cdf0e10cSrcweir } 738cdf0e10cSrcweir 739cdf0e10cSrcweir // ----------------------------------------------------------------------- 740cdf0e10cSrcweir 741cdf0e10cSrcweir LongCurrencyBox::LongCurrencyBox( Window* pParent, const ResId& rResId ) : 742cdf0e10cSrcweir ComboBox( WINDOW_NUMERICFIELD ) 743cdf0e10cSrcweir { 744cdf0e10cSrcweir SetField( this ); 745cdf0e10cSrcweir WinBits nStyle = ImplInitRes( rResId ) ; 746cdf0e10cSrcweir ComboBox::ImplLoadRes( rResId ); 747cdf0e10cSrcweir ImplInit( pParent, nStyle ); 748cdf0e10cSrcweir LongCurrencyFormatter::ImplLoadRes( rResId ); 749cdf0e10cSrcweir Reformat(); 750cdf0e10cSrcweir 751cdf0e10cSrcweir if ( !(nStyle & WB_HIDE) ) 752cdf0e10cSrcweir Show(); 753cdf0e10cSrcweir } 754cdf0e10cSrcweir 755cdf0e10cSrcweir // ----------------------------------------------------------------------- 756cdf0e10cSrcweir 757cdf0e10cSrcweir LongCurrencyBox::~LongCurrencyBox() 758cdf0e10cSrcweir { 759cdf0e10cSrcweir } 760cdf0e10cSrcweir 761cdf0e10cSrcweir // ----------------------------------------------------------------------- 762cdf0e10cSrcweir 763cdf0e10cSrcweir long LongCurrencyBox::PreNotify( NotifyEvent& rNEvt ) 764cdf0e10cSrcweir { 765cdf0e10cSrcweir if( rNEvt.GetType() == EVENT_KEYINPUT ) 766cdf0e10cSrcweir { 767cdf0e10cSrcweir if ( ImplLongCurrencyProcessKeyInput( GetField(), *rNEvt.GetKeyEvent(), IsStrictFormat(), IsUseThousandSep(), GetLocaleDataWrapper() ) ) 768cdf0e10cSrcweir return 1; 769cdf0e10cSrcweir } 770cdf0e10cSrcweir return ComboBox::PreNotify( rNEvt ); 771cdf0e10cSrcweir } 772cdf0e10cSrcweir 773cdf0e10cSrcweir // ----------------------------------------------------------------------- 774cdf0e10cSrcweir 775cdf0e10cSrcweir long LongCurrencyBox::Notify( NotifyEvent& rNEvt ) 776cdf0e10cSrcweir { 777cdf0e10cSrcweir if( rNEvt.GetType() == EVENT_GETFOCUS ) 778cdf0e10cSrcweir { 779cdf0e10cSrcweir MarkToBeReformatted( sal_False ); 780cdf0e10cSrcweir } 781cdf0e10cSrcweir else if( rNEvt.GetType() == EVENT_LOSEFOCUS ) 782cdf0e10cSrcweir { 783cdf0e10cSrcweir if ( MustBeReformatted() ) 784cdf0e10cSrcweir { 785cdf0e10cSrcweir Reformat(); 786cdf0e10cSrcweir ComboBox::Modify(); 787cdf0e10cSrcweir } 788cdf0e10cSrcweir } 789cdf0e10cSrcweir return ComboBox::Notify( rNEvt ); 790cdf0e10cSrcweir } 791cdf0e10cSrcweir 792cdf0e10cSrcweir // ----------------------------------------------------------------------- 793cdf0e10cSrcweir 794cdf0e10cSrcweir void LongCurrencyBox::Modify() 795cdf0e10cSrcweir { 796cdf0e10cSrcweir MarkToBeReformatted( sal_True ); 797cdf0e10cSrcweir ComboBox::Modify(); 798cdf0e10cSrcweir } 799cdf0e10cSrcweir 800cdf0e10cSrcweir // ----------------------------------------------------------------------- 801cdf0e10cSrcweir 802cdf0e10cSrcweir void LongCurrencyBox::ReformatAll() 803cdf0e10cSrcweir { 804cdf0e10cSrcweir XubString aStr; 805cdf0e10cSrcweir SetUpdateMode( sal_False ); 806cdf0e10cSrcweir sal_uInt16 nEntryCount = GetEntryCount(); 807cdf0e10cSrcweir for ( sal_uInt16 i=0; i < nEntryCount; i++ ) 808cdf0e10cSrcweir { 809cdf0e10cSrcweir ImplLongCurrencyReformat( GetEntry( i ), mnMin, mnMax, 810cdf0e10cSrcweir GetDecimalDigits(), GetLocaleDataWrapper(), 811cdf0e10cSrcweir aStr, *this ); 812cdf0e10cSrcweir RemoveEntry( i ); 813cdf0e10cSrcweir InsertEntry( aStr, i ); 814cdf0e10cSrcweir } 815cdf0e10cSrcweir LongCurrencyFormatter::Reformat(); 816cdf0e10cSrcweir SetUpdateMode( sal_True ); 817cdf0e10cSrcweir } 818cdf0e10cSrcweir 819cdf0e10cSrcweir // ----------------------------------------------------------------------- 820cdf0e10cSrcweir 821cdf0e10cSrcweir void LongCurrencyBox::InsertValue( BigInt nValue, sal_uInt16 nPos ) 822cdf0e10cSrcweir { 823cdf0e10cSrcweir XubString aStr = ImplGetCurr( GetLocaleDataWrapper(), nValue, GetDecimalDigits(), GetCurrencySymbol(), IsUseThousandSep() ); 824cdf0e10cSrcweir ComboBox::InsertEntry( aStr, nPos ); 825cdf0e10cSrcweir } 826cdf0e10cSrcweir 827cdf0e10cSrcweir // ----------------------------------------------------------------------- 828cdf0e10cSrcweir 829cdf0e10cSrcweir void LongCurrencyBox::RemoveValue( BigInt nValue ) 830cdf0e10cSrcweir { 831cdf0e10cSrcweir XubString aStr = ImplGetCurr( GetLocaleDataWrapper(), nValue, GetDecimalDigits(), GetCurrencySymbol(), IsUseThousandSep() ); 832cdf0e10cSrcweir ComboBox::RemoveEntry( aStr ); 833cdf0e10cSrcweir } 834cdf0e10cSrcweir 835cdf0e10cSrcweir // ----------------------------------------------------------------------- 836cdf0e10cSrcweir 837cdf0e10cSrcweir BigInt LongCurrencyBox::GetValue( sal_uInt16 nPos ) const 838cdf0e10cSrcweir { 839cdf0e10cSrcweir BigInt nValue = 0; 840cdf0e10cSrcweir ImplLongCurrencyGetValue( ComboBox::GetEntry( nPos ), nValue, 841cdf0e10cSrcweir GetDecimalDigits(), GetLocaleDataWrapper() ); 842cdf0e10cSrcweir return nValue; 843cdf0e10cSrcweir } 844cdf0e10cSrcweir 845cdf0e10cSrcweir // ----------------------------------------------------------------------- 846cdf0e10cSrcweir 847cdf0e10cSrcweir sal_uInt16 LongCurrencyBox::GetValuePos( BigInt nValue ) const 848cdf0e10cSrcweir { 849cdf0e10cSrcweir XubString aStr = ImplGetCurr( GetLocaleDataWrapper(), nValue, GetDecimalDigits(), GetCurrencySymbol(), IsUseThousandSep() ); 850cdf0e10cSrcweir return ComboBox::GetEntryPos( aStr ); 851cdf0e10cSrcweir } 852cdf0e10cSrcweir 853cdf0e10cSrcweir // ======================================================================= 854