1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _UNOTOOLS_CALENDARWRAPPER_HXX
25 #define _UNOTOOLS_CALENDARWRAPPER_HXX
26 
27 #include <tools/datetime.hxx>
28 #include <tools/string.hxx>
29 #include <com/sun/star/uno/Reference.hxx>
30 #include <com/sun/star/uno/Sequence.hxx>
31 #include <com/sun/star/i18n/Calendar.hpp>
32 #include <com/sun/star/lang/Locale.hpp>
33 #include "unotools/unotoolsdllapi.h"
34 
35 namespace com { namespace sun { namespace star {
36 	namespace lang {
37 		class XMultiServiceFactory;
38 	}
39 }}}
40 
41 namespace com { namespace sun { namespace star {
42 	namespace i18n {
43 		class XExtendedCalendar;
44 	}
45 }}}
46 
47 
48 class UNOTOOLS_DLLPUBLIC CalendarWrapper
49 {
50 	::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xSMgr;
51 	::com::sun::star::uno::Reference< ::com::sun::star::i18n::XExtendedCalendar >	xC;
52 
53 			DateTime			aEpochStart;		// 1Jan1970
54 
55 public:
56 								CalendarWrapper(
57 									const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & xSF
58 									);
59 								~CalendarWrapper();
60 
61 
62 	// wrapper implementations of XCalendar
63 
64     void loadDefaultCalendar( const ::com::sun::star::lang::Locale& rLocale );
65     void loadCalendar( const ::rtl::OUString& rUniqueID, const ::com::sun::star::lang::Locale& rLocale );
66 	::com::sun::star::i18n::Calendar getLoadedCalendar() const;
67     ::com::sun::star::uno::Sequence< ::rtl::OUString > getAllCalendars( const ::com::sun::star::lang::Locale& rLocale ) const;
68     ::rtl::OUString getUniqueID() const;
69     /// set UTC date/time
70     void setDateTime( double nTimeInDays );
71     /// get UTC date/time
72     double getDateTime() const;
73     /// convenience method to set local date/time
74     void setLocalDateTime( double nTimeInDays );
75     /// convenience method to get local date/time
76     double getLocalDateTime() const;
77 
78     // wrapper implementations of XCalendar
79 
80     void setValue( sal_Int16 nFieldIndex, sal_Int16 nValue );
81     sal_Bool isValid() const;
82     sal_Int16 getValue( sal_Int16 nFieldIndex ) const;
83     void addValue( sal_Int16 nFieldIndex, sal_Int32 nAmount );
84     sal_Int16 getFirstDayOfWeek() const;
85     void setFirstDayOfWeek( sal_Int16 nDay );
86     void setMinimumNumberOfDaysForFirstWeek( sal_Int16 nDays );
87     sal_Int16 getMinimumNumberOfDaysForFirstWeek() const;
88     sal_Int16 getNumberOfMonthsInYear() const;
89     sal_Int16 getNumberOfDaysInWeek() const;
90 	::com::sun::star::uno::Sequence< ::com::sun::star::i18n::CalendarItem > getMonths() const;
91 	::com::sun::star::uno::Sequence< ::com::sun::star::i18n::CalendarItem > getDays() const;
92     String getDisplayName( sal_Int16 nCalendarDisplayIndex, sal_Int16 nIdx, sal_Int16 nNameType ) const;
93 
94     /** Convenience method to get timezone offset in milliseconds, taking both
95         fields ZONE_OFFSET and ZONE_OFFSET_SECOND_MILLIS into account. */
96     sal_Int32 getZoneOffsetInMillis() const;
97     /** Convenience method to get DST offset in milliseconds, taking both
98         fields DST_OFFSET and DST_OFFSET_SECOND_MILLIS into account. */
99     sal_Int32 getDSTOffsetInMillis() const;
100 
101     // wrapper implementations of XExtendedCalendar
102 
103     String getDisplayString( sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode ) const;
104 
105 
106 	// convenience methods
107 
108     /// get epoch start (should be 01Jan1970)
getEpochStart() const109     inline  const DateTime&     getEpochStart() const
110                                     { return aEpochStart; }
111 
112 	/// set a local (!) Gregorian DateTime
setGregorianDateTime(const DateTime & rDateTime)113 	inline	void				setGregorianDateTime( const DateTime& rDateTime )
114 									{ setLocalDateTime( rDateTime - aEpochStart ); }
115 
116 	/// get the DateTime as a local (!) Gregorian DateTime
getGregorianDateTime() const117 	inline	DateTime			getGregorianDateTime() const
118 									{ return aEpochStart + getLocalDateTime(); }
119 
120 private:
121 
122     /** get timezone or DST offset in milliseconds, fields are
123         CalendarFieldIndex ZONE_OFFSET and ZONE_OFFSET_SECOND_MILLIS
124         respectively DST_OFFSET and DST_OFFSET_SECOND_MILLIS.
125      */
126     sal_Int32 getCombinedOffsetInMillis( sal_Int16 nParentFieldIndex, sal_Int16 nChildFieldIndex ) const;
127 };
128 
129 #endif
130