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