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 : 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 237 : SAL_DLLPRIVATE bool ImplGetEmptyFieldValue() const { return mbEmptyFieldValue; }
56 :
57 359 : 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 6071 : void SetField( Edit* pField ) { mpField = pField; }
69 125470 : Edit* GetField() const { return mpField; }
70 :
71 56 : bool MustBeReformatted() const { return mbReformat; }
72 54106 : void MarkToBeReformatted( bool b ) { mbReformat = b; }
73 :
74 : void SetStrictFormat( bool bStrict );
75 68 : 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 38539 : const Link& GetErrorHdl() const { return maErrorLink; }
88 :
89 : void SetEmptyFieldValue();
90 : bool IsEmptyFieldValue() const;
91 :
92 162 : void EnableEmptyFieldValue( bool bEnable ) { mbEmptyFieldValueEnabled = bEnable; }
93 116 : 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 54824 : sal_Int64 GetMin() const { return mnMin; }
185 : void SetMax( sal_Int64 nNewMax );
186 52876 : sal_Int64 GetMax() const { return mnMax; }
187 :
188 : sal_Int64 ClipAgainstMinMax(sal_Int64 nValue) const;
189 :
190 77 : void SetFirst( sal_Int64 nNewFirst ) { mnFirst = nNewFirst; }
191 0 : sal_Int64 GetFirst() const { return mnFirst; }
192 2 : void SetLast( sal_Int64 nNewLast ) { mnLast = nNewLast; }
193 0 : sal_Int64 GetLast() const { return mnLast; }
194 1028 : void SetSpinSize( sal_Int64 nNewSize ) { mnSpinSize = nNewSize; }
195 0 : sal_Int64 GetSpinSize() const { return mnSpinSize; }
196 :
197 : void SetDecimalDigits( sal_uInt16 nDigits );
198 378042 : sal_uInt16 GetDecimalDigits() const { return mnDecimalDigits;}
199 :
200 : void SetUseThousandSep( bool b );
201 129904 : bool IsUseThousandSep() const { return mbThousandSep; }
202 :
203 : void SetShowTrailingZeros( bool bShowTrailingZeros );
204 129904 : 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 7636 : 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 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
329 60 : SAL_DLLPRIVATE const Date& ImplGetFieldDate() const { return maFieldDate; }
330 : SAL_DLLPRIVATE bool ImplDateReformat( const OUString& rStr, OUString& rOutStr,
331 : const AllSettings& rSettings );
332 : SAL_DLLPRIVATE void ImplSetUserDate( const Date& rNewDate,
333 : Selection* pNewSelection = NULL );
334 : SAL_DLLPRIVATE OUString ImplGetDateAsText( const Date& rDate,
335 : const AllSettings& rSettings ) const;
336 : SAL_DLLPRIVATE void ImplNewFieldValue( const Date& rDate );
337 : CalendarWrapper& GetCalendarWrapper() const;
338 :
339 : SAL_DLLPRIVATE bool ImplAllowMalformedInput() const;
340 :
341 : public:
342 : virtual ~DateFormatter();
343 :
344 : virtual void Reformat() SAL_OVERRIDE;
345 : virtual void ReformatAll() SAL_OVERRIDE;
346 :
347 : virtual void SetLocale( const ::com::sun::star::lang::Locale& rLocale ) SAL_OVERRIDE;
348 :
349 :
350 : void SetExtDateFormat( ExtDateFieldFormat eFormat );
351 : ExtDateFieldFormat GetExtDateFormat( bool bResolveSystemFormat = false ) const;
352 :
353 : void SetMin( const Date& rNewMin );
354 194 : const Date& GetMin() const { return maMin; }
355 :
356 : void SetMax( const Date& rNewMax );
357 298 : const Date& GetMax() const { return maMax; }
358 :
359 :
360 :
361 : // MT: Remove these methods too, ExtDateFormat should be enough!
362 : // What should happen if using DDMMYYYY, but ShowCentury=false?
363 :
364 : void SetLongFormat( bool bLong );
365 0 : bool IsLongFormat() const { return mbLongFormat; }
366 : void SetShowDateCentury( bool bShowCentury );
367 0 : bool IsShowDateCentury() const { return mbShowDateCentury; }
368 :
369 :
370 : void SetDate( const Date& rNewDate );
371 : void SetUserDate( const Date& rNewDate );
372 : Date GetDate() const;
373 : void SetEmptyDate();
374 : bool IsEmptyDate() const;
375 : Date GetCorrectedDate() const { return maCorrectedDate; }
376 :
377 60 : void ResetLastDate() { maLastDate = Date( 0, 0, 0 ); }
378 :
379 : static void ExpandCentury( Date& rDate );
380 : static void ExpandCentury( Date& rDate, sal_uInt16 nTwoDigitYearStart );
381 :
382 12 : static Date GetInvalidDate() { return Date( 0, 0, 0 ); }
383 :
384 : /** enables or disables the enforcement of valid values
385 :
386 : If this is set to true (which is the default), then GetDate will always return a valid
387 : date, no matter whether the current text can really be interpreted as date. (Note: this
388 : is the compatible bahavior).
389 :
390 : If this is set to false, the GetDate will return GetInvalidDate, in case the current text
391 : cannot be interpreted as date.
392 :
393 : In addition, if this is set to false, the text in the field will \em not be corrected
394 : when the control loses the focus - instead, the invalid input will be preserved.
395 : */
396 78 : void EnforceValidValue( bool _bEnforce ) { mbEnforceValidValue = _bEnforce; }
397 108 : inline bool IsEnforceValidValue( ) const { return mbEnforceValidValue; }
398 : };
399 :
400 :
401 :
402 : // - TimeFormatter -
403 :
404 :
405 : class VCL_DLLPUBLIC TimeFormatter : public FormatterBase
406 : {
407 : private:
408 : tools::Time maLastTime;
409 : tools::Time maMin;
410 : tools::Time maMax;
411 : tools::Time maCorrectedTime;
412 : TimeFieldFormat meFormat;
413 : sal_uInt16 mnTimeFormat;
414 : bool mbDuration;
415 : bool mbEnforceValidValue;
416 :
417 : SAL_DLLPRIVATE void ImplInit();
418 :
419 : protected:
420 : tools::Time maFieldTime;
421 :
422 : TimeFormatter();
423 :
424 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
425 : SAL_DLLPRIVATE bool ImplTimeReformat( const OUString& rStr, OUString& rOutStr );
426 : SAL_DLLPRIVATE void ImplNewFieldValue( const tools::Time& rTime );
427 : SAL_DLLPRIVATE void ImplSetUserTime( const tools::Time& rNewTime, Selection* pNewSelection = NULL );
428 : SAL_DLLPRIVATE bool ImplAllowMalformedInput() const;
429 :
430 : public:
431 :
432 : enum TimeFormat {
433 : HOUR_12,
434 : HOUR_24
435 : };
436 :
437 : virtual ~TimeFormatter();
438 :
439 : virtual void Reformat() SAL_OVERRIDE;
440 : virtual void ReformatAll() SAL_OVERRIDE;
441 :
442 : void SetMin( const tools::Time& rNewMin );
443 556 : const tools::Time& GetMin() const { return maMin; }
444 : void SetMax( const tools::Time& rNewMax );
445 528 : const tools::Time& GetMax() const { return maMax; }
446 :
447 : void SetTimeFormat( TimeFormat eNewFormat );
448 380 : TimeFormat GetTimeFormat() const { return (TimeFormat)mnTimeFormat;}
449 :
450 : void SetFormat( TimeFieldFormat eNewFormat );
451 714 : TimeFieldFormat GetFormat() const { return meFormat; }
452 :
453 : void SetDuration( bool mbDuration );
454 714 : bool IsDuration() const { return mbDuration; }
455 :
456 : void SetTime( const tools::Time& rNewTime );
457 : void SetUserTime( const tools::Time& rNewTime );
458 : tools::Time GetTime() const;
459 4 : void SetEmptyTime() { FormatterBase::SetEmptyFieldValue(); }
460 44 : bool IsEmptyTime() const { return FormatterBase::IsEmptyFieldValue(); }
461 : tools::Time GetCorrectedTime() const { return maCorrectedTime; }
462 :
463 0 : static tools::Time GetInvalidTime() { return tools::Time( 99, 99, 99 ); }
464 :
465 : /** enables or disables the enforcement of valid values
466 :
467 : If this is set to true (which is the default), then GetTime will always return a valid
468 : time, no matter whether the current text can really be interpreted as time. (Note: this
469 : is the compatible bahavior).
470 :
471 : If this is set to false, the GetTime will return GetInvalidTime, in case the current text
472 : cannot be interpreted as time.
473 :
474 : In addition, if this is set to false, the text in the field will <em>not</em> be corrected
475 : when the control loses the focus - instead, the invalid input will be preserved.
476 : */
477 52 : void EnforceValidValue( bool _bEnforce ) { mbEnforceValidValue = _bEnforce; }
478 98 : inline bool IsEnforceValidValue( ) const { return mbEnforceValidValue; }
479 : };
480 :
481 :
482 :
483 : // - PatternField -
484 :
485 :
486 : class VCL_DLLPUBLIC PatternField : public SpinField, public PatternFormatter
487 : {
488 : public:
489 : explicit PatternField( vcl::Window* pParent, WinBits nWinStyle );
490 : virtual ~PatternField();
491 :
492 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
493 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
494 : virtual void Modify() SAL_OVERRIDE;
495 : };
496 :
497 :
498 :
499 : // - NumericField -
500 :
501 :
502 : class VCL_DLLPUBLIC NumericField : public SpinField, public NumericFormatter
503 : {
504 : protected:
505 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
506 :
507 : public:
508 : explicit NumericField( vcl::Window* pParent, WinBits nWinStyle );
509 : explicit NumericField( vcl::Window* pParent, const ResId& );
510 : virtual ~NumericField();
511 :
512 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
513 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
514 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
515 :
516 : virtual Size CalcMinimumSize() const SAL_OVERRIDE;
517 :
518 : virtual void Modify() SAL_OVERRIDE;
519 :
520 : virtual void Up() SAL_OVERRIDE;
521 : virtual void Down() SAL_OVERRIDE;
522 : virtual void First() SAL_OVERRIDE;
523 : virtual void Last() SAL_OVERRIDE;
524 : virtual bool set_property(const OString &rKey, const OString &rValue) SAL_OVERRIDE;
525 : };
526 :
527 :
528 :
529 : // - MetricField -
530 :
531 :
532 : class VCL_DLLPUBLIC MetricField : public SpinField, public MetricFormatter
533 : {
534 : protected:
535 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
536 :
537 : public:
538 : explicit MetricField( vcl::Window* pParent, WinBits nWinStyle );
539 : explicit MetricField( vcl::Window* pParent, const ResId& );
540 : virtual ~MetricField();
541 :
542 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
543 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
544 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
545 :
546 : virtual Size CalcMinimumSize() const SAL_OVERRIDE;
547 :
548 : virtual void Modify() SAL_OVERRIDE;
549 :
550 : virtual void Up() SAL_OVERRIDE;
551 : virtual void Down() SAL_OVERRIDE;
552 : virtual void First() SAL_OVERRIDE;
553 : virtual void Last() SAL_OVERRIDE;
554 : virtual void CustomConvert() SAL_OVERRIDE;
555 :
556 : virtual void SetUnit( FieldUnit meUnit ) SAL_OVERRIDE;
557 :
558 : void SetFirst( sal_Int64 nNewFirst, FieldUnit eInUnit );
559 126 : inline void SetFirst(sal_Int64 first) { SetFirst(first, FUNIT_NONE); }
560 : sal_Int64 GetFirst( FieldUnit eOutUnit ) const;
561 0 : inline sal_Int64 GetFirst() const { return GetFirst(FUNIT_NONE); }
562 : void SetLast( sal_Int64 nNewLast, FieldUnit eInUnit );
563 126 : inline void SetLast(sal_Int64 last) { SetLast(last, FUNIT_NONE); }
564 : sal_Int64 GetLast( FieldUnit eOutUnit ) const;
565 0 : inline sal_Int64 GetLast() const { return GetLast(FUNIT_NONE); }
566 :
567 : static void SetDefaultUnit( FieldUnit eDefaultUnit );
568 : static FieldUnit GetDefaultUnit();
569 : static sal_Int64 ConvertValue( sal_Int64 nValue, sal_Int64 mnBaseValue, sal_uInt16 nDecDigits,
570 : FieldUnit eInUnit, FieldUnit eOutUnit );
571 : static sal_Int64 ConvertValue( sal_Int64 nValue, sal_uInt16 nDecDigits,
572 : MapUnit eInUnit, FieldUnit eOutUnit );
573 :
574 : // for backwards compatibility
575 : // caution: conversion to double loses precision
576 : static double ConvertDoubleValue( double nValue, sal_Int64 mnBaseValue, sal_uInt16 nDecDigits,
577 : FieldUnit eInUnit, FieldUnit eOutUnit );
578 : static double ConvertDoubleValue( double nValue, sal_uInt16 nDecDigits,
579 : FieldUnit eInUnit, MapUnit eOutUnit );
580 : static double ConvertDoubleValue( double nValue, sal_uInt16 nDecDigits,
581 : MapUnit eInUnit, FieldUnit eOutUnit );
582 :
583 : // for backwards compatibility
584 : // caution: conversion to double loses precision
585 11610 : static double ConvertDoubleValue( sal_Int64 nValue, sal_Int64 nBaseValue, sal_uInt16 nDecDigits,
586 : FieldUnit eInUnit, FieldUnit eOutUnit )
587 11610 : { return ConvertDoubleValue( static_cast<double>(nValue), nBaseValue, nDecDigits, eInUnit, eOutUnit ); }
588 0 : static double ConvertDoubleValue( sal_Int64 nValue, sal_uInt16 nDecDigits,
589 : FieldUnit eInUnit, MapUnit eOutUnit )
590 0 : { return ConvertDoubleValue( static_cast<double>(nValue), nDecDigits, eInUnit, eOutUnit ); }
591 0 : static double ConvertDoubleValue( sal_Int64 nValue, sal_uInt16 nDecDigits,
592 : MapUnit eInUnit, FieldUnit eOutUnit )
593 0 : { return ConvertDoubleValue( static_cast<double>(nValue), nDecDigits, eInUnit, eOutUnit ); }
594 :
595 : virtual bool set_property(const OString &rKey, const OString &rValue) SAL_OVERRIDE;
596 : };
597 :
598 :
599 :
600 : // - CurrencyField -
601 :
602 :
603 : class VCL_DLLPUBLIC CurrencyField : public SpinField, public CurrencyFormatter
604 : {
605 : public:
606 : CurrencyField( vcl::Window* pParent, WinBits nWinStyle );
607 : virtual ~CurrencyField();
608 :
609 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
610 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
611 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
612 :
613 : virtual void Modify() SAL_OVERRIDE;
614 :
615 : virtual void Up() SAL_OVERRIDE;
616 : virtual void Down() SAL_OVERRIDE;
617 : virtual void First() SAL_OVERRIDE;
618 : virtual void Last() SAL_OVERRIDE;
619 : };
620 :
621 :
622 :
623 : // - DateField -
624 :
625 :
626 : class VCL_DLLPUBLIC DateField : public SpinField, public DateFormatter
627 : {
628 : private:
629 : Date maFirst;
630 : Date maLast;
631 :
632 : protected:
633 : SAL_DLLPRIVATE void ImplDateSpinArea( bool bUp );
634 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
635 :
636 : public:
637 : explicit DateField( vcl::Window* pParent, WinBits nWinStyle );
638 : explicit DateField( vcl::Window* pParent, const ResId& );
639 : virtual ~DateField();
640 :
641 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
642 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
643 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
644 :
645 : virtual void Modify() SAL_OVERRIDE;
646 :
647 : virtual void Up() SAL_OVERRIDE;
648 : virtual void Down() SAL_OVERRIDE;
649 : virtual void First() SAL_OVERRIDE;
650 : virtual void Last() SAL_OVERRIDE;
651 :
652 68 : void SetFirst( const Date& rNewFirst ) { maFirst = rNewFirst; }
653 0 : Date GetFirst() const { return maFirst; }
654 68 : void SetLast( const Date& rNewLast ) { maLast = rNewLast; }
655 0 : Date GetLast() const { return maLast; }
656 : };
657 :
658 :
659 : // - TimeField -
660 :
661 :
662 : class VCL_DLLPUBLIC TimeField : public SpinField, public TimeFormatter
663 : {
664 : private:
665 : tools::Time maFirst;
666 : tools::Time maLast;
667 :
668 : protected:
669 : SAL_DLLPRIVATE void ImplTimeSpinArea( bool bUp );
670 : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
671 :
672 : public:
673 : explicit TimeField( vcl::Window* pParent, WinBits nWinStyle );
674 : explicit TimeField( vcl::Window* pParent, const ResId& );
675 : virtual ~TimeField();
676 :
677 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
678 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
679 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
680 :
681 : virtual void Modify() SAL_OVERRIDE;
682 :
683 : virtual void Up() SAL_OVERRIDE;
684 : virtual void Down() SAL_OVERRIDE;
685 : virtual void First() SAL_OVERRIDE;
686 : virtual void Last() SAL_OVERRIDE;
687 :
688 46 : void SetFirst( const tools::Time& rNewFirst ) { maFirst = rNewFirst; }
689 0 : tools::Time GetFirst() const { return maFirst; }
690 38 : void SetLast( const tools::Time& rNewLast ) { maLast = rNewLast; }
691 0 : tools::Time GetLast() const { return maLast; }
692 :
693 : void SetExtFormat( ExtTimeFieldFormat eFormat );
694 : };
695 :
696 :
697 :
698 : // - PatternBox -
699 :
700 :
701 : class VCL_DLLPUBLIC PatternBox : public ComboBox, public PatternFormatter
702 : {
703 : public:
704 : PatternBox( vcl::Window* pParent, WinBits nWinStyle );
705 : virtual ~PatternBox();
706 :
707 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
708 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
709 :
710 : virtual void Modify() SAL_OVERRIDE;
711 :
712 : virtual void ReformatAll() SAL_OVERRIDE;
713 : };
714 :
715 :
716 :
717 : // - NumericBox -
718 :
719 :
720 : class VCL_DLLPUBLIC NumericBox : public ComboBox, public NumericFormatter
721 : {
722 : public:
723 : explicit NumericBox( vcl::Window* pParent, WinBits nWinStyle );
724 : virtual ~NumericBox();
725 :
726 : virtual Size CalcMinimumSize() const SAL_OVERRIDE;
727 :
728 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
729 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
730 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
731 :
732 : virtual void Modify() SAL_OVERRIDE;
733 :
734 : virtual void ReformatAll() SAL_OVERRIDE;
735 :
736 : void InsertValue( sal_Int64 nValue, sal_Int32 nPos = COMBOBOX_APPEND );
737 : };
738 :
739 :
740 :
741 : // - MetricBox -
742 :
743 :
744 : class VCL_DLLPUBLIC MetricBox : public ComboBox, public MetricFormatter
745 : {
746 : public:
747 : explicit MetricBox( vcl::Window* pParent, WinBits nWinStyle );
748 : virtual ~MetricBox();
749 :
750 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
751 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
752 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
753 :
754 : virtual Size CalcMinimumSize() const SAL_OVERRIDE;
755 :
756 : virtual void Modify() SAL_OVERRIDE;
757 :
758 : virtual void CustomConvert() SAL_OVERRIDE;
759 : virtual void ReformatAll() SAL_OVERRIDE;
760 :
761 : void InsertValue( sal_Int64 nValue, FieldUnit eInUnit = FUNIT_NONE,
762 : sal_Int32 nPos = COMBOBOX_APPEND );
763 : sal_Int64 GetValue( sal_Int32 nPos, FieldUnit eOutUnit = FUNIT_NONE ) const;
764 : sal_Int32 GetValuePos( sal_Int64 nValue,
765 : FieldUnit eInUnit = FUNIT_NONE ) const;
766 :
767 : // Needed, because GetValue() with nPos hide these functions
768 : virtual sal_Int64 GetValue( FieldUnit eOutUnit ) const SAL_OVERRIDE;
769 : virtual sal_Int64 GetValue() const SAL_OVERRIDE;
770 : };
771 :
772 :
773 :
774 : // - CurrencyBox -
775 :
776 :
777 : class VCL_DLLPUBLIC CurrencyBox : public ComboBox, public CurrencyFormatter
778 : {
779 : public:
780 : explicit CurrencyBox( vcl::Window* pParent, WinBits nWinStyle );
781 : virtual ~CurrencyBox();
782 :
783 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
784 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
785 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
786 :
787 : virtual void Modify() SAL_OVERRIDE;
788 :
789 : virtual void ReformatAll() SAL_OVERRIDE;
790 :
791 : virtual sal_Int64 GetValue() const SAL_OVERRIDE;
792 : };
793 :
794 :
795 : // - DateBox -
796 :
797 :
798 : class VCL_DLLPUBLIC DateBox : public ComboBox, public DateFormatter
799 : {
800 : public:
801 : explicit DateBox( vcl::Window* pParent, WinBits nWinStyle );
802 : virtual ~DateBox();
803 :
804 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
805 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
806 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
807 :
808 : virtual void Modify() SAL_OVERRIDE;
809 :
810 : virtual void ReformatAll() SAL_OVERRIDE;
811 : };
812 :
813 :
814 :
815 : // - TimeBox -
816 :
817 :
818 : class VCL_DLLPUBLIC TimeBox : public ComboBox, public TimeFormatter
819 : {
820 : public:
821 : explicit TimeBox( vcl::Window* pParent, WinBits nWinStyle );
822 : virtual ~TimeBox();
823 :
824 : virtual bool PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
825 : virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
826 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
827 :
828 : virtual void Modify() SAL_OVERRIDE;
829 :
830 : virtual void ReformatAll() SAL_OVERRIDE;
831 : };
832 :
833 : #endif // INCLUDED_VCL_FIELD_HXX
834 :
835 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|