pimappservices/calendar/shared/inc/agmcalendartime.h
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/shared/inc/agmcalendartime.h	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,170 @@
+// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file
+ @internalAll
+ @released
+*/
+
+
+#ifndef __AGMCALENDARTIME_H__
+#define __AGMCALENDARTIME_H__
+
+#include <e32base.h>
+
+class CTzRules;
+class CTzConverter;
+class CAgnTlsProxy;
+class RReadStream;
+class RWriteStream;
+
+/** Interface class representing a time mode.
+A time mode can be floating, fixed to UTC, or fixed to a particular time zone (but that is not supported yet).
+This class provides functions to convert between UTC and the relevant local time.
+*/
+NONSHARABLE_CLASS(MAgnCalendarTimeMode)
+	{
+public:
+	enum TFormat {ELocal, EUtc, EFixedLocal}; // EFixedLocal indicate the local time that is associated with the rule of TAgnCalendarFixedUsingRulesTimeMode
+
+	/** The time mode for a calendar entry	*/
+	enum TTimeMode
+		{
+		/** Floating time. */
+		EFloating,
+		/** Fixed time in UTC format. When a fixed time entry is repeating, its repeat rule use EFixedTimeZone mode to store the corresponding time zone where the start and end time are stored in EFixedUtc. */
+		EFixedUtc,
+		/** Timezone rule time mode. Currently, this is used only for repeating entry where the start and end time are stored in EFixedUtc more */ 
+		EFixedTimeZone,
+		};
+public:
+	virtual void ToL(TFormat aFormat, TTime& aTime) const = 0;
+	virtual void FromL(TFormat aFormat, TTime& aTime) const = 0;
+	virtual TTimeMode TimeMode() const = 0;
+	};
+
+
+/**
+The main time class for use within Calendar.
+This stores either a fixed or floating time - a fixed time is stored as UTC, a floating time is stored as local. 
+The offset between UTC and local is cached and updated when necessary.
+
+This class should be used as widely as possible throughout Calendar, eventually replacing the less useful TTime.
+TCalTime is an equivalent class to TAgnCalendarTime, but is exposed in the Calendar API.
+*/
+NONSHARABLE_CLASS(TAgnCalendarTime)
+	{
+public:
+	IMPORT_C TAgnCalendarTime();
+	
+	IMPORT_C void SetFloatingL(const TTime& aTime); // sets floating time
+	IMPORT_C void SetLocalL(const TTime& aTime);	// sets fixed time
+	IMPORT_C void SetUtcL(const TTime& aTime);		// sets fixed time
+
+	IMPORT_C TTime LocalL() const;
+	IMPORT_C TTime UtcL() const;
+
+	IMPORT_C TBool IsSet() const; // returns ETrue if non-NullTTime
+	IMPORT_C TBool operator==(const TAgnCalendarTime& aTime) const;
+	IMPORT_C TBool operator!=(const TAgnCalendarTime& aTime) const;
+	IMPORT_C TBool operator<(const TAgnCalendarTime& aTime) const;
+	IMPORT_C TBool operator>(const TAgnCalendarTime& aTime) const;
+	IMPORT_C TBool operator<=(const TAgnCalendarTime& aTime) const;
+	IMPORT_C TBool operator>=(const TAgnCalendarTime& aTime) const;
+
+	IMPORT_C void InternalizeL(RReadStream& aStream);
+	IMPORT_C MAgnCalendarTimeMode::TTimeMode TimeMode() const; // return the time mode
+
+	void SetNull();
+	IMPORT_C TBool IsValidTime() const;
+	void ExternalizeL(RWriteStream& aStream) const;
+	const MAgnCalendarTimeMode* CalendarTimeMode() const;
+
+	// functions used in RArrays of TAgnCalendarTime
+	static TInt Compare(const TAgnCalendarTime& aLeft, const TAgnCalendarTime& aRight);
+	static void InsertInOrderL(RArray<TAgnCalendarTime>& aTimeArray, const TAgnCalendarTime& aTimeToInsert);
+	static TBool CompareTimeArrays(const RArray<TAgnCalendarTime>* aLeft, const RArray<TAgnCalendarTime>* aRight);
+	static void InternalizeTimeArrayL(RArray<TAgnCalendarTime>& aArray, RReadStream& aStream);
+	static void ExternalizeTimeArrayL(RArray<TAgnCalendarTime>& aArray, RWriteStream& aStream);
+	
+private:
+	void StoreNewOffset(const TTime& aTime) const;
+	CAgnTlsProxy* TimeZoneAccessor() const;
+
+	void SetTzId(TUint16 aTzId) const;		// Always use this to set the iTzId time zone variable
+	TUint16 TzId() const;					// Always use this to get the iTzId time zone variable
+	void SetFloatingFlag(TBool aFloating) const;
+	
+	void SetDateTimeL(const TTime& aTime, TBool aFloating, MAgnCalendarTimeMode::TFormat aFormat = MAgnCalendarTimeMode::EUtc);
+	TTime DateTimeL(MAgnCalendarTimeMode::TFormat aFormat) const;
+private:
+	TTime iTime; // time stored as UTC or local depending on iCalendarMode
+	mutable TInt16 iLocalOffsetInMinutes;
+	mutable TUint16 iTzId; // caches current time zone ID AND floating status
+	mutable CAgnTlsProxy* iTimeZoneAccessor; // not owned
+	};
+
+/** Concrete time mode class for fixed UTC time mode.
+*/
+NONSHARABLE_CLASS(TAgnCalendarFixedTimeMode) : public MAgnCalendarTimeMode
+	{
+public:
+	TAgnCalendarFixedTimeMode(CTzConverter& aTimeConverter);
+	void ToL(MAgnCalendarTimeMode::TFormat aFormat, TTime& aTime) const;
+	void FromL(MAgnCalendarTimeMode::TFormat aFormat, TTime& aTime) const;
+	TTimeMode TimeMode() const;
+private:
+	TAgnCalendarFixedTimeMode(const TAgnCalendarFixedTimeMode&); // not implemented
+	TAgnCalendarFixedTimeMode& operator=(TAgnCalendarFixedTimeMode&); // not implemented
+private:
+	CTzConverter& iTimeConverter; // not owned
+	};
+
+/** Concrete time mode class for 'fixed to time zone' time mode.
+*/
+NONSHARABLE_CLASS(TAgnCalendarFixedUsingRulesTimeMode) : public MAgnCalendarTimeMode
+	{
+public:
+	TAgnCalendarFixedUsingRulesTimeMode(CTzRules& aTimeZoneRules, CTzConverter& aTimeConverter);
+	void ToL(MAgnCalendarTimeMode::TFormat aFormat, TTime& aTime) const;
+	void FromL(MAgnCalendarTimeMode::TFormat aFormat, TTime& aTime) const;
+	const CTzRules& TzZone() const;
+	TTimeMode TimeMode() const;
+private:
+	TAgnCalendarFixedUsingRulesTimeMode(const TAgnCalendarFixedUsingRulesTimeMode&); // not implemented
+	TAgnCalendarFixedUsingRulesTimeMode& operator=(TAgnCalendarFixedUsingRulesTimeMode&); // not implemented
+private:
+	const CTzRules& iTimeZoneRules; // not owned
+	CTzConverter& iTimeConverter; // not owned
+	};
+
+/** Concrete time mode class for floating time mode.
+*/
+NONSHARABLE_CLASS(TAgnCalendarFloatingTimeMode) : public MAgnCalendarTimeMode
+	{
+public:
+	TAgnCalendarFloatingTimeMode(CTzConverter& aTimeConverter);
+	void ToL(MAgnCalendarTimeMode::TFormat aFormat, TTime& aTime) const;
+	void FromL(MAgnCalendarTimeMode::TFormat aFormat, TTime& aTime) const;
+	TTimeMode TimeMode() const;
+private:
+	TAgnCalendarFloatingTimeMode(const TAgnCalendarFloatingTimeMode&); // not implemented
+	TAgnCalendarFloatingTimeMode& operator=(TAgnCalendarFloatingTimeMode&); // not implemented
+private:
+	CTzConverter& iTimeConverter; // not owned
+	};
+
+#endif