williamr@2: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __TZLOCAL_DATATYPES_H__ williamr@2: #define __TZLOCAL_DATATYPES_H__ williamr@2: williamr@4: #include williamr@2: williamr@2: /** williamr@4: The resource structure LOCALIZED_TIMEZONE (defined in TimeZoneLocalization.rh) is used williamr@4: to represent a time zone item in a resource file. One of the members of this structure is williamr@4: WORD time_zone_id which stores the id of the time zone. williamr@4: williamr@4: This class stores a time zone id (iTzId) and its associated resource id (iResourceId). This williamr@2: facilitates fast finding of resources in the resource file. For internal use only. williamr@2: williamr@4: For instance for a time zone defined as follow in the resource file, iTzId would be 2728 and williamr@4: iResourceId would be r_tz_europe_tirane (more precisely the resource id assigned to r_tz_europe_tirane williamr@4: by the resource compiler). williamr@4: williamr@4: RESOURCE LOCALIZED_TIMEZONE r_tz_europe_tirane williamr@4: { williamr@4: time_zone_id = 2728; williamr@4: standard_name = 2728_standard_name; williamr@4: daylight_name = 2728_daylight_name; williamr@4: short_standard_name = 2728_short_standard_name; williamr@4: short_daylight_name = 2728_short_daylight_name; williamr@4: cities = williamr@4: { williamr@4: TIMEZONE_CITY williamr@4: { williamr@4: city_group_id = 5; williamr@4: city_name = 2728_tirane_name; williamr@4: } williamr@4: }; williamr@4: } williamr@4: williamr@2: @internalTechnology williamr@2: */ williamr@2: class TTzLocalizedId williamr@2: { williamr@2: public: williamr@4: explicit TTzLocalizedId(const TUint16 aTzId, const TUint aResourceId); williamr@2: williamr@2: //Accessor methods williamr@2: inline TUint16 TimeZoneId() const; williamr@2: inline TUint ResourceId() const; williamr@4: williamr@2: private: williamr@2: TUint16 iTzId; williamr@2: TUint iResourceId; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Encapsulates a localized (exemplar) city. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CTzLocalizedCity : public CBase williamr@2: { williamr@2: public: williamr@2: static CTzLocalizedCity* NewL( williamr@2: const TDesC& aName, williamr@2: const TTzLocalizedId& aTzLocalizedId, williamr@2: const TUint8 aGroupId =0); williamr@2: static CTzLocalizedCity* NewLC( williamr@2: const TDesC& aName, williamr@2: const TTzLocalizedId& aTzLocalizedId, williamr@2: const TUint8 aGroupId =0); williamr@2: ~CTzLocalizedCity(); williamr@2: williamr@2: //Accessor methods williamr@2: IMPORT_C TPtrC Name() const; williamr@2: IMPORT_C TUint16 TimeZoneId() const; williamr@2: IMPORT_C TUint8 GroupId() const; williamr@2: TTzLocalizedId TzLocalizedId() const; williamr@2: TInt UTCOffset() const; williamr@2: void SetUTCOffset(TInt aUTCoffset); williamr@2: void SetCityIndex(TInt aIndex); williamr@2: TInt CityIndex() const; williamr@2: williamr@2: private: williamr@2: void ConstructL(const TDesC& aName); williamr@2: CTzLocalizedCity(const TUint8 aGroupId, const TTzLocalizedId& aTzLocalizedId); williamr@2: williamr@2: private: williamr@2: HBufC* iName; williamr@2: TUint8 iGroupId; williamr@2: TTzLocalizedId iTzLocalizedId; williamr@2: TInt iCityIndex; williamr@4: /** williamr@4: When sorting arrays in UTC order the UTC offset is stored here. It is expressed in minutes. williamr@4: This value should only be used for this purpose. williamr@4: */ williamr@4: TInt iUTCOffset; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Encapsulates a localized group of (exemplar) cities. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CTzLocalizedCityGroup : public CBase williamr@2: { williamr@2: public: williamr@2: static CTzLocalizedCityGroup* NewL(const TDesC& aName, const TUint8 aGroupId); williamr@2: static CTzLocalizedCityGroup* NewLC(const TDesC& aName, const TUint8 aGroupId); williamr@2: ~CTzLocalizedCityGroup(); williamr@2: williamr@2: //Accessor methods williamr@2: IMPORT_C TPtrC Name() const; williamr@2: IMPORT_C TUint8 Id() const; williamr@2: williamr@2: private: williamr@2: void ConstructL(const TDesC& aName); williamr@2: CTzLocalizedCityGroup(const TUint8 aGroupId); williamr@2: williamr@2: private: williamr@2: HBufC* iName; williamr@2: TUint8 iGroupId; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Encapsulates a group of LDML localized timezone names. williamr@2: LDML stands for Locale Data Markup Language. For details, see williamr@4: http://www.openi18n.org/specs/ldml/1.0/ldml-spec.htm williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CTzLocalizedTimeZone : public CBase williamr@2: { williamr@2: public: //enums williamr@2: /** williamr@2: Flags to identify a cached zone. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: enum TTzFrequentlyUsedZone williamr@2: { williamr@2: /** The current zone. */ williamr@2: ECurrentZone, williamr@2: /** The home zone. */ williamr@2: EHomeZone, williamr@2: /** The zone of interest. */ williamr@2: EInterestZone, williamr@2: /** The first recently-used zone. */ williamr@2: ERecentZone1, williamr@2: /** The second recently-used zone. */ williamr@2: ERecentZone2, williamr@2: /** Specifies the number of cached zones. Not to be used as an API argument. */ williamr@2: ECachedTimeZones // If new items are added to this enum, this must williamr@2: // left as last item, because it is used to keep williamr@2: // count of the number of cached zones williamr@2: }; williamr@2: williamr@2: public: williamr@2: static CTzLocalizedTimeZone* NewL( williamr@2: const TTzLocalizedId& aTzLocalizedId, williamr@2: const TDesC& aStandardName, williamr@2: const TDesC& aDaylightName, williamr@2: const TDesC& aShortStandardName, williamr@2: const TDesC& aShortDaylightName); williamr@2: williamr@2: static CTzLocalizedTimeZone* NewLC( williamr@2: const TTzLocalizedId& aTzLocalizedId, williamr@2: const TDesC& aStandardName, williamr@2: const TDesC& aDaylightName, williamr@2: const TDesC& aShortStandardName, williamr@2: const TDesC& aShortDaylightName); williamr@2: williamr@2: ~CTzLocalizedTimeZone(); williamr@2: williamr@2: //Accessor methods williamr@2: IMPORT_C TUint16 TimeZoneId() const; williamr@2: IMPORT_C TPtrC StandardName() const; williamr@2: IMPORT_C TPtrC DaylightName() const; williamr@2: IMPORT_C TPtrC ShortStandardName() const; williamr@2: IMPORT_C TPtrC ShortDaylightName() const; williamr@2: TTzLocalizedId TzLocalizedId() const; williamr@2: TInt UTCOffset() const; williamr@2: void SetUTCOffset(TInt aUTCoffset); williamr@2: williamr@2: private: williamr@2: void ConstructL( williamr@2: const TDesC& aStandardName, williamr@2: const TDesC& aDaylightName, williamr@2: const TDesC& aShortStandardName, williamr@2: const TDesC& aShortDaylightName); williamr@2: CTzLocalizedTimeZone(const TTzLocalizedId& aTzLocalizedId); williamr@2: williamr@2: private: williamr@2: TTzLocalizedId iTzLocalizedId; williamr@2: HBufC* iStandardName; williamr@2: HBufC* iDaylightName; williamr@2: HBufC* iShortStandardName; williamr@2: HBufC* iShortDaylightName; williamr@4: /** williamr@4: When sorting arrays in UTC order the UTC offset is stored here. It is expressed in minutes. williamr@4: This value should only be used for this purpose. williamr@4: */ williamr@4: TInt iUTCOffset; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Template for arrays of localized objects. Implemented using a thin template. williamr@2: All functions are inline. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: template williamr@2: class CTzLocalizedArray : public CBase williamr@2: { williamr@2: protected: williamr@2: inline ~CTzLocalizedArray(); williamr@2: williamr@2: inline T& At(TInt aIndex) const; williamr@2: inline TInt Count() const; williamr@2: inline void AppendL(T* aElement); williamr@2: inline void Remove(TInt aIndex); williamr@2: inline void Sort(TLinearOrder aOrder); williamr@2: inline TInt Find(T* aEntry,TIdentityRelation aIdentityRelation); williamr@4: inline void ReserveL(TInt aCount); williamr@2: williamr@2: inline CTzLocalizedArray(); williamr@2: williamr@2: private: williamr@2: RPointerArray iArray; williamr@2: }; williamr@2: williamr@2: // Assign concrete classes for each of the arrays that will be used williamr@2: // This guards against future BC problems williamr@2: williamr@2: /** williamr@2: An array of cities. This just passes function calls on to its templated base williamr@2: class, CTzLocalizedArray. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CTzLocalizedCityArray : public CTzLocalizedArray williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CTzLocalizedCityArray* NewL(); williamr@2: IMPORT_C static CTzLocalizedCityArray* NewLC(); williamr@2: williamr@2: IMPORT_C CTzLocalizedCity& At(TInt aIndex) const; williamr@2: IMPORT_C TInt Count() const; williamr@2: IMPORT_C void AppendL(CTzLocalizedCity* aCity); williamr@2: IMPORT_C void Remove(TInt aIndex); williamr@2: IMPORT_C void Sort(TLinearOrder anOrder); williamr@2: IMPORT_C TInt Find(CTzLocalizedCity* anEntry,TIdentityRelation aIdentityRelation); williamr@4: void ReserveL(TInt aCount); williamr@2: }; williamr@2: williamr@2: /** williamr@2: An array of city groups. This just passes function calls on to its templated base williamr@2: class, CTzLocalizedArray. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CTzLocalizedCityGroupArray : public CTzLocalizedArray williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CTzLocalizedCityGroupArray* NewL(); williamr@2: IMPORT_C static CTzLocalizedCityGroupArray* NewLC(); williamr@2: williamr@2: IMPORT_C CTzLocalizedCityGroup& At(TInt aIndex) const; williamr@2: IMPORT_C TInt Count() const; williamr@2: IMPORT_C void AppendL(CTzLocalizedCityGroup* aGroup); williamr@2: IMPORT_C void Remove(TInt aIndex); williamr@2: IMPORT_C void Sort(TLinearOrder anOrder); williamr@2: IMPORT_C TInt Find(CTzLocalizedCityGroup* anEntry,TIdentityRelation aIdentityRelation); williamr@4: void ReserveL(TInt aCount); williamr@2: }; williamr@2: williamr@2: /** williamr@2: An array of time zones. This just passes function calls on to its templated base williamr@2: class, CTzLocalizedArray. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CTzLocalizedTimeZoneArray : public CTzLocalizedArray williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CTzLocalizedTimeZoneArray* NewL(); williamr@2: IMPORT_C static CTzLocalizedTimeZoneArray* NewLC(); williamr@2: williamr@2: IMPORT_C CTzLocalizedTimeZone& At(TInt aIndex) const; williamr@2: IMPORT_C TInt Count() const; williamr@2: IMPORT_C void AppendL(CTzLocalizedTimeZone* aElement); williamr@2: IMPORT_C void Remove(TInt aIndex); williamr@2: IMPORT_C void Sort(TLinearOrder anOrder); williamr@2: IMPORT_C TInt Find(CTzLocalizedTimeZone* anEntry,TIdentityRelation aIdentityRelation); williamr@4: void ReserveL(TInt aCount); williamr@2: }; williamr@2: williamr@2: #include williamr@2: williamr@2: #endif //__TZLOCAL_DATATYPES_H__