epoc32/include/mw/tzlocalizer.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
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__