williamr@2
|
1 |
// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
|
williamr@2
|
2 |
// All rights reserved.
|
williamr@2
|
3 |
// This component and the accompanying materials are made available
|
williamr@4
|
4 |
// under the terms of "Eclipse Public License v1.0"
|
williamr@2
|
5 |
// which accompanies this distribution, and is available
|
williamr@4
|
6 |
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
|
williamr@2
|
7 |
//
|
williamr@2
|
8 |
// Initial Contributors:
|
williamr@2
|
9 |
// Nokia Corporation - initial contribution.
|
williamr@2
|
10 |
//
|
williamr@2
|
11 |
// Contributors:
|
williamr@2
|
12 |
//
|
williamr@2
|
13 |
// Description:
|
williamr@2
|
14 |
//
|
williamr@2
|
15 |
|
williamr@2
|
16 |
#ifndef __TzLocalizer_H__
|
williamr@2
|
17 |
#define __TzLocalizer_H__
|
williamr@2
|
18 |
|
williamr@4
|
19 |
#include <e32base.h>
|
williamr@4
|
20 |
#include <tz.h>
|
williamr@4
|
21 |
#include <tzlocalizationdatatypes.h>
|
williamr@2
|
22 |
|
williamr@4
|
23 |
class CTzLocalizationResourceReader;
|
williamr@4
|
24 |
class CTzLocalizationUserDataReader;
|
williamr@2
|
25 |
|
williamr@4
|
26 |
const TInt KTzCityNotInGroupId = 0;
|
williamr@2
|
27 |
/**
|
williamr@4
|
28 |
Retrieves localized time zone information based on a time zone identifier.
|
williamr@2
|
29 |
|
williamr@2
|
30 |
Time zone information is available in the following forms:
|
williamr@4
|
31 |
|
williamr@4
|
32 |
- Standard time name, for example "Greenwich Mean Time"
|
williamr@4
|
33 |
- Short standard time name, for instance "GMT"
|
williamr@4
|
34 |
- Daylight saving time name, for instance "British Summer Time"
|
williamr@4
|
35 |
- Short daylight saving time name, for instance "BST"
|
williamr@2
|
36 |
|
williamr@2
|
37 |
This information is encapsulated in a CTzLocalizedTimeZone object.
|
williamr@2
|
38 |
|
williamr@4
|
39 |
A collection of localized cities for a specific time zone is returned as a
|
williamr@4
|
40 |
CTzLocalizedCityArray object. An individual localized city is returned as a
|
williamr@4
|
41 |
CTzLocalizedCity object.
|
williamr@4
|
42 |
|
williamr@4
|
43 |
A collection of localized city groups for a specific time zone is returned as a
|
williamr@4
|
44 |
CTzLocalizedCityGroupArray. An individual localized city group is returned as a
|
williamr@4
|
45 |
CTzLocalizedCityGroup object.
|
williamr@4
|
46 |
|
williamr@4
|
47 |
New non-localized cities can be added to an existing time zone. A new city may
|
williamr@4
|
48 |
also be added to a city group, but a city may only be a member of one city
|
williamr@4
|
49 |
group.
|
williamr@4
|
50 |
|
williamr@4
|
51 |
User-defined time zone names can also be retrieved through this class,
|
williamr@4
|
52 |
encapsulated as follows:
|
williamr@4
|
53 |
|
williamr@4
|
54 |
- In a CTzLocalizedTimeZone object for long/short standard time and long/short
|
williamr@4
|
55 |
daylight saving time user-defined time zone names.
|
williamr@4
|
56 |
- In a CTzLocalizedCityArray object or CTzLocalizedCity object for user-defined
|
williamr@4
|
57 |
time zone city names.
|
williamr@4
|
58 |
- In a CTzLocalizedCityGroupArray object or CTzLocalizedCityGroup object for
|
williamr@4
|
59 |
user-defined time zone region names.
|
williamr@4
|
60 |
|
williamr@4
|
61 |
All user-defined time zones names’ use the same city group identifier of
|
williamr@4
|
62 |
KTzCityNotInGroupId to indicate that they do not belong to a specific group.
|
williamr@4
|
63 |
|
williamr@4
|
64 |
For methods that return a single city or single city group, if the given group
|
williamr@4
|
65 |
identifier is KTzCityNotInGroupId the methods leave with KErrArgument since it
|
williamr@4
|
66 |
is not possible to determine which region name should be used to identify the
|
williamr@4
|
67 |
single city group.
|
williamr@4
|
68 |
|
williamr@4
|
69 |
For methods that return an array of cities or city groups, if the given group
|
williamr@4
|
70 |
identifier is KTzCityNotInGroupId the methods shall return all user-defined city
|
williamr@4
|
71 |
names or region names.
|
williamr@4
|
72 |
|
williamr@4
|
73 |
The array object forms can contain a combination of system time zone
|
williamr@4
|
74 |
localization information and user-defined time zone names. The client can
|
williamr@4
|
75 |
control the combination of data using the SetDataSource() method.
|
williamr@2
|
76 |
|
williamr@2
|
77 |
@publishedAll
|
williamr@2
|
78 |
@released
|
williamr@2
|
79 |
*/
|
williamr@2
|
80 |
class CTzLocalizer : public CBase
|
williamr@2
|
81 |
{
|
williamr@2
|
82 |
public:
|
williamr@2
|
83 |
/** Panic reasons for the time zone localization component. */
|
williamr@2
|
84 |
enum TTzLocalizerPanics
|
williamr@2
|
85 |
{
|
williamr@2
|
86 |
/** The time zone server was not found. */
|
williamr@2
|
87 |
ETzLocalizerPanicTimeZoneServerNotFound,
|
williamr@2
|
88 |
/** A resource file was not found. */
|
williamr@2
|
89 |
ETzLocalizerPanicResourceFileNotFound
|
williamr@2
|
90 |
};
|
williamr@2
|
91 |
|
williamr@2
|
92 |
/** Used to specify the sort order of localized time zone information. */
|
williamr@2
|
93 |
enum TTzSortOrder
|
williamr@2
|
94 |
{
|
williamr@2
|
95 |
/** Unsorted. This is the fastest way to get localized data. */
|
williamr@2
|
96 |
ETzUnsorted,
|
williamr@2
|
97 |
/** Sort by UTC offset starting with the lowest. */
|
williamr@2
|
98 |
ETzUTCAscending,
|
williamr@2
|
99 |
/** Sort by UTC offset starting with the highest. */
|
williamr@2
|
100 |
ETzUTCDescending,
|
williamr@2
|
101 |
/** Sort by name (city name/group name/standard time zone name), from A-Z. */
|
williamr@2
|
102 |
ETzAlphaNameAscending,
|
williamr@2
|
103 |
/** Sort by name (city name/group name/standard time zone name), from Z-A. */
|
williamr@2
|
104 |
ETzAlphaNameDescending,
|
williamr@2
|
105 |
/** Sort by standard name from A-Z. */
|
williamr@2
|
106 |
ETzAlphaStandardNameAscending,
|
williamr@2
|
107 |
/** Sort by daylight savings name from A-Z. */
|
williamr@2
|
108 |
ETzAlphaDaylightNameAscending,
|
williamr@2
|
109 |
/** Sort by short standard name from A-Z. */
|
williamr@2
|
110 |
ETzAlphaShortStandardNameAscending,
|
williamr@2
|
111 |
/** Sort by short daylight savings name from A-Z. */
|
williamr@2
|
112 |
ETzAlphaShortDaylightNameAscending,
|
williamr@2
|
113 |
/** Sort by standard name from Z-A. */
|
williamr@2
|
114 |
ETzAlphaStandardNameDescending,
|
williamr@2
|
115 |
/** Sort by daylight savings name from Z-A. */
|
williamr@2
|
116 |
ETzAlphaDaylightNameDescending,
|
williamr@2
|
117 |
/** Sort by short standard name from Z-A. */
|
williamr@2
|
118 |
ETzAlphaShortStandardNameDescending,
|
williamr@2
|
119 |
/** Sort by short daylight savings name from Z-A. */
|
williamr@2
|
120 |
ETzAlphaShortDaylightNameDescending
|
williamr@2
|
121 |
};
|
williamr@2
|
122 |
|
williamr@4
|
123 |
/**
|
williamr@4
|
124 |
This enumeration indicates the data source(s) to use for CTzLocalizer
|
williamr@4
|
125 |
methods that return a combination of system time zone localization
|
williamr@4
|
126 |
information and user-defined time zone names. The enumeration values
|
williamr@4
|
127 |
are bit flags which can be combined using the logical OR operator.
|
williamr@4
|
128 |
*/
|
williamr@4
|
129 |
enum TTzLocalizerDataSource
|
williamr@4
|
130 |
{
|
williamr@4
|
131 |
/** Use system time zone localization information. */
|
williamr@4
|
132 |
ETzDataSourceSystem = 0x1,
|
williamr@4
|
133 |
/** Use non-localized user time zone names. */
|
williamr@4
|
134 |
ETzDataSourceUser = 0x2
|
williamr@4
|
135 |
};
|
williamr@4
|
136 |
|
williamr@2
|
137 |
public:
|
williamr@2
|
138 |
//Construction / Destruction
|
williamr@2
|
139 |
IMPORT_C static CTzLocalizer* NewL();
|
williamr@2
|
140 |
IMPORT_C static CTzLocalizer* NewLC();
|
williamr@2
|
141 |
IMPORT_C ~CTzLocalizer();
|
williamr@2
|
142 |
|
williamr@4
|
143 |
private:
|
williamr@4
|
144 |
CTzLocalizer();
|
williamr@4
|
145 |
void ConstructL();
|
williamr@4
|
146 |
TBool DbNeedsUpdatingL() const;
|
williamr@4
|
147 |
void UpgradeDbVersionL();
|
williamr@4
|
148 |
void FetchCityToUpgradeL(CTzLocalizedTimeZoneArray& aTimeZoneArray, CTzLocalizedCityArray& aCityArray, CTzLocalizedTimeZone::TTzFrequentlyUsedZone aCachedZone);
|
williamr@4
|
149 |
void RecreateDbL();
|
williamr@4
|
150 |
|
williamr@4
|
151 |
public:
|
williamr@2
|
152 |
//Time zones
|
williamr@2
|
153 |
IMPORT_C CTzLocalizedTimeZone* GetLocalizedTimeZoneL(TInt aTimeZoneId) const;
|
williamr@2
|
154 |
IMPORT_C CTzLocalizedTimeZone* GetLocalizedTimeZoneL(const CTzLocalizedCity& aCity) const;
|
williamr@2
|
155 |
IMPORT_C CTzLocalizedTimeZoneArray* GetAllTimeZonesL(const TTzSortOrder aSortOrder = ETzUnsorted);
|
williamr@4
|
156 |
|
williamr@2
|
157 |
IMPORT_C void SetTimeZoneL(TInt aTimeZoneId);
|
williamr@2
|
158 |
|
williamr@2
|
159 |
//City Management
|
williamr@2
|
160 |
IMPORT_C CTzLocalizedCity* GetDefaultCityL(TInt aTimeZoneId) const;
|
williamr@2
|
161 |
IMPORT_C CTzLocalizedCity* GetDefaultCityL(const CTzLocalizedCity& aCity) const;
|
williamr@2
|
162 |
IMPORT_C CTzLocalizedCity* GetDefaultCityL(const CTzLocalizedTimeZone& aTimeZone) const;
|
williamr@2
|
163 |
|
williamr@2
|
164 |
IMPORT_C CTzLocalizedCityArray* GetCitiesL(const TTzSortOrder aSortOrder = ETzUnsorted);
|
williamr@2
|
165 |
IMPORT_C CTzLocalizedCityArray* GetCitiesL(TInt aTimeZoneId,const TTzSortOrder aSortOrder = ETzUnsorted);
|
williamr@2
|
166 |
IMPORT_C CTzLocalizedCityArray* GetCitiesL(const CTzLocalizedTimeZone& aTimeZone,const TTzSortOrder aSortOrder = ETzUnsorted);
|
williamr@2
|
167 |
IMPORT_C CTzLocalizedCityArray* GetCitiesL(const CTzLocalizedCity& aCity,const TTzSortOrder aSortOrder = ETzUnsorted);
|
williamr@2
|
168 |
|
williamr@2
|
169 |
IMPORT_C CTzLocalizedCity* AddCityL(TInt aTimeZoneId,const TDesC& aCityName, TInt aGroupId = 0);
|
williamr@2
|
170 |
IMPORT_C void RemoveCityL(CTzLocalizedCity* aCity);
|
williamr@2
|
171 |
|
williamr@2
|
172 |
//City Groups
|
williamr@2
|
173 |
IMPORT_C CTzLocalizedCityGroupArray* GetAllCityGroupsL(const TTzSortOrder aSortOrder = ETzUnsorted) const;
|
williamr@2
|
174 |
IMPORT_C CTzLocalizedCityGroup* GetCityGroupL(TInt aGroupId) const;
|
williamr@2
|
175 |
IMPORT_C CTzLocalizedCityGroup* GetCityGroupL(const CTzLocalizedCity& aCity) const ;
|
williamr@2
|
176 |
|
williamr@2
|
177 |
IMPORT_C CTzLocalizedCityArray* GetCitiesInGroupL(TInt aGroupId,const TTzSortOrder aSortOrder = ETzUnsorted);
|
williamr@2
|
178 |
IMPORT_C CTzLocalizedCityArray* GetCitiesInGroupL(const CTzLocalizedCity& aCity,const TTzSortOrder aSortOrder = ETzUnsorted);
|
williamr@2
|
179 |
IMPORT_C CTzLocalizedCityArray* GetCitiesInGroupL(const CTzLocalizedCityGroup& aCityGroup,const TTzSortOrder aSortOrder = ETzUnsorted);
|
williamr@2
|
180 |
|
williamr@2
|
181 |
//Frequently Used Zones
|
williamr@2
|
182 |
IMPORT_C CTzLocalizedTimeZone* GetFrequentlyUsedZoneL(const CTzLocalizedTimeZone::TTzFrequentlyUsedZone aFrequentlyUsedZone);
|
williamr@2
|
183 |
IMPORT_C CTzLocalizedCity* GetFrequentlyUsedZoneCityL(const CTzLocalizedTimeZone::TTzFrequentlyUsedZone aFrequentlyUsedZone);
|
williamr@2
|
184 |
IMPORT_C void SetFrequentlyUsedZoneL(TInt aTimeZoneId,const CTzLocalizedTimeZone::TTzFrequentlyUsedZone aFrequentlyUsedZone);
|
williamr@2
|
185 |
IMPORT_C void SetFrequentlyUsedZoneL(const CTzLocalizedTimeZone& aTimeZone,const CTzLocalizedTimeZone::TTzFrequentlyUsedZone aFrequentlyUsedZone);
|
williamr@2
|
186 |
IMPORT_C void SetFrequentlyUsedZoneL(const CTzLocalizedCity& aCity,const CTzLocalizedTimeZone::TTzFrequentlyUsedZone aFrequentlyUsedZone);
|
williamr@2
|
187 |
|
williamr@2
|
188 |
//Find functions
|
williamr@2
|
189 |
IMPORT_C CTzLocalizedCity* FindCityByNameL(const TDesC& aCityName, const TInt aTimeZoneId = 0);
|
williamr@2
|
190 |
IMPORT_C CTzLocalizedTimeZone* FindTimeZoneByNameL(const TDesC& aTimeZoneName);
|
williamr@2
|
191 |
IMPORT_C CTzLocalizedCityGroup* FindCityGroupByNameL(const TDesC& aCityGroupName);
|
williamr@4
|
192 |
|
williamr@2
|
193 |
IMPORT_C TBool CheckLanguage();
|
williamr@4
|
194 |
|
williamr@2
|
195 |
//Cities and Time Zones with a specified UTC offset
|
williamr@2
|
196 |
IMPORT_C CTzLocalizedCityArray* GetCitiesWithUTCOffsetL(TInt aUTCOffsetInMinutes, const TTzSortOrder aSortOrder = ETzUnsorted);
|
williamr@2
|
197 |
IMPORT_C CTzLocalizedTimeZoneArray* GetTimeZonesWithUTCOffsetL(TInt aUTCOffsetInMinutes, const TTzSortOrder aSortOrder = ETzUnsorted);
|
williamr@4
|
198 |
|
williamr@4
|
199 |
IMPORT_C void SetDataSource(TUint aDataSource);
|
williamr@4
|
200 |
|
williamr@2
|
201 |
private:
|
williamr@2
|
202 |
TBool PrepareFrequentlyUsedZonesL();
|
williamr@2
|
203 |
void UpdateFrequentlyUsedZonesL();
|
williamr@2
|
204 |
CTzLocalizedTimeZone* GetFrequentlyUsedDefaultZoneL(CTzLocalizedTimeZone::TTzFrequentlyUsedZone aFreqUsedZone);
|
williamr@2
|
205 |
TUint32 GetFrequentlyUsedDefaultZoneCenRepKeyL(CTzLocalizedTimeZone::TTzFrequentlyUsedZone aFreqUsedZone);
|
williamr@4
|
206 |
void GetCitiesL(CTzLocalizedCityArray& aCities, const TTzLocalizedId& aLocalizedId,
|
williamr@4
|
207 |
TBool aUseDataSource, const TTzSortOrder aSortOrder = ETzUnsorted);
|
williamr@2
|
208 |
TLinearOrder<CTzLocalizedCity> CitySortOrderL(const TTzSortOrder aSortOrder);
|
williamr@2
|
209 |
TLinearOrder<CTzLocalizedTimeZone> TimeZoneSortOrderL(const TTzSortOrder aSortOrder);
|
williamr@2
|
210 |
template <class T> void PrepareForUTCSortL(T& aArray);
|
williamr@2
|
211 |
TInt GetTimeZoneIdFromTzServerL();
|
williamr@2
|
212 |
void DoSetTimeZoneL(TInt aTimeZoneId);
|
williamr@2
|
213 |
void ChangeHomeTimeZoneL(TInt aNewId);
|
williamr@4
|
214 |
TBool FindCityAndSetCityIndexL(CTzLocalizedCity& aLocalizedCity, TTzLocalizerDataSource aDataSource);
|
williamr@4
|
215 |
TBool IsOperateOnUserDbL(TInt aTimeZoneId, TBool aUseDataSource) const;
|
williamr@4
|
216 |
void ReadCitiesL(CTzLocalizedCityArray& aCityArray, TInt aTimeZoneId, TBool aUseDataSource) const;
|
williamr@4
|
217 |
CTzLocalizedCity* ReadDefaultCityL(TInt aTimeZoneId, TBool aUseDataSource) const;
|
williamr@4
|
218 |
void WriteAllFrequentlyUsedZonesL(const CTzLocalizedTimeZoneArray& aTimeZones, const CTzLocalizedCityArray& aCities);
|
williamr@4
|
219 |
void SetFrequentlyUsedZoneL(const CTzLocalizedTimeZone& aTimeZone, const CTzLocalizedCity& aCity,
|
williamr@4
|
220 |
const CTzLocalizedTimeZone::TTzFrequentlyUsedZone aFrequentlyUsedZone);
|
williamr@4
|
221 |
CTzLocalizedTimeZone* GetLocalizedTimeZoneL(TInt aTimeZoneId, TBool aUseDataSource) const;
|
williamr@4
|
222 |
CTzLocalizedTimeZone* GetLocalizedTimeZoneL(const CTzLocalizedCity& aCity, TBool aUseDataSource) const;
|
williamr@4
|
223 |
static void PopulateCityArrayL(const RPointerArray<CTzLocalizedCityRecord>& aCityRecords,
|
williamr@4
|
224 |
CTzLocalizedCityArray& aCities);
|
williamr@4
|
225 |
static CTzLocalizedTimeZoneRecord* CreateTimeZoneRecordL(const CTzLocalizedTimeZone& aTimeZone);
|
williamr@4
|
226 |
static CTzLocalizedTimeZoneRecord* CreateTimeZoneRecordLC(const CTzLocalizedTimeZone& aTimeZone);
|
williamr@4
|
227 |
static CTzLocalizedCityRecord* CreateCityRecordL(const CTzLocalizedCity& aCity);
|
williamr@4
|
228 |
static CTzLocalizedCityRecord* CreateCityRecordLC(const CTzLocalizedCity& aCity);
|
williamr@4
|
229 |
static CTzLocalizedTimeZone* CreateTimeZoneL(const CTzLocalizedTimeZoneRecord& aTimeZoneRecord);
|
williamr@4
|
230 |
static CTzLocalizedCity* CreateCityL(const CTzLocalizedCityRecord& aCityRecord);
|
williamr@4
|
231 |
static void CleanupTimeZonePointerArray(TAny* aArray);
|
williamr@4
|
232 |
static void CleanupCityPointerArray(TAny* aArray);
|
williamr@2
|
233 |
|
williamr@4
|
234 |
private:
|
williamr@4
|
235 |
CTzLocalizationResourceReader* iStaticDataReader;
|
williamr@4
|
236 |
CTzLocalizationUserDataReader* iUserDataReader;
|
williamr@4
|
237 |
|
williamr@2
|
238 |
TLanguage iLanguage;
|
williamr@4
|
239 |
TUint iDataSource;
|
williamr@4
|
240 |
RTz iTzSession;
|
williamr@2
|
241 |
};
|
williamr@2
|
242 |
|
williamr@2
|
243 |
#endif//__TzLocalizer_H__
|