Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #ifndef _SV_FIELD_HXX
21 : #define _SV_FIELD_HXX
22 :
23 : #include <vcl/dllapi.h>
24 : #include <tools/link.hxx>
25 : #include <tools/date.hxx>
26 : #include <tools/time.hxx>
27 : #include <vcl/spinfld.hxx>
28 : #include <vcl/combobox.hxx>
29 : #include <tools/fldunit.hxx>
30 :
31 : namespace com { namespace sun { namespace star { namespace lang { struct Locale; } } } }
32 :
33 : class CalendarWrapper;
34 : class LocaleDataWrapper;
35 : class LanguageTag;
36 :
37 : // -----------------
38 : // - FormatterBase -
39 : // -----------------
40 :
41 : class VCL_DLLPUBLIC FormatterBase
42 : {
43 : private:
44 : Edit* mpField;
45 : LocaleDataWrapper* mpLocaleDataWrapper;
46 : Link maErrorLink;
47 : sal_Bool mbReformat;
48 : sal_Bool mbStrictFormat;
49 : sal_Bool mbEmptyFieldValue;
50 : sal_Bool mbEmptyFieldValueEnabled;
51 : sal_Bool mbDefaultLocale;
52 :
53 : protected:
54 : SAL_DLLPRIVATE void ImplSetText( const XubString& rText, Selection* pNewSel = NULL );
55 0 : SAL_DLLPRIVATE sal_Bool ImplGetEmptyFieldValue() const { return mbEmptyFieldValue; }
56 :
57 0 : void SetEmptyFieldValueData( sal_Bool bValue ) { mbEmptyFieldValue = bValue; }
58 :
59 : SAL_DLLPRIVATE LocaleDataWrapper& ImplGetLocaleDataWrapper() const;
60 0 : sal_Bool IsDefaultLocale() const { return mbDefaultLocale; }
61 :
62 : public:
63 : FormatterBase( Edit* pField = NULL );
64 : virtual ~FormatterBase();
65 :
66 : const LocaleDataWrapper& GetLocaleDataWrapper() const;
67 :
68 0 : void SetField( Edit* pField ) { mpField = pField; }
69 0 : Edit* GetField() const { return mpField; }
70 :
71 0 : sal_Bool MustBeReformatted() const { return mbReformat; }
72 0 : void MarkToBeReformatted( sal_Bool b ) { mbReformat = b; }
73 :
74 : void SetStrictFormat( sal_Bool bStrict );
75 0 : sal_Bool IsStrictFormat() const { return mbStrictFormat; }
76 :
77 : virtual void Reformat();
78 : virtual void ReformatAll();
79 :
80 : virtual void SetLocale( const ::com::sun::star::lang::Locale& rLocale );
81 : const ::com::sun::star::lang::Locale& GetLocale() const;
82 : const LanguageTag& GetLanguageTag() const;
83 :
84 : const AllSettings& GetFieldSettings() const;
85 :
86 : void SetErrorHdl( const Link& rLink ) { maErrorLink = rLink; }
87 0 : const Link& GetErrorHdl() const { return maErrorLink; }
88 :
89 : void SetEmptyFieldValue();
90 : sal_Bool IsEmptyFieldValue() const;
91 :
92 0 : void EnableEmptyFieldValue( sal_Bool bEnable ) { mbEmptyFieldValueEnabled = bEnable; }
93 0 : sal_Bool IsEmptyFieldValueEnabled() const { return mbEmptyFieldValueEnabled; }
94 : };
95 :
96 :
97 : // --------------------
98 : // - PatternFormatter -
99 : // --------------------
100 :
101 : #define PATTERN_FORMAT_EMPTYLITERALS ((sal_uInt16)0x0001)
102 :
103 : class VCL_DLLPUBLIC PatternFormatter : public FormatterBase
104 : {
105 : private:
106 : rtl::OString m_aEditMask;
107 : XubString maFieldString;
108 : XubString maLiteralMask;
109 : sal_uInt16 mnFormatFlags;
110 : sal_Bool mbSameMask;
111 : sal_Bool mbInPattKeyInput;
112 :
113 : protected:
114 : PatternFormatter();
115 :
116 : SAL_DLLPRIVATE void ImplSetMask(const rtl::OString& rEditMask,
117 : const XubString& rLiteralMask);
118 0 : SAL_DLLPRIVATE sal_Bool ImplIsSameMask() const { return mbSameMask; }
119 0 : SAL_DLLPRIVATE sal_Bool& ImplGetInPattKeyInput() { return mbInPattKeyInput; }
120 :
121 : public:
122 : ~PatternFormatter();
123 :
124 : virtual void Reformat();
125 :
126 : void SetMask(const rtl::OString& rEditMask, const XubString& rLiteralMask );
127 0 : const rtl::OString& GetEditMask() const { return m_aEditMask; }
128 0 : const XubString& GetLiteralMask() const { return maLiteralMask; }
129 :
130 : void SetFormatFlags( sal_uInt16 nFlags ) { mnFormatFlags = nFlags; }
131 0 : sal_uInt16 GetFormatFlags() const { return mnFormatFlags; }
132 :
133 : void SetString( const XubString& rStr );
134 : XubString GetString() const;
135 : sal_Bool IsStringModified() const { return !(GetString().Equals( maFieldString )); }
136 : };
137 :
138 : // --------------------
139 : // - NumericFormatter -
140 : // --------------------
141 :
142 : class VCL_DLLPUBLIC NumericFormatter : public FormatterBase
143 : {
144 : private:
145 : SAL_DLLPRIVATE void ImplInit();
146 :
147 : protected:
148 : sal_Int64 mnFieldValue;
149 : sal_Int64 mnLastValue;
150 : sal_Int64 mnMin;
151 : sal_Int64 mnMax;
152 : sal_Int64 mnCorrectedValue;
153 : sal_uInt16 mnType;
154 : sal_uInt16 mnDecimalDigits;
155 : sal_Bool mbThousandSep;
156 : sal_Bool mbShowTrailingZeros;
157 :
158 : // the members below are used in all derivatives of NumericFormatter
159 : // not in NumericFormatter itself.
160 : sal_Int64 mnSpinSize;
161 : sal_Int64 mnFirst;
162 : sal_Int64 mnLast;
163 :
164 : protected:
165 : NumericFormatter();
166 :
167 : void FieldUp();
168 : void FieldDown();
169 : void FieldFirst();
170 : void FieldLast();
171 :
172 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
173 : SAL_DLLPRIVATE sal_Bool ImplNumericReformat( const XubString& rStr, double& rValue, XubString& rOutStr );
174 : SAL_DLLPRIVATE void ImplNewFieldValue( sal_Int64 nNewValue );
175 : SAL_DLLPRIVATE void ImplSetUserValue( sal_Int64 nNewValue, Selection* pNewSelection = NULL );
176 :
177 : public:
178 : ~NumericFormatter();
179 :
180 : virtual void Reformat();
181 :
182 : void SetMin( sal_Int64 nNewMin );
183 0 : sal_Int64 GetMin() const { return mnMin; }
184 : void SetMax( sal_Int64 nNewMax );
185 0 : sal_Int64 GetMax() const { return mnMax; }
186 :
187 0 : void SetFirst( sal_Int64 nNewFirst ) { mnFirst = nNewFirst; }
188 0 : sal_Int64 GetFirst() const { return mnFirst; }
189 0 : void SetLast( sal_Int64 nNewLast ) { mnLast = nNewLast; }
190 0 : sal_Int64 GetLast() const { return mnLast; }
191 0 : void SetSpinSize( sal_Int64 nNewSize ) { mnSpinSize = nNewSize; }
192 0 : sal_Int64 GetSpinSize() const { return mnSpinSize; }
193 :
194 : void SetDecimalDigits( sal_uInt16 nDigits );
195 : sal_uInt16 GetDecimalDigits() const;
196 :
197 : void SetUseThousandSep( sal_Bool b );
198 0 : sal_Bool IsUseThousandSep() const { return mbThousandSep; }
199 :
200 : void SetShowTrailingZeros( sal_Bool bShowTrailingZeros );
201 0 : sal_Bool IsShowTrailingZeros() const { return mbShowTrailingZeros; }
202 :
203 :
204 : void SetUserValue( sal_Int64 nNewValue );
205 : virtual void SetValue( sal_Int64 nNewValue );
206 : virtual sal_Int64 GetValue() const;
207 : virtual XubString CreateFieldText( sal_Int64 nValue ) const;
208 : sal_Bool IsValueModified() const;
209 : sal_Int64 GetCorrectedValue() const { return mnCorrectedValue; }
210 :
211 : sal_Int64 Normalize( sal_Int64 nValue ) const;
212 : sal_Int64 Denormalize( sal_Int64 nValue ) const;
213 : };
214 :
215 : // -------------------
216 : // - MetricFormatter -
217 : // -------------------
218 :
219 : class VCL_DLLPUBLIC MetricFormatter : public NumericFormatter
220 : {
221 : private:
222 : SAL_DLLPRIVATE void ImplInit();
223 :
224 : protected:
225 : XubString maCustomUnitText;
226 : XubString maCurUnitText;
227 : sal_Int64 mnBaseValue;
228 : FieldUnit meUnit;
229 : Link maCustomConvertLink;
230 :
231 : protected:
232 : MetricFormatter();
233 :
234 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
235 : SAL_DLLPRIVATE sal_Bool ImplMetricReformat( const XubString& rStr, double& rValue, XubString& rOutStr );
236 :
237 : public:
238 : ~MetricFormatter();
239 :
240 : virtual void CustomConvert() = 0;
241 : virtual void Reformat();
242 :
243 : virtual void SetUnit( FieldUnit meUnit );
244 0 : FieldUnit GetUnit() const { return meUnit; }
245 : void SetCustomUnitText( const XubString& rStr );
246 0 : const XubString& GetCustomUnitText() const { return maCustomUnitText; }
247 0 : const XubString& GetCurUnitText() const { return maCurUnitText; }
248 :
249 : using NumericFormatter::SetMax;
250 : void SetMax( sal_Int64 nNewMax, FieldUnit eInUnit );
251 : using NumericFormatter::GetMax;
252 : sal_Int64 GetMax( FieldUnit eOutUnit ) const;
253 : using NumericFormatter::SetMin;
254 : void SetMin( sal_Int64 nNewMin, FieldUnit eInUnit );
255 : using NumericFormatter::GetMin;
256 : sal_Int64 GetMin( FieldUnit eOutUnit ) const;
257 : void SetBaseValue( sal_Int64 nNewBase, FieldUnit eInUnit = FUNIT_NONE );
258 : sal_Int64 GetBaseValue( FieldUnit eOutUnit = FUNIT_NONE ) const;
259 :
260 : virtual void SetValue( sal_Int64 nNewValue, FieldUnit eInUnit );
261 : virtual void SetValue( sal_Int64 nValue );
262 : using NumericFormatter::SetUserValue;
263 : void SetUserValue( sal_Int64 nNewValue, FieldUnit eInUnit );
264 : virtual sal_Int64 GetValue( FieldUnit eOutUnit ) const;
265 : virtual sal_Int64 GetValue() const;
266 : virtual XubString CreateFieldText( sal_Int64 nValue ) const;
267 : using NumericFormatter::GetCorrectedValue;
268 : sal_Int64 GetCorrectedValue( FieldUnit eOutUnit ) const;
269 :
270 0 : void SetCustomConvertHdl( const Link& rLink ) { maCustomConvertLink = rLink; }
271 : const Link& GetCustomConvertHdl() const { return maCustomConvertLink; }
272 : };
273 :
274 :
275 : // ---------------------
276 : // - CurrencyFormatter -
277 : // ---------------------
278 :
279 : class VCL_DLLPUBLIC CurrencyFormatter : public NumericFormatter
280 : {
281 : private:
282 : SAL_DLLPRIVATE void ImplInit();
283 :
284 : protected:
285 : CurrencyFormatter();
286 : SAL_DLLPRIVATE sal_Bool ImplCurrencyReformat( const XubString& rStr, XubString& rOutStr );
287 :
288 : public:
289 : ~CurrencyFormatter();
290 :
291 : virtual void Reformat();
292 :
293 : String GetCurrencySymbol() const;
294 :
295 : virtual void SetValue( sal_Int64 nNewValue );
296 : virtual sal_Int64 GetValue() const;
297 : virtual XubString CreateFieldText( sal_Int64 nValue ) const;
298 : };
299 :
300 :
301 : // -----------------
302 : // - DateFormatter -
303 : // -----------------
304 :
305 : class VCL_DLLPUBLIC DateFormatter : public FormatterBase
306 : {
307 : private:
308 : CalendarWrapper* mpCalendarWrapper;
309 : Date maFieldDate;
310 : Date maLastDate;
311 : Date maMin;
312 : Date maMax;
313 : Date maCorrectedDate;
314 : sal_Bool mbLongFormat;
315 : sal_Bool mbShowDateCentury;
316 : sal_uInt16 mnDateFormat;
317 : sal_uLong mnExtDateFormat;
318 : sal_Bool mbEnforceValidValue;
319 :
320 : SAL_DLLPRIVATE void ImplInit();
321 :
322 : protected:
323 : DateFormatter();
324 :
325 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
326 0 : SAL_DLLPRIVATE const Date& ImplGetFieldDate() const { return maFieldDate; }
327 : SAL_DLLPRIVATE sal_Bool ImplDateReformat( const XubString& rStr, XubString& rOutStr,
328 : const AllSettings& rSettings );
329 : SAL_DLLPRIVATE void ImplSetUserDate( const Date& rNewDate,
330 : Selection* pNewSelection = NULL );
331 : SAL_DLLPRIVATE XubString ImplGetDateAsText( const Date& rDate,
332 : const AllSettings& rSettings ) const;
333 : SAL_DLLPRIVATE void ImplNewFieldValue( const Date& rDate );
334 : CalendarWrapper& GetCalendarWrapper() const;
335 :
336 : SAL_DLLPRIVATE sal_Bool ImplAllowMalformedInput() const;
337 :
338 : public:
339 : ~DateFormatter();
340 :
341 : virtual void Reformat();
342 : virtual void ReformatAll();
343 :
344 : virtual void SetLocale( const ::com::sun::star::lang::Locale& rLocale );
345 :
346 :
347 : void SetExtDateFormat( ExtDateFieldFormat eFormat );
348 : ExtDateFieldFormat GetExtDateFormat( sal_Bool bResolveSystemFormat = sal_False ) const;
349 :
350 : void SetMin( const Date& rNewMin );
351 0 : const Date& GetMin() const { return maMin; }
352 :
353 : void SetMax( const Date& rNewMax );
354 0 : const Date& GetMax() const { return maMax; }
355 :
356 :
357 : // --------------------------------------------------------------
358 : // MT: Remove these methods too, ExtDateFormat should be enough!
359 : // What should happen if using DDMMYYYY, but ShowCentury=sal_False?
360 : // --------------------------------------------------------------
361 : void SetLongFormat( sal_Bool bLong );
362 0 : sal_Bool IsLongFormat() const { return mbLongFormat; }
363 : void SetShowDateCentury( sal_Bool bShowCentury );
364 0 : sal_Bool IsShowDateCentury() const { return mbShowDateCentury; }
365 : // --------------------------------------------------------------
366 :
367 : void SetDate( const Date& rNewDate );
368 : void SetUserDate( const Date& rNewDate );
369 : Date GetDate() const;
370 : void SetEmptyDate();
371 : sal_Bool IsEmptyDate() const;
372 : Date GetCorrectedDate() const { return maCorrectedDate; }
373 :
374 0 : void ResetLastDate() { maLastDate = Date( 0, 0, 0 ); }
375 :
376 : static void ExpandCentury( Date& rDate );
377 : static void ExpandCentury( Date& rDate, sal_uInt16 nTwoDigitYearStart );
378 :
379 0 : static Date GetInvalidDate() { return Date( 0, 0, 0 ); }
380 :
381 : /** enables or disables the enforcement of valid values
382 :
383 : If this is set to <TRUE/> (which is the default), then GetDate will always return a valid
384 : date, no matter whether the current text can really be interpreted as date. (Note: this
385 : is the compatible bahavior).
386 :
387 : If this is set to <FALSE/>, the GetDate will return GetInvalidDate, in case the current text
388 : cannot be interpreted as date.
389 :
390 : In addition, if this is set to <FALSE/>, the text in the field will <em>not</em> be corrected
391 : when the control loses the focus - instead, the invalid input will be preserved.
392 : */
393 0 : void EnforceValidValue( sal_Bool _bEnforce ) { mbEnforceValidValue = _bEnforce; }
394 0 : inline sal_Bool IsEnforceValidValue( ) const { return mbEnforceValidValue; }
395 : };
396 :
397 :
398 : // -----------------
399 : // - TimeFormatter -
400 : // -----------------
401 :
402 : class VCL_DLLPUBLIC TimeFormatter : public FormatterBase
403 : {
404 : private:
405 : Time maLastTime;
406 : Time maMin;
407 : Time maMax;
408 : Time maCorrectedTime;
409 : TimeFieldFormat meFormat;
410 : sal_uInt16 mnTimeFormat;
411 : sal_Bool mbDuration;
412 : sal_Bool mbEnforceValidValue;
413 :
414 : SAL_DLLPRIVATE void ImplInit();
415 :
416 : protected:
417 : Time maFieldTime;
418 :
419 : TimeFormatter();
420 :
421 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
422 : SAL_DLLPRIVATE sal_Bool ImplTimeReformat( const XubString& rStr, XubString& rOutStr );
423 : SAL_DLLPRIVATE void ImplNewFieldValue( const Time& rTime );
424 : SAL_DLLPRIVATE void ImplSetUserTime( const Time& rNewTime, Selection* pNewSelection = NULL );
425 : SAL_DLLPRIVATE sal_Bool ImplAllowMalformedInput() const;
426 :
427 : public:
428 :
429 : enum TimeFormat {
430 : HOUR_12,
431 : HOUR_24
432 : };
433 :
434 : ~TimeFormatter();
435 :
436 : virtual void Reformat();
437 : virtual void ReformatAll();
438 :
439 : void SetMin( const Time& rNewMin );
440 0 : const Time& GetMin() const { return maMin; }
441 : void SetMax( const Time& rNewMax );
442 0 : const Time& GetMax() const { return maMax; }
443 :
444 : void SetTimeFormat( TimeFormat eNewFormat );
445 : TimeFormat GetTimeFormat() const;
446 :
447 : void SetFormat( TimeFieldFormat eNewFormat );
448 0 : TimeFieldFormat GetFormat() const { return meFormat; }
449 :
450 : void SetDuration( sal_Bool mbDuration );
451 0 : sal_Bool IsDuration() const { return mbDuration; }
452 :
453 : void SetTime( const Time& rNewTime );
454 : void SetUserTime( const Time& rNewTime );
455 : Time GetTime() const;
456 0 : void SetEmptyTime() { FormatterBase::SetEmptyFieldValue(); }
457 0 : sal_Bool IsEmptyTime() const { return FormatterBase::IsEmptyFieldValue(); }
458 : Time GetCorrectedTime() const { return maCorrectedTime; }
459 :
460 0 : static Time GetInvalidTime() { return Time( 99, 99, 99 ); }
461 :
462 : /** enables or disables the enforcement of valid values
463 :
464 : If this is set to <TRUE/> (which is the default), then GetTime will always return a valid
465 : time, no matter whether the current text can really be interpreted as time. (Note: this
466 : is the compatible bahavior).
467 :
468 : If this is set to <FALSE/>, the GetTime will return GetInvalidTime, in case the current text
469 : cannot be interpreted as time.
470 :
471 : In addition, if this is set to <FALSE/>, the text in the field will <em>not</em> be corrected
472 : when the control loses the focus - instead, the invalid input will be preserved.
473 : */
474 0 : void EnforceValidValue( sal_Bool _bEnforce ) { mbEnforceValidValue = _bEnforce; }
475 0 : inline sal_Bool IsEnforceValidValue( ) const { return mbEnforceValidValue; }
476 : };
477 :
478 :
479 : // ----------------
480 : // - PatternField -
481 : // ----------------
482 :
483 : class VCL_DLLPUBLIC PatternField : public SpinField, public PatternFormatter
484 : {
485 : public:
486 : PatternField( Window* pParent, WinBits nWinStyle );
487 : ~PatternField();
488 :
489 : virtual long PreNotify( NotifyEvent& rNEvt );
490 : virtual long Notify( NotifyEvent& rNEvt );
491 : virtual void Modify();
492 : };
493 :
494 :
495 : // ----------------
496 : // - NumericField -
497 : // ----------------
498 :
499 : class VCL_DLLPUBLIC NumericField : public SpinField, public NumericFormatter
500 : {
501 : protected:
502 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
503 :
504 : public:
505 : NumericField( Window* pParent, WinBits nWinStyle );
506 : NumericField( Window* pParent, const ResId& rResId );
507 : ~NumericField();
508 :
509 : virtual long PreNotify( NotifyEvent& rNEvt );
510 : virtual long Notify( NotifyEvent& rNEvt );
511 : virtual void DataChanged( const DataChangedEvent& rDCEvt );
512 :
513 : virtual Size CalcMinimumSize() const;
514 :
515 : virtual void Modify();
516 :
517 : virtual void Up();
518 : virtual void Down();
519 : virtual void First();
520 : virtual void Last();
521 : virtual bool set_property(const rtl::OString &rKey, const rtl::OString &rValue);
522 : };
523 :
524 :
525 : // ----------------
526 : // - MetricField -
527 : // ----------------
528 :
529 : class VCL_DLLPUBLIC MetricField : public SpinField, public MetricFormatter
530 : {
531 : protected:
532 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
533 :
534 : public:
535 : MetricField( Window* pParent, WinBits nWinStyle );
536 : MetricField( Window* pParent, const ResId& rResId );
537 : ~MetricField();
538 :
539 : virtual long PreNotify( NotifyEvent& rNEvt );
540 : virtual long Notify( NotifyEvent& rNEvt );
541 : virtual void DataChanged( const DataChangedEvent& rDCEvt );
542 :
543 : virtual Size CalcMinimumSize() const;
544 :
545 : virtual void Modify();
546 :
547 : virtual void Up();
548 : virtual void Down();
549 : virtual void First();
550 : virtual void Last();
551 : virtual void CustomConvert();
552 :
553 : virtual void SetUnit( FieldUnit meUnit );
554 :
555 : void SetFirst( sal_Int64 nNewFirst, FieldUnit eInUnit );
556 0 : inline void SetFirst(sal_Int64 first) { SetFirst(first, FUNIT_NONE); }
557 : sal_Int64 GetFirst( FieldUnit eOutUnit ) const;
558 0 : inline sal_Int64 GetFirst() const { return GetFirst(FUNIT_NONE); }
559 : void SetLast( sal_Int64 nNewLast, FieldUnit eInUnit );
560 0 : inline void SetLast(sal_Int64 last) { SetLast(last, FUNIT_NONE); }
561 : sal_Int64 GetLast( FieldUnit eOutUnit ) const;
562 0 : inline sal_Int64 GetLast() const { return GetLast(FUNIT_NONE); }
563 :
564 : static void SetDefaultUnit( FieldUnit eDefaultUnit );
565 : static FieldUnit GetDefaultUnit();
566 : static sal_Int64 ConvertValue( sal_Int64 nValue, sal_Int64 mnBaseValue, sal_uInt16 nDecDigits,
567 : FieldUnit eInUnit, FieldUnit eOutUnit );
568 : static sal_Int64 ConvertValue( sal_Int64 nValue, sal_uInt16 nDecDigits,
569 : MapUnit eInUnit, FieldUnit eOutUnit );
570 :
571 : // for backwards compatibility
572 : // caution: conversion to double loses precision
573 : static double ConvertDoubleValue( double nValue, sal_Int64 mnBaseValue, sal_uInt16 nDecDigits,
574 : FieldUnit eInUnit, FieldUnit eOutUnit );
575 : static double ConvertDoubleValue( double nValue, sal_uInt16 nDecDigits,
576 : FieldUnit eInUnit, MapUnit eOutUnit );
577 : static double ConvertDoubleValue( double nValue, sal_uInt16 nDecDigits,
578 : MapUnit eInUnit, FieldUnit eOutUnit );
579 :
580 : // for backwards compatibility
581 : // caution: conversion to double loses precision
582 142 : static double ConvertDoubleValue( sal_Int64 nValue, sal_Int64 nBaseValue, sal_uInt16 nDecDigits,
583 : FieldUnit eInUnit, FieldUnit eOutUnit )
584 142 : { return ConvertDoubleValue( static_cast<double>(nValue), nBaseValue, nDecDigits, eInUnit, eOutUnit ); }
585 0 : static double ConvertDoubleValue( sal_Int64 nValue, sal_uInt16 nDecDigits,
586 : FieldUnit eInUnit, MapUnit eOutUnit )
587 0 : { return ConvertDoubleValue( static_cast<double>(nValue), nDecDigits, eInUnit, eOutUnit ); }
588 0 : static double ConvertDoubleValue( sal_Int64 nValue, sal_uInt16 nDecDigits,
589 : MapUnit eInUnit, FieldUnit eOutUnit )
590 0 : { return ConvertDoubleValue( static_cast<double>(nValue), nDecDigits, eInUnit, eOutUnit ); }
591 :
592 : virtual bool set_property(const rtl::OString &rKey, const rtl::OString &rValue);
593 : };
594 :
595 :
596 : // -----------------
597 : // - CurrencyField -
598 : // -----------------
599 :
600 : class VCL_DLLPUBLIC CurrencyField : public SpinField, public CurrencyFormatter
601 : {
602 : public:
603 : CurrencyField( Window* pParent, WinBits nWinStyle );
604 :
605 : ~CurrencyField();
606 :
607 : virtual long PreNotify( NotifyEvent& rNEvt );
608 : virtual long Notify( NotifyEvent& rNEvt );
609 : virtual void DataChanged( const DataChangedEvent& rDCEvt );
610 :
611 : virtual void Modify();
612 :
613 : virtual void Up();
614 : virtual void Down();
615 : virtual void First();
616 : virtual void Last();
617 : };
618 :
619 :
620 : // -------------
621 : // - DateField -
622 : // -------------
623 :
624 : class VCL_DLLPUBLIC DateField : public SpinField, public DateFormatter
625 : {
626 : private:
627 : Date maFirst;
628 : Date maLast;
629 :
630 : protected:
631 : SAL_DLLPRIVATE void ImplDateSpinArea( sal_Bool bUp );
632 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
633 :
634 : public:
635 : DateField( Window* pParent, WinBits nWinStyle );
636 : DateField( Window* pParent, const ResId& rResId );
637 : ~DateField();
638 :
639 : virtual long PreNotify( NotifyEvent& rNEvt );
640 : virtual long Notify( NotifyEvent& rNEvt );
641 : virtual void DataChanged( const DataChangedEvent& rDCEvt );
642 :
643 : virtual void Modify();
644 :
645 : virtual void Up();
646 : virtual void Down();
647 : virtual void First();
648 : virtual void Last();
649 :
650 0 : void SetFirst( const Date& rNewFirst ) { maFirst = rNewFirst; }
651 0 : Date GetFirst() const { return maFirst; }
652 0 : void SetLast( const Date& rNewLast ) { maLast = rNewLast; }
653 0 : Date GetLast() const { return maLast; }
654 : };
655 :
656 : // -------------
657 : // - TimeField -
658 : // -------------
659 :
660 : class VCL_DLLPUBLIC TimeField : public SpinField, public TimeFormatter
661 : {
662 : private:
663 : Time maFirst;
664 : Time maLast;
665 :
666 : protected:
667 : SAL_DLLPRIVATE void ImplTimeSpinArea( sal_Bool bUp );
668 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
669 :
670 : public:
671 : TimeField( Window* pParent, WinBits nWinStyle );
672 : TimeField( Window* pParent, const ResId& rResId );
673 : ~TimeField();
674 :
675 : virtual long PreNotify( NotifyEvent& rNEvt );
676 : virtual long Notify( NotifyEvent& rNEvt );
677 : virtual void DataChanged( const DataChangedEvent& rDCEvt );
678 :
679 : virtual void Modify();
680 :
681 : virtual void Up();
682 : virtual void Down();
683 : virtual void First();
684 : virtual void Last();
685 :
686 0 : void SetFirst( const Time& rNewFirst ) { maFirst = rNewFirst; }
687 0 : Time GetFirst() const { return maFirst; }
688 0 : void SetLast( const Time& rNewLast ) { maLast = rNewLast; }
689 0 : Time GetLast() const { return maLast; }
690 :
691 : void SetExtFormat( ExtTimeFieldFormat eFormat );
692 : };
693 :
694 :
695 : // --------------
696 : // - PatternBox -
697 : // --------------
698 :
699 : class VCL_DLLPUBLIC PatternBox : public ComboBox, public PatternFormatter
700 : {
701 : public:
702 : PatternBox( Window* pParent, WinBits nWinStyle );
703 : ~PatternBox();
704 :
705 : virtual long PreNotify( NotifyEvent& rNEvt );
706 : virtual long Notify( NotifyEvent& rNEvt );
707 :
708 : virtual void Modify();
709 :
710 : virtual void ReformatAll();
711 : };
712 :
713 :
714 : // --------------
715 : // - NumericBox -
716 : // --------------
717 :
718 : class VCL_DLLPUBLIC NumericBox : public ComboBox, public NumericFormatter
719 : {
720 : public:
721 : NumericBox( Window* pParent, WinBits nWinStyle );
722 : NumericBox( Window* pParent, const ResId& rResId );
723 : ~NumericBox();
724 :
725 : virtual long PreNotify( NotifyEvent& rNEvt );
726 : virtual long Notify( NotifyEvent& rNEvt );
727 : virtual void DataChanged( const DataChangedEvent& rDCEvt );
728 :
729 : virtual void Modify();
730 :
731 : virtual void ReformatAll();
732 :
733 : void InsertValue( sal_Int64 nValue, sal_uInt16 nPos = COMBOBOX_APPEND );
734 : };
735 :
736 :
737 : // -------------
738 : // - MetricBox -
739 : // -------------
740 :
741 : class VCL_DLLPUBLIC MetricBox : public ComboBox, public MetricFormatter
742 : {
743 : public:
744 : MetricBox( Window* pParent, WinBits nWinStyle );
745 : MetricBox( Window* pParent, const ResId& rResId );
746 : ~MetricBox();
747 :
748 : virtual long PreNotify( NotifyEvent& rNEvt );
749 : virtual long Notify( NotifyEvent& rNEvt );
750 : virtual void DataChanged( const DataChangedEvent& rDCEvt );
751 :
752 : virtual void Modify();
753 :
754 : virtual void CustomConvert();
755 : virtual void ReformatAll();
756 :
757 : void InsertValue( sal_Int64 nValue, FieldUnit eInUnit = FUNIT_NONE,
758 : sal_uInt16 nPos = COMBOBOX_APPEND );
759 : sal_Int64 GetValue( sal_uInt16 nPos, FieldUnit eOutUnit = FUNIT_NONE ) const;
760 : sal_uInt16 GetValuePos( sal_Int64 nValue,
761 : FieldUnit eInUnit = FUNIT_NONE ) const;
762 :
763 : // Needed, because GetValue() with nPos hide these functions
764 : virtual sal_Int64 GetValue( FieldUnit eOutUnit ) const;
765 : virtual sal_Int64 GetValue() const;
766 : };
767 :
768 :
769 : // ---------------
770 : // - CurrencyBox -
771 : // ---------------
772 :
773 : class VCL_DLLPUBLIC CurrencyBox : public ComboBox, public CurrencyFormatter
774 : {
775 : public:
776 : CurrencyBox( Window* pParent, WinBits nWinStyle );
777 : CurrencyBox( Window* pParent, const ResId& rResId );
778 : ~CurrencyBox();
779 :
780 : virtual long PreNotify( NotifyEvent& rNEvt );
781 : virtual long Notify( NotifyEvent& rNEvt );
782 : virtual void DataChanged( const DataChangedEvent& rDCEvt );
783 :
784 : virtual void Modify();
785 :
786 : virtual void ReformatAll();
787 :
788 : virtual sal_Int64 GetValue() const;
789 : };
790 :
791 : // -----------
792 : // - DateBox -
793 : // -----------
794 :
795 : class VCL_DLLPUBLIC DateBox : public ComboBox, public DateFormatter
796 : {
797 : public:
798 : DateBox( Window* pParent, WinBits nWinStyle );
799 : ~DateBox();
800 :
801 : virtual long PreNotify( NotifyEvent& rNEvt );
802 : virtual long Notify( NotifyEvent& rNEvt );
803 : virtual void DataChanged( const DataChangedEvent& rDCEvt );
804 :
805 : virtual void Modify();
806 :
807 : virtual void ReformatAll();
808 : };
809 :
810 :
811 : // -----------
812 : // - TimeBox -
813 : // -----------
814 :
815 : class VCL_DLLPUBLIC TimeBox : public ComboBox, public TimeFormatter
816 : {
817 : public:
818 : TimeBox( Window* pParent, WinBits nWinStyle );
819 : ~TimeBox();
820 :
821 : virtual long PreNotify( NotifyEvent& rNEvt );
822 : virtual long Notify( NotifyEvent& rNEvt );
823 : virtual void DataChanged( const DataChangedEvent& rDCEvt );
824 :
825 : virtual void Modify();
826 :
827 : virtual void ReformatAll();
828 : };
829 :
830 : #endif // _SV_FIELD_HXX
831 :
832 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|