1*9f62ea84SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*9f62ea84SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*9f62ea84SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*9f62ea84SAndrew Rist * distributed with this work for additional information
6*9f62ea84SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*9f62ea84SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*9f62ea84SAndrew Rist * "License"); you may not use this file except in compliance
9*9f62ea84SAndrew Rist * with the License. You may obtain a copy of the License at
10*9f62ea84SAndrew Rist *
11*9f62ea84SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*9f62ea84SAndrew Rist *
13*9f62ea84SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*9f62ea84SAndrew Rist * software distributed under the License is distributed on an
15*9f62ea84SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*9f62ea84SAndrew Rist * KIND, either express or implied. See the License for the
17*9f62ea84SAndrew Rist * specific language governing permissions and limitations
18*9f62ea84SAndrew Rist * under the License.
19*9f62ea84SAndrew Rist *
20*9f62ea84SAndrew Rist *************************************************************/
21*9f62ea84SAndrew Rist
22*9f62ea84SAndrew 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
ImplPower10(sal_uInt16 n)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
ImplGetCurr(const LocaleDataWrapper & rLocaleDataWrapper,const BigInt & rNumber,sal_uInt16 nDigits,const String & rCurrSymbol,sal_Bool bShowThousandSep)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
ImplNumericProcessKeyInput(Edit *,const KeyEvent & rKEvt,sal_Bool bStrictFormat,sal_Bool bThousandSep,const LocaleDataWrapper & rLocaleDataWrapper)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
ImplNumericGetValue(const XubString & rStr,BigInt & rValue,sal_uInt16 nDecDigits,const LocaleDataWrapper & rLocaleDataWrapper,sal_Bool bCurrency=sal_False)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
ImplLongCurrencyProcessKeyInput(Edit * pEdit,const KeyEvent & rKEvt,sal_Bool,sal_Bool bUseThousandSep,const LocaleDataWrapper & rLocaleDataWrapper)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
ImplLongCurrencyGetValue(const XubString & rStr,BigInt & rValue,sal_uInt16 nDecDigits,const LocaleDataWrapper & rLocaleDataWrapper)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
ImplLongCurrencyReformat(const XubString & rStr,BigInt nMin,BigInt nMax,sal_uInt16 nDecDigits,const LocaleDataWrapper & rLocaleDataWrapper,String & rOutStr,LongCurrencyFormatter & rFormatter)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
ImpInit()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
LongCurrencyFormatter()336cdf0e10cSrcweir LongCurrencyFormatter::LongCurrencyFormatter()
337cdf0e10cSrcweir {
338cdf0e10cSrcweir ImpInit();
339cdf0e10cSrcweir }
340cdf0e10cSrcweir
341cdf0e10cSrcweir // -----------------------------------------------------------------------
342cdf0e10cSrcweir
ImplLoadRes(const ResId & rResId)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
~LongCurrencyFormatter()378cdf0e10cSrcweir LongCurrencyFormatter::~LongCurrencyFormatter()
379cdf0e10cSrcweir {
380cdf0e10cSrcweir }
381cdf0e10cSrcweir
382cdf0e10cSrcweir // -----------------------------------------------------------------------
383cdf0e10cSrcweir
SetCurrencySymbol(const String & rStr)384cdf0e10cSrcweir void LongCurrencyFormatter::SetCurrencySymbol( const String& rStr )
385cdf0e10cSrcweir {
386cdf0e10cSrcweir maCurrencySymbol= rStr;
387cdf0e10cSrcweir ReformatAll();
388cdf0e10cSrcweir }
389cdf0e10cSrcweir
390cdf0e10cSrcweir // -----------------------------------------------------------------------
391cdf0e10cSrcweir
GetCurrencySymbol() const392cdf0e10cSrcweir String LongCurrencyFormatter::GetCurrencySymbol() const
393cdf0e10cSrcweir {
394cdf0e10cSrcweir return maCurrencySymbol.Len() ? maCurrencySymbol : GetLocaleDataWrapper().getCurrSymbol();
395cdf0e10cSrcweir }
396cdf0e10cSrcweir
397cdf0e10cSrcweir // -----------------------------------------------------------------------
398cdf0e10cSrcweir
SetValue(BigInt nNewValue)399cdf0e10cSrcweir void LongCurrencyFormatter::SetValue( BigInt nNewValue )
400cdf0e10cSrcweir {
401cdf0e10cSrcweir SetUserValue( nNewValue );
402cdf0e10cSrcweir mnFieldValue = mnLastValue;
403cdf0e10cSrcweir SetEmptyFieldValueData( sal_False );
404cdf0e10cSrcweir }
405cdf0e10cSrcweir
406cdf0e10cSrcweir // -----------------------------------------------------------------------
407cdf0e10cSrcweir
SetUserValue(BigInt nNewValue)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
GetValue() const433cdf0e10cSrcweir 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
Reformat()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
ReformatAll()479cdf0e10cSrcweir void LongCurrencyFormatter::ReformatAll()
480cdf0e10cSrcweir {
481cdf0e10cSrcweir Reformat();
482cdf0e10cSrcweir }
483cdf0e10cSrcweir
484cdf0e10cSrcweir // -----------------------------------------------------------------------
485cdf0e10cSrcweir
SetMin(BigInt nNewMin)486cdf0e10cSrcweir void LongCurrencyFormatter::SetMin( BigInt nNewMin )
487cdf0e10cSrcweir {
488cdf0e10cSrcweir mnMin = nNewMin;
489cdf0e10cSrcweir ReformatAll();
490cdf0e10cSrcweir }
491cdf0e10cSrcweir
492cdf0e10cSrcweir // -----------------------------------------------------------------------
493cdf0e10cSrcweir
SetMax(BigInt nNewMax)494cdf0e10cSrcweir void LongCurrencyFormatter::SetMax( BigInt nNewMax )
495cdf0e10cSrcweir {
496cdf0e10cSrcweir mnMax = nNewMax;
497cdf0e10cSrcweir ReformatAll();
498cdf0e10cSrcweir }
499cdf0e10cSrcweir
500cdf0e10cSrcweir // -----------------------------------------------------------------------
501cdf0e10cSrcweir
SetUseThousandSep(sal_Bool b)502cdf0e10cSrcweir void LongCurrencyFormatter::SetUseThousandSep( sal_Bool b )
503cdf0e10cSrcweir {
504cdf0e10cSrcweir mbThousandSep = b;
505cdf0e10cSrcweir ReformatAll();
506cdf0e10cSrcweir }
507cdf0e10cSrcweir
508cdf0e10cSrcweir
509cdf0e10cSrcweir // -----------------------------------------------------------------------
510cdf0e10cSrcweir
SetDecimalDigits(sal_uInt16 nDigits)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
GetDecimalDigits() const524cdf0e10cSrcweir sal_uInt16 LongCurrencyFormatter::GetDecimalDigits() const
525cdf0e10cSrcweir {
526cdf0e10cSrcweir return mnDecimalDigits;
527cdf0e10cSrcweir }
528cdf0e10cSrcweir
529cdf0e10cSrcweir // -----------------------------------------------------------------------
530cdf0e10cSrcweir
IsValueModified() const531cdf0e10cSrcweir 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
SetEmptyValue()543cdf0e10cSrcweir void LongCurrencyFormatter::SetEmptyValue()
544cdf0e10cSrcweir {
545cdf0e10cSrcweir GetField()->SetText( ImplGetSVEmptyStr() );
546cdf0e10cSrcweir SetEmptyFieldValueData( sal_True );
547cdf0e10cSrcweir }
548cdf0e10cSrcweir
549cdf0e10cSrcweir // -----------------------------------------------------------------------
550cdf0e10cSrcweir
Normalize(BigInt nValue) const551cdf0e10cSrcweir BigInt LongCurrencyFormatter::Normalize( BigInt nValue ) const
552cdf0e10cSrcweir {
553cdf0e10cSrcweir return (nValue * ImplPower10( GetDecimalDigits() ) );
554cdf0e10cSrcweir }
555cdf0e10cSrcweir
556cdf0e10cSrcweir // -----------------------------------------------------------------------
557cdf0e10cSrcweir
Denormalize(BigInt nValue) const558cdf0e10cSrcweir 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
ImplNewLongCurrencyFieldValue(LongCurrencyField * pField,BigInt nNewValue)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
LongCurrencyField(Window * pParent,WinBits nWinStyle)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
LongCurrencyField(Window * pParent,const ResId & rResId)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
ImplLoadRes(const ResId & rResId)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
~LongCurrencyField()645cdf0e10cSrcweir LongCurrencyField::~LongCurrencyField()
646cdf0e10cSrcweir {
647cdf0e10cSrcweir }
648cdf0e10cSrcweir
649cdf0e10cSrcweir // -----------------------------------------------------------------------
650cdf0e10cSrcweir
PreNotify(NotifyEvent & rNEvt)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
Notify(NotifyEvent & rNEvt)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
Modify()682cdf0e10cSrcweir void LongCurrencyField::Modify()
683cdf0e10cSrcweir {
684cdf0e10cSrcweir MarkToBeReformatted( sal_True );
685cdf0e10cSrcweir SpinField::Modify();
686cdf0e10cSrcweir }
687cdf0e10cSrcweir
688cdf0e10cSrcweir // -----------------------------------------------------------------------
689cdf0e10cSrcweir
Up()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
Down()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
First()716cdf0e10cSrcweir void LongCurrencyField::First()
717cdf0e10cSrcweir {
718cdf0e10cSrcweir ImplNewLongCurrencyFieldValue( this, mnFirst );
719cdf0e10cSrcweir SpinField::First();
720cdf0e10cSrcweir }
721cdf0e10cSrcweir
722cdf0e10cSrcweir // -----------------------------------------------------------------------
723cdf0e10cSrcweir
Last()724cdf0e10cSrcweir void LongCurrencyField::Last()
725cdf0e10cSrcweir {
726cdf0e10cSrcweir ImplNewLongCurrencyFieldValue( this, mnLast );
727cdf0e10cSrcweir SpinField::Last();
728cdf0e10cSrcweir }
729cdf0e10cSrcweir
730cdf0e10cSrcweir // =======================================================================
731cdf0e10cSrcweir
LongCurrencyBox(Window * pParent,WinBits nWinStyle)732cdf0e10cSrcweir LongCurrencyBox::LongCurrencyBox( Window* pParent, WinBits nWinStyle ) :
733cdf0e10cSrcweir ComboBox( pParent, nWinStyle )
734cdf0e10cSrcweir {
735cdf0e10cSrcweir SetField( this );
736cdf0e10cSrcweir Reformat();
737cdf0e10cSrcweir }
738cdf0e10cSrcweir
739cdf0e10cSrcweir // -----------------------------------------------------------------------
740cdf0e10cSrcweir
LongCurrencyBox(Window * pParent,const ResId & rResId)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
~LongCurrencyBox()757cdf0e10cSrcweir LongCurrencyBox::~LongCurrencyBox()
758cdf0e10cSrcweir {
759cdf0e10cSrcweir }
760cdf0e10cSrcweir
761cdf0e10cSrcweir // -----------------------------------------------------------------------
762cdf0e10cSrcweir
PreNotify(NotifyEvent & rNEvt)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
Notify(NotifyEvent & rNEvt)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
Modify()794cdf0e10cSrcweir void LongCurrencyBox::Modify()
795cdf0e10cSrcweir {
796cdf0e10cSrcweir MarkToBeReformatted( sal_True );
797cdf0e10cSrcweir ComboBox::Modify();
798cdf0e10cSrcweir }
799cdf0e10cSrcweir
800cdf0e10cSrcweir // -----------------------------------------------------------------------
801cdf0e10cSrcweir
ReformatAll()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
InsertValue(BigInt nValue,sal_uInt16 nPos)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
RemoveValue(BigInt nValue)829cdf0e10cSrcweir void LongCurrencyBox::RemoveValue( BigInt nValue )
830cdf0e10cSrcweir {
831cdf0e10cSrcweir XubString aStr = ImplGetCurr( GetLocaleDataWrapper(), nValue, GetDecimalDigits(), GetCurrencySymbol(), IsUseThousandSep() );
832cdf0e10cSrcweir ComboBox::RemoveEntry( aStr );
833cdf0e10cSrcweir }
834cdf0e10cSrcweir
835cdf0e10cSrcweir // -----------------------------------------------------------------------
836cdf0e10cSrcweir
GetValue(sal_uInt16 nPos) const837cdf0e10cSrcweir 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
GetValuePos(BigInt nValue) const847cdf0e10cSrcweir 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