epoc32/include/mw/tzlocalizationdatatypes.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 __TZLOCAL_DATATYPES_H__
williamr@2
    17
#define __TZLOCAL_DATATYPES_H__
williamr@2
    18
williamr@4
    19
#include <e32base.h>
williamr@2
    20
williamr@2
    21
/**
williamr@4
    22
The resource structure LOCALIZED_TIMEZONE (defined in TimeZoneLocalization.rh) is used
williamr@4
    23
to represent a time zone item in a resource file. One of the members of this structure is
williamr@4
    24
WORD time_zone_id which stores the id of the time zone.
williamr@4
    25
williamr@4
    26
This class stores a time zone id (iTzId) and its associated resource id (iResourceId). This
williamr@2
    27
facilitates fast finding of resources in the resource file.  For internal use only.
williamr@2
    28
williamr@4
    29
For instance for a time zone defined as follow in the resource file, iTzId would be 2728 and 
williamr@4
    30
iResourceId would be r_tz_europe_tirane (more precisely the resource id assigned to r_tz_europe_tirane
williamr@4
    31
by the resource compiler).
williamr@4
    32
williamr@4
    33
RESOURCE LOCALIZED_TIMEZONE r_tz_europe_tirane
williamr@4
    34
	{
williamr@4
    35
	time_zone_id = 2728;
williamr@4
    36
	standard_name = 2728_standard_name;
williamr@4
    37
	daylight_name = 2728_daylight_name;
williamr@4
    38
	short_standard_name = 2728_short_standard_name;
williamr@4
    39
	short_daylight_name = 2728_short_daylight_name;
williamr@4
    40
	cities = 
williamr@4
    41
		{
williamr@4
    42
		TIMEZONE_CITY
williamr@4
    43
			{
williamr@4
    44
			city_group_id = 5;
williamr@4
    45
			city_name = 2728_tirane_name;
williamr@4
    46
			}
williamr@4
    47
		};
williamr@4
    48
	}
williamr@4
    49
williamr@2
    50
@internalTechnology
williamr@2
    51
*/
williamr@2
    52
class TTzLocalizedId
williamr@2
    53
	{
williamr@2
    54
	public:
williamr@4
    55
		explicit TTzLocalizedId(const TUint16 aTzId, const TUint aResourceId);
williamr@2
    56
williamr@2
    57
		//Accessor methods
williamr@2
    58
		inline TUint16 TimeZoneId() const;
williamr@2
    59
		inline TUint ResourceId() const;
williamr@4
    60
		
williamr@2
    61
	private:
williamr@2
    62
		TUint16 iTzId;
williamr@2
    63
		TUint iResourceId;
williamr@2
    64
	};
williamr@2
    65
williamr@2
    66
/**
williamr@2
    67
Encapsulates a localized (exemplar) city.
williamr@2
    68
williamr@2
    69
@publishedAll
williamr@2
    70
@released
williamr@2
    71
*/
williamr@2
    72
class CTzLocalizedCity : public CBase
williamr@2
    73
	{
williamr@2
    74
	public:
williamr@2
    75
		static CTzLocalizedCity* NewL(
williamr@2
    76
			const TDesC& aName,
williamr@2
    77
			const TTzLocalizedId& aTzLocalizedId,
williamr@2
    78
			const TUint8 aGroupId =0);
williamr@2
    79
		static CTzLocalizedCity* NewLC(
williamr@2
    80
			const TDesC& aName,
williamr@2
    81
			const TTzLocalizedId& aTzLocalizedId,
williamr@2
    82
			const TUint8 aGroupId =0);
williamr@2
    83
		~CTzLocalizedCity();
williamr@2
    84
williamr@2
    85
		//Accessor methods
williamr@2
    86
		IMPORT_C TPtrC Name() const;
williamr@2
    87
		IMPORT_C TUint16 TimeZoneId() const;
williamr@2
    88
		IMPORT_C TUint8 GroupId() const;
williamr@2
    89
		TTzLocalizedId TzLocalizedId() const;
williamr@2
    90
		TInt UTCOffset() const;
williamr@2
    91
		void SetUTCOffset(TInt aUTCoffset);
williamr@2
    92
        void SetCityIndex(TInt aIndex);
williamr@2
    93
       	TInt CityIndex() const;
williamr@2
    94
williamr@2
    95
	private:
williamr@2
    96
		void ConstructL(const TDesC& aName);
williamr@2
    97
		CTzLocalizedCity(const TUint8 aGroupId, const TTzLocalizedId& aTzLocalizedId);
williamr@2
    98
williamr@2
    99
	private:
williamr@2
   100
		HBufC* iName;
williamr@2
   101
		TUint8 iGroupId;
williamr@2
   102
		TTzLocalizedId iTzLocalizedId;
williamr@2
   103
        TInt iCityIndex;
williamr@4
   104
        /**
williamr@4
   105
        When sorting arrays in UTC order the UTC offset is stored here. It is expressed in minutes.
williamr@4
   106
        This value should only be used for this purpose.
williamr@4
   107
        */
williamr@4
   108
        TInt iUTCOffset;
williamr@2
   109
	};
williamr@2
   110
williamr@2
   111
/**
williamr@2
   112
Encapsulates a localized group of (exemplar) cities.
williamr@2
   113
williamr@2
   114
@publishedAll
williamr@2
   115
@released
williamr@2
   116
*/
williamr@2
   117
class CTzLocalizedCityGroup : public CBase
williamr@2
   118
	{
williamr@2
   119
	public:
williamr@2
   120
		static CTzLocalizedCityGroup* NewL(const TDesC& aName, const TUint8 aGroupId);
williamr@2
   121
		static CTzLocalizedCityGroup* NewLC(const TDesC& aName, const TUint8 aGroupId);
williamr@2
   122
		~CTzLocalizedCityGroup();
williamr@2
   123
williamr@2
   124
		//Accessor methods
williamr@2
   125
		IMPORT_C TPtrC Name() const;
williamr@2
   126
		IMPORT_C TUint8 Id() const;
williamr@2
   127
williamr@2
   128
	private:
williamr@2
   129
		void ConstructL(const TDesC& aName);
williamr@2
   130
		CTzLocalizedCityGroup(const TUint8 aGroupId);
williamr@2
   131
williamr@2
   132
	private:
williamr@2
   133
		HBufC* iName;
williamr@2
   134
		TUint8 iGroupId;
williamr@2
   135
	};
williamr@2
   136
williamr@2
   137
/**
williamr@2
   138
Encapsulates a group of LDML localized timezone names.
williamr@2
   139
LDML stands for Locale Data Markup Language. For details, see 
williamr@4
   140
http://www.openi18n.org/specs/ldml/1.0/ldml-spec.htm
williamr@2
   141
williamr@2
   142
@publishedAll
williamr@2
   143
@released
williamr@2
   144
*/
williamr@2
   145
class CTzLocalizedTimeZone : public CBase
williamr@2
   146
	{
williamr@2
   147
	public: //enums
williamr@2
   148
		/**
williamr@2
   149
		Flags to identify a cached zone.
williamr@2
   150
		@publishedAll
williamr@2
   151
		@released
williamr@2
   152
		*/
williamr@2
   153
		enum TTzFrequentlyUsedZone
williamr@2
   154
			{
williamr@2
   155
			/** The current zone. */
williamr@2
   156
			ECurrentZone,
williamr@2
   157
			/** The home zone. */
williamr@2
   158
			EHomeZone,
williamr@2
   159
			/** The zone of interest. */
williamr@2
   160
			EInterestZone,
williamr@2
   161
			/** The first recently-used zone. */
williamr@2
   162
			ERecentZone1,
williamr@2
   163
			/** The second recently-used zone. */
williamr@2
   164
			ERecentZone2,
williamr@2
   165
			/** Specifies the number of cached zones. Not to be used as an API argument. */
williamr@2
   166
			ECachedTimeZones	// If new items are added to this enum, this must 
williamr@2
   167
								// left as last item, because it is used to keep 
williamr@2
   168
								// count of the number of cached zones
williamr@2
   169
			};
williamr@2
   170
williamr@2
   171
	public:
williamr@2
   172
		static CTzLocalizedTimeZone* NewL(
williamr@2
   173
			const TTzLocalizedId& aTzLocalizedId,
williamr@2
   174
			const TDesC& aStandardName,
williamr@2
   175
			const TDesC& aDaylightName,
williamr@2
   176
			const TDesC& aShortStandardName,
williamr@2
   177
			const TDesC& aShortDaylightName);
williamr@2
   178
williamr@2
   179
		static CTzLocalizedTimeZone* NewLC(
williamr@2
   180
			const TTzLocalizedId& aTzLocalizedId,
williamr@2
   181
			const TDesC& aStandardName,
williamr@2
   182
			const TDesC& aDaylightName,
williamr@2
   183
			const TDesC& aShortStandardName,
williamr@2
   184
			const TDesC& aShortDaylightName);
williamr@2
   185
williamr@2
   186
		~CTzLocalizedTimeZone();
williamr@2
   187
williamr@2
   188
		//Accessor methods
williamr@2
   189
		IMPORT_C TUint16 TimeZoneId() const;
williamr@2
   190
		IMPORT_C TPtrC StandardName() const;
williamr@2
   191
		IMPORT_C TPtrC DaylightName() const;
williamr@2
   192
		IMPORT_C TPtrC ShortStandardName() const;
williamr@2
   193
		IMPORT_C TPtrC ShortDaylightName() const;
williamr@2
   194
		TTzLocalizedId TzLocalizedId() const;
williamr@2
   195
		TInt UTCOffset() const;
williamr@2
   196
		void SetUTCOffset(TInt aUTCoffset);
williamr@2
   197
williamr@2
   198
	private:
williamr@2
   199
		void ConstructL(
williamr@2
   200
			const TDesC& aStandardName,
williamr@2
   201
			const TDesC& aDaylightName,
williamr@2
   202
			const TDesC& aShortStandardName,
williamr@2
   203
			const TDesC& aShortDaylightName);
williamr@2
   204
		CTzLocalizedTimeZone(const TTzLocalizedId& aTzLocalizedId);
williamr@2
   205
williamr@2
   206
	private:
williamr@2
   207
		TTzLocalizedId iTzLocalizedId;
williamr@2
   208
		HBufC* iStandardName;
williamr@2
   209
		HBufC* iDaylightName;
williamr@2
   210
		HBufC* iShortStandardName;
williamr@2
   211
		HBufC* iShortDaylightName;
williamr@4
   212
		/**
williamr@4
   213
        When sorting arrays in UTC order the UTC offset is stored here. It is expressed in minutes.
williamr@4
   214
        This value should only be used for this purpose.
williamr@4
   215
        */
williamr@4
   216
		TInt iUTCOffset;
williamr@2
   217
	};
williamr@2
   218
williamr@2
   219
/**
williamr@2
   220
Template for arrays of localized objects. Implemented using a thin template. 
williamr@2
   221
All functions are inline.
williamr@2
   222
williamr@2
   223
@publishedAll
williamr@2
   224
@released
williamr@2
   225
*/
williamr@2
   226
template <class T>
williamr@2
   227
class CTzLocalizedArray : public CBase
williamr@2
   228
	{
williamr@2
   229
	protected:
williamr@2
   230
		inline ~CTzLocalizedArray();
williamr@2
   231
williamr@2
   232
		inline T& At(TInt aIndex) const;
williamr@2
   233
		inline TInt Count() const;
williamr@2
   234
		inline void AppendL(T* aElement);
williamr@2
   235
		inline void Remove(TInt aIndex);
williamr@2
   236
		inline void Sort(TLinearOrder<T> aOrder);
williamr@2
   237
		inline TInt Find(T* aEntry,TIdentityRelation<T> aIdentityRelation);
williamr@4
   238
		inline void ReserveL(TInt aCount);
williamr@2
   239
williamr@2
   240
		inline CTzLocalizedArray();
williamr@2
   241
williamr@2
   242
	private:
williamr@2
   243
		RPointerArray<T> iArray;
williamr@2
   244
	};
williamr@2
   245
williamr@2
   246
// Assign concrete classes for each of the arrays that will be used
williamr@2
   247
// This guards against future BC problems
williamr@2
   248
williamr@2
   249
/**
williamr@2
   250
An array of cities. This just passes function calls on to its templated base
williamr@2
   251
class, CTzLocalizedArray.
williamr@2
   252
williamr@2
   253
@publishedAll
williamr@2
   254
@released
williamr@2
   255
*/
williamr@2
   256
class CTzLocalizedCityArray : public CTzLocalizedArray<CTzLocalizedCity>
williamr@2
   257
	{
williamr@2
   258
	public:
williamr@2
   259
		IMPORT_C static CTzLocalizedCityArray* NewL();
williamr@2
   260
		IMPORT_C static CTzLocalizedCityArray* NewLC();
williamr@2
   261
williamr@2
   262
		IMPORT_C CTzLocalizedCity& At(TInt aIndex) const;
williamr@2
   263
		IMPORT_C TInt Count() const;
williamr@2
   264
		IMPORT_C void AppendL(CTzLocalizedCity* aCity);
williamr@2
   265
		IMPORT_C void Remove(TInt aIndex);
williamr@2
   266
		IMPORT_C void Sort(TLinearOrder<CTzLocalizedCity> anOrder);
williamr@2
   267
		IMPORT_C TInt Find(CTzLocalizedCity* anEntry,TIdentityRelation<CTzLocalizedCity> aIdentityRelation);
williamr@4
   268
		void ReserveL(TInt aCount);
williamr@2
   269
	};
williamr@2
   270
	
williamr@2
   271
/**
williamr@2
   272
An array of city groups. This just passes function calls on to its templated base
williamr@2
   273
class, CTzLocalizedArray.
williamr@2
   274
williamr@2
   275
@publishedAll
williamr@2
   276
@released
williamr@2
   277
*/
williamr@2
   278
class CTzLocalizedCityGroupArray : public CTzLocalizedArray<CTzLocalizedCityGroup>
williamr@2
   279
	{
williamr@2
   280
	public:
williamr@2
   281
		IMPORT_C static CTzLocalizedCityGroupArray* NewL();
williamr@2
   282
		IMPORT_C static CTzLocalizedCityGroupArray* NewLC();
williamr@2
   283
williamr@2
   284
		IMPORT_C CTzLocalizedCityGroup& At(TInt aIndex) const;
williamr@2
   285
		IMPORT_C TInt Count() const;
williamr@2
   286
		IMPORT_C void AppendL(CTzLocalizedCityGroup* aGroup);
williamr@2
   287
		IMPORT_C void Remove(TInt aIndex);
williamr@2
   288
		IMPORT_C void Sort(TLinearOrder<CTzLocalizedCityGroup> anOrder);
williamr@2
   289
		IMPORT_C TInt Find(CTzLocalizedCityGroup* anEntry,TIdentityRelation<CTzLocalizedCityGroup> aIdentityRelation);
williamr@4
   290
		void ReserveL(TInt aCount);
williamr@2
   291
	};
williamr@2
   292
williamr@2
   293
/**
williamr@2
   294
An array of time zones. This just passes function calls on to its templated base
williamr@2
   295
class, CTzLocalizedArray.
williamr@2
   296
williamr@2
   297
@publishedAll
williamr@2
   298
@released
williamr@2
   299
*/
williamr@2
   300
class CTzLocalizedTimeZoneArray : public CTzLocalizedArray<CTzLocalizedTimeZone>
williamr@2
   301
	{
williamr@2
   302
	public:
williamr@2
   303
		IMPORT_C static CTzLocalizedTimeZoneArray* NewL();
williamr@2
   304
		IMPORT_C static CTzLocalizedTimeZoneArray* NewLC();
williamr@2
   305
williamr@2
   306
		IMPORT_C CTzLocalizedTimeZone& At(TInt aIndex) const;
williamr@2
   307
		IMPORT_C TInt Count() const;
williamr@2
   308
		IMPORT_C void AppendL(CTzLocalizedTimeZone* aElement);
williamr@2
   309
		IMPORT_C void Remove(TInt aIndex);
williamr@2
   310
		IMPORT_C void Sort(TLinearOrder<CTzLocalizedTimeZone> anOrder);
williamr@2
   311
		IMPORT_C TInt Find(CTzLocalizedTimeZone* anEntry,TIdentityRelation<CTzLocalizedTimeZone> aIdentityRelation);
williamr@4
   312
		void ReserveL(TInt aCount);
williamr@2
   313
	};
williamr@2
   314
williamr@2
   315
#include <tzlocalizationdatatypes.inl>
williamr@2
   316
williamr@2
   317
#endif //__TZLOCAL_DATATYPES_H__