1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef _I18N_CALENDAR_GREGORIAN_HXX_
28 #define _I18N_CALENDAR_GREGORIAN_HXX_
29 
30 #include "calendarImpl.hxx"
31 #include "nativenumbersupplier.hxx"
32 
33 #include "warnings_guard_unicode_calendar.h"
34 
35 //	----------------------------------------------------
36 //	class Calendar_gregorian
37 //	----------------------------------------------------
38 
39 namespace com { namespace sun { namespace star { namespace i18n {
40 
41 struct Era {
42     sal_Int32 year;
43     sal_Int32 month;
44     sal_Int32 day;
45 };
46 
47 const sal_Int16 FIELD_INDEX_COUNT = CalendarFieldIndex::FIELD_COUNT2;
48 
49 class Calendar_gregorian : public CalendarImpl
50 {
51 public:
52 
53     // Constructors
54     Calendar_gregorian();
55     Calendar_gregorian(Era *_eraArray);
56     void SAL_CALL init(Era *_eraArray);
57 
58     /**
59     * Destructor
60     */
61     ~Calendar_gregorian();
62 
63     // Methods in XCalendar
64     virtual void SAL_CALL loadCalendar(const rtl::OUString& uniqueID, const com::sun::star::lang::Locale& rLocale) throw(com::sun::star::uno::RuntimeException);
65     virtual void SAL_CALL setDateTime(double nTimeInDays) throw(com::sun::star::uno::RuntimeException);
66     virtual double SAL_CALL getDateTime() throw(com::sun::star::uno::RuntimeException);
67     virtual void SAL_CALL setValue( sal_Int16 nFieldIndex, sal_Int16 nValue ) throw(com::sun::star::uno::RuntimeException);
68     virtual sal_Int16 SAL_CALL getValue(sal_Int16 nFieldIndex) throw(com::sun::star::uno::RuntimeException);
69     virtual void SAL_CALL addValue(sal_Int16 nFieldIndex, sal_Int32 nAmount) throw(com::sun::star::uno::RuntimeException);
70     virtual sal_Bool SAL_CALL isValid() throw (com::sun::star::uno::RuntimeException);
71     virtual Calendar SAL_CALL getLoadedCalendar() throw(com::sun::star::uno::RuntimeException);
72     virtual rtl::OUString SAL_CALL getUniqueID() throw(com::sun::star::uno::RuntimeException);
73     virtual sal_Int16 SAL_CALL getFirstDayOfWeek() throw(com::sun::star::uno::RuntimeException);
74     virtual void SAL_CALL setFirstDayOfWeek(sal_Int16 nDay) throw(com::sun::star::uno::RuntimeException);
75     virtual void SAL_CALL setMinimumNumberOfDaysForFirstWeek(sal_Int16 nDays) throw(com::sun::star::uno::RuntimeException);
76     virtual sal_Int16 SAL_CALL getMinimumNumberOfDaysForFirstWeek() throw(com::sun::star::uno::RuntimeException);
77     virtual sal_Int16 SAL_CALL getNumberOfMonthsInYear() throw(com::sun::star::uno::RuntimeException);
78     virtual sal_Int16 SAL_CALL getNumberOfDaysInWeek() throw(com::sun::star::uno::RuntimeException);
79     virtual com::sun::star::uno::Sequence < CalendarItem > SAL_CALL getMonths() throw(com::sun::star::uno::RuntimeException);
80     virtual com::sun::star::uno::Sequence < CalendarItem > SAL_CALL getDays() throw(com::sun::star::uno::RuntimeException);
81     virtual rtl::OUString SAL_CALL getDisplayName(sal_Int16 nCalendarDisplayIndex, sal_Int16 nIdx, sal_Int16 nNameType) throw(com::sun::star::uno::RuntimeException);
82 
83     // Methods in XExtendedCalendar
84     virtual rtl::OUString SAL_CALL getDisplayString( sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode ) throw (com::sun::star::uno::RuntimeException);
85 
86     //XServiceInfo
87     virtual rtl::OUString SAL_CALL getImplementationName() throw(com::sun::star::uno::RuntimeException);
88     virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw(com::sun::star::uno::RuntimeException);
89     virtual com::sun::star::uno::Sequence < rtl::OUString > SAL_CALL getSupportedServiceNames() throw(com::sun::star::uno::RuntimeException);
90 
91 protected:
92     Era *eraArray;
93     icu::Calendar *body;
94     NativeNumberSupplier aNatNum;
95     const sal_Char* cCalendar;
96     com::sun::star::lang::Locale aLocale;
97     sal_uInt32 fieldSet;
98     sal_Int16 fieldValue[FIELD_INDEX_COUNT];
99     sal_Int16 fieldSetValue[FIELD_INDEX_COUNT];
100 
101     virtual void mapToGregorian() throw(com::sun::star::uno::RuntimeException);
102     virtual void mapFromGregorian() throw(com::sun::star::uno::RuntimeException);
103     void getValue() throw(com::sun::star::uno::RuntimeException);
104 
105 private:
106     Calendar aCalendar;
107 
108     /** Submit fieldSetValue array according to fieldSet. */
109     void submitFields() throw(com::sun::star::uno::RuntimeException);
110     /** Submit fieldSetValue array according to fieldSet, plus YMDhms if >=0,
111         plus zone and DST if != 0 */
112     void submitValues( sal_Int32 nYear, sal_Int32 nMonth, sal_Int32 nDay, sal_Int32 nHour, sal_Int32 nMinute, sal_Int32 nSecond, sal_Int32 nMilliSecond, sal_Int32 nZone, sal_Int32 nDST) throw(com::sun::star::uno::RuntimeException);
113     /** Set fields internally. */
114     void setValue() throw(com::sun::star::uno::RuntimeException);
115     /** Obtain combined field values for timezone offset (minutes+secondmillis)
116         in milliseconds and whether fields were set. */
117     bool getZoneOffset( sal_Int32 & o_nOffset ) const;
118     /** Obtain combined field values for DST offset (minutes+secondmillis) in
119         milliseconds and whether fields were set. */
120     bool getDSTOffset( sal_Int32 & o_nOffset ) const;
121     /** Used by getZoneOffset() and getDSTOffset(). Parent is
122         CalendarFieldIndex for offset in minutes, child is CalendarFieldIndex
123         for offset in milliseconds. */
124     bool getCombinedOffset( sal_Int32 & o_nOffset, sal_Int16 nParentFieldIndex, sal_Int16 nChildFieldIndex ) const;
125 };
126 
127 //	----------------------------------------------------
128 //	class Calendar_hanja
129 //	----------------------------------------------------
130 class Calendar_hanja : public Calendar_gregorian
131 {
132 public:
133     // Constructors
134     Calendar_hanja();
135     virtual void SAL_CALL loadCalendar(const rtl::OUString& uniqueID, const com::sun::star::lang::Locale& rLocale) throw(com::sun::star::uno::RuntimeException);
136     virtual rtl::OUString SAL_CALL getDisplayName(sal_Int16 nCalendarDisplayIndex, sal_Int16 nIdx, sal_Int16 nNameType) throw(com::sun::star::uno::RuntimeException);
137 };
138 
139 //	----------------------------------------------------
140 //	class Calendar_gengou
141 //	----------------------------------------------------
142 class Calendar_gengou : public Calendar_gregorian
143 {
144 public:
145     // Constructors
146     Calendar_gengou();
147 };
148 
149 //	----------------------------------------------------
150 //	class Calendar_ROC
151 //	----------------------------------------------------
152 class Calendar_ROC : public Calendar_gregorian
153 {
154 public:
155     // Constructors
156     Calendar_ROC();
157 };
158 
159 //	----------------------------------------------------
160 //	class Calendar_buddhist
161 //	----------------------------------------------------
162 class Calendar_buddhist : public Calendar_gregorian
163 {
164 public:
165     // Constructors
166     Calendar_buddhist();
167 
168     // Methods in XExtendedCalendar
169     virtual rtl::OUString SAL_CALL getDisplayString( sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode ) throw (com::sun::star::uno::RuntimeException);
170 };
171 
172 } } } }
173 
174 #endif
175