pimappsupport/vcardandvcal/inc/VRECUR.H
changeset 0 f979ecb2b13e
equal deleted inserted replaced
-1:000000000000 0:f979ecb2b13e
       
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15  
       
    16 #ifndef __VRECUR_H__
       
    17 #define __VRECUR_H__
       
    18 
       
    19 #include <versit.h>
       
    20 
       
    21 //
       
    22 // CWeekDayArray
       
    23 //
       
    24 
       
    25 class CWeekDayArray : public CBase
       
    26 /** Defines an array of the days in the week on which a 'weekly' 
       
    27 or 'monthly by position' repeat event occurs. 
       
    28 @publishedAll
       
    29 @released
       
    30 */
       
    31 	{
       
    32 public:
       
    33 	IMPORT_C CWeekDayArray();
       
    34 	IMPORT_C ~CWeekDayArray();
       
    35 	IMPORT_C void ExternalizeL(RWriteStream& aStream);
       
    36 public:	
       
    37 	/** The array of days in the week. */
       
    38 	CArrayFix<TDay>* iArray;
       
    39 	};
       
    40 
       
    41 //
       
    42 // CVersitRecurrence
       
    43 //
       
    44 class CVersitRecurrence : public CBase
       
    45 /** Abstract base class for all recurrence property value classes.
       
    46 
       
    47 A pointer to a derived recurrence property value class instance is owned by 
       
    48 the CParserPropertyValueRecurrence class.
       
    49 
       
    50 Implementations of this class define when an event is to repeat. 
       
    51 @publishedAll
       
    52 @released
       
    53 */
       
    54 	{
       
    55 public:
       
    56 	IMPORT_C CVersitRecurrence(TInt aInterval,TInt aDuration,TVersitDateTime* aEndDate);
       
    57 	IMPORT_C ~CVersitRecurrence();
       
    58 	/** Externalises an occurrence list to aStream.
       
    59 	
       
    60 	@param aStream The stream to which the occurrence list is to be externalised. */
       
    61 	virtual void ExternalizeOccurrenceListsL(RWriteStream& aStream) const=0;
       
    62 	/** Repeat type. 
       
    63 	@publishedAll
       
    64 	@released */
       
    65 	enum TType
       
    66 		{
       
    67 		/** Daily repeat. */
       
    68 		EDaily=1,
       
    69 		/** Weekly repeat. */
       
    70 		EWeekly,
       
    71 		/** Monthly repeat, by relative position within the month. */
       
    72 		EMonthlyByPos,
       
    73 		/** Monthly repeat, by day number within the month. */
       
    74 		EMonthlyByDay,
       
    75 		/** Yearly repeat, by specific months within the year. */
       
    76 		EYearlyByMonth,
       
    77 		/** Yearly repeat, by specific days within the year. */
       
    78 		EYearlyByDay
       
    79 		};
       
    80 public:
       
    81 	/** The type of repeat (daily, weekly etc.). */
       
    82 	TType iRepeatType;
       
    83 	/** The interval between repeats: a number of days, weeks, months or years, depending 
       
    84 	on the repeat type. */
       
    85 	TInt iInterval;
       
    86 	/** The duration in days, weeks, months or years (depending on the repeat type) 
       
    87 	for the repeat.
       
    88 	
       
    89 	A value of zero indicates the repeat should continue forever. */
       
    90 	TInt iDuration;
       
    91 	/** Specification for the date at which the repeat will end. If a duration and 
       
    92 	an end date are both specified, the end date takes precedence. */
       
    93 	TVersitDateTime* iEndDate;
       
    94 	};
       
    95 
       
    96 //
       
    97 // CVersitRecurrenceDaily
       
    98 //
       
    99 class CVersitRecurrenceDaily : public CVersitRecurrence
       
   100 /** Defines when a 'daily' recurrence is to be repeated.
       
   101 
       
   102 Used by a repeating event (a vCalendar event or to-do) to define when it is 
       
   103 to occur. The days on which the event occurs are identified by the number 
       
   104 of days between repeats, e.g. every third day.
       
   105 
       
   106 A pointer to this object may be owned by a CParserPropertyValueRecurrence 
       
   107 object. 
       
   108 @publishedAll
       
   109 @released
       
   110 */
       
   111 	{
       
   112 public:
       
   113 	IMPORT_C CVersitRecurrenceDaily(TInt aInterval,TInt aDuration,TVersitDateTime* aEndDate);
       
   114 public: //from CVersitRecurrence
       
   115 	IMPORT_C void ExternalizeOccurrenceListsL(RWriteStream& /*aStream*/) const;
       
   116 	};
       
   117 
       
   118 //
       
   119 //	CVersitRecurrenceWeekly
       
   120 //
       
   121 class CVersitRecurrenceWeekly : public CVersitRecurrence
       
   122 /** Defines a list of days when a 'weekly' recurrence is to be 
       
   123 repeated.
       
   124 
       
   125 Used by a repeating event (a vCalendar event or to-do) to define when it is 
       
   126 to occur. The days on which the event occurs are identified by the number 
       
   127 of weeks between repeats and the day(s) of the week on which the event occurs, 
       
   128 e.g. on Monday every other week.
       
   129 
       
   130 A pointer to this object may be owned by a CParserPropertyValueRecurrence 
       
   131 object. 
       
   132 @publishedAll
       
   133 @released
       
   134 */
       
   135 	{
       
   136 public:
       
   137 	IMPORT_C CVersitRecurrenceWeekly(TInt aInterval,TInt aDuration,TVersitDateTime* aEndDate,CWeekDayArray* aArrayOfWeekDayOccurrences);
       
   138 	IMPORT_C ~CVersitRecurrenceWeekly();
       
   139 public: //from CVersitRecurrence
       
   140 	IMPORT_C void ExternalizeOccurrenceListsL(RWriteStream& aStream) const;
       
   141 public:
       
   142 	CWeekDayArray* iArrayOfWeekDayOccurrences;		//Mon-Sun
       
   143 	};
       
   144 
       
   145 //
       
   146 // CVersitRecurrenceMonthlyByPos
       
   147 //
       
   148 class CVersitRecurrenceMonthlyByPos : public CVersitRecurrence
       
   149 /** Defines a list of days when a 'monthly by position' recurrence 
       
   150 is to be repeated.
       
   151 
       
   152 Used by a repeating event (a vCalendar event or to-do) to define when it is 
       
   153 to occur.
       
   154 
       
   155 The days on which the event occurs are identified by their relative position 
       
   156 within the month, for example the second Monday or the last Friday.
       
   157 
       
   158 A pointer to this object may be owned by a CParserPropertyValueRecurrence 
       
   159 object
       
   160 
       
   161 Note: The CMonthPosition class, defined within this class, is used to 
       
   162 define the positions of days within the month. 
       
   163 @publishedAll
       
   164 @released
       
   165 */
       
   166 	{
       
   167 public:
       
   168 	class CMonthPosition : public CBase
       
   169 	/** Defines a week within the month, using the numeric occurrence of the week 
       
   170 	(between 1 and 5 inclusive) counting from either the start or end of the month, 
       
   171 	and defines an array of days within this week. 
       
   172 	@publishedAll
       
   173 	@released
       
   174 	*/
       
   175 		{
       
   176 	public:
       
   177 		IMPORT_C ~CMonthPosition();
       
   178 	public:
       
   179 		/** Flags that define whether the week number is counted from the start or end of the month. 
       
   180 		@publishedAll
       
   181 		@released */
       
   182 		enum TSign 
       
   183 				{
       
   184 				/** Indicates that the iWeekNo member specifies a number counting forwards 
       
   185 				from the start of the month. */
       
   186 				EWeeksFromStartOfMonth,
       
   187 				/** Indicates that the iWeekNo member specifies a number counting backwards from 
       
   188 				the end of the month. */
       
   189 				EWeeksFromEndOfMonth
       
   190 				};
       
   191 	public:
       
   192 		/** Indicates whether the week number iWeekNo is counted from the start or the 
       
   193 		end of the month. A plus sign denotes from the start of the month and a minus 
       
   194 		sign denotes from the end. */
       
   195 		TSign iSign;
       
   196 		/** A week number within the month, between 1 and 5 inclusive. */
       
   197 		TInt iWeekNo;
       
   198 		/** Pointer to an array of week days. */
       
   199 		CWeekDayArray* iArrayOfWeekDays;
       
   200 		};
       
   201 	IMPORT_C CVersitRecurrenceMonthlyByPos(TInt aInterval,TInt aDuration,TVersitDateTime* aEndDate,CArrayPtrFlat<CMonthPosition>* aMonthPositions);
       
   202 	IMPORT_C ~CVersitRecurrenceMonthlyByPos();
       
   203 public: //framework
       
   204 	IMPORT_C void ExternalizeOccurrenceListsL(RWriteStream& aStream) const;
       
   205 public:
       
   206 	/** Array of 'month positions' which define the days on which the event occurs. */
       
   207 	CArrayPtrFlat<CMonthPosition>* iMonthPositions;
       
   208 	};
       
   209 
       
   210 //
       
   211 // CVersitRecurrenceMonthlyByDay
       
   212 //
       
   213 class CVersitRecurrenceMonthlyByDay : public CVersitRecurrence
       
   214 /** Defines a list of days when a 'monthly by day' recurrence 
       
   215 is to repeat.
       
   216 
       
   217 Used by a repeating event (a vCalendar event or to-do) to define when it is 
       
   218 to occur.
       
   219 
       
   220 The days on which the event occurs are identified by a number, counting 
       
   221 either from the start or the end of the month.
       
   222 
       
   223 A pointer to this object may be owned by a CParserPropertyValueRecurrence 
       
   224 object. 
       
   225 @publishedAll
       
   226 @released
       
   227 */
       
   228 	{
       
   229 public:
       
   230 	IMPORT_C CVersitRecurrenceMonthlyByDay(TInt aInterval,TInt aDuration,TVersitDateTime* aEndDate,	CArrayFix<TInt>* aArrayOfOccurrencesInDaysFromStartOfMonth
       
   231 		,CArrayFix<TInt>* aArrayOfOccurrencesInDaysFromEndOfMonth,TBool aLastDay);
       
   232 	IMPORT_C ~CVersitRecurrenceMonthlyByDay();
       
   233 public: //framework
       
   234 	IMPORT_C void ExternalizeOccurrenceListsL(RWriteStream& aStream) const;
       
   235 public:
       
   236 	/** Array of days, counting from the start of the month, on which the event occurs. */
       
   237 	CArrayFix<TInt>* iArrayOfOccurrencesInDaysFromStartOfMonth; //1-31
       
   238 	/** Array of days, counting from the end of the month, on which the event occurs. */
       
   239 	CArrayFix<TInt>* iArrayOfOccurrencesInDaysFromEndOfMonth; //1-31
       
   240 	/** Identifies whether the event occurs on the last day of the month. */
       
   241 	TBool iLastDay;
       
   242 	};
       
   243 
       
   244 //
       
   245 // CVersitRecurrenceYearlyByMonth
       
   246 //
       
   247 class CVersitRecurrenceYearlyByMonth : public CVersitRecurrence
       
   248 /** Defines a list of months when a 'yearly by month' recurrence 
       
   249 is to repeat.
       
   250 
       
   251 Used by a repeating event (a vCalendar event or to-do) to define the months  
       
   252 in which it is to occur. The months on which the event occurs are identified 
       
   253 by their number in the year (between 1 and 12 inclusive).
       
   254 
       
   255 A pointer to this object may be owned by a CParserPropertyValueRecurrence 
       
   256 object. 
       
   257 @publishedAll
       
   258 @released
       
   259 */
       
   260 	{
       
   261 public:
       
   262 	IMPORT_C CVersitRecurrenceYearlyByMonth(TInt aInterval,TInt aDuration,TVersitDateTime* aEndDate,CArrayFix<TMonth>* aArrayOfMonthsInYearOccurrences);
       
   263 	IMPORT_C ~CVersitRecurrenceYearlyByMonth();
       
   264 public: //framework
       
   265 	IMPORT_C void ExternalizeOccurrenceListsL(RWriteStream& aStream) const;
       
   266 public:
       
   267 	/** Pointer to an array of month values. */
       
   268 	CArrayFix<TMonth>* iArrayOfMonthsInYearOccurrences; //Jan-Dec
       
   269 	};
       
   270 
       
   271 //
       
   272 // CVersitRecurrenceYearlyByDay
       
   273 //
       
   274 class CVersitRecurrenceYearlyByDay : public CVersitRecurrence
       
   275 /** Defines a list of days when a 'yearly by day' recurrence is 
       
   276 to be repeated.
       
   277 
       
   278 Used by a repeating event (a vCalendar event or to-do) to define when it is 
       
   279 to occur.
       
   280 
       
   281 The days on which the repeat occurs are identified by their day number in 
       
   282 the year (between 1 and 366 inclusive).
       
   283 
       
   284 A pointer to this object may be owned by a CParserPropertyValueRecurrence 
       
   285 object. 
       
   286 @publishedAll
       
   287 @released
       
   288 */
       
   289 	{
       
   290 public:
       
   291 	IMPORT_C CVersitRecurrenceYearlyByDay(TInt aInterval,TInt aDuration,TVersitDateTime* aEndDate,CArrayFix<TInt>* aArrayOfDaysInYearOccurrences);
       
   292 	IMPORT_C ~CVersitRecurrenceYearlyByDay();
       
   293 public: //framework
       
   294 	IMPORT_C void ExternalizeOccurrenceListsL(RWriteStream& aStream) const;
       
   295 public:
       
   296 	/** Pointer to an array of integers between 1 and 366 inclusive. 
       
   297 	
       
   298 	Each integer represents a day on which the repeat event occurs. */
       
   299 	CArrayFix<TInt>* iArrayOfDaysInYearOccurrences; 
       
   300 	};
       
   301 
       
   302 //
       
   303 // CParserPropertyValueRecurrence
       
   304 //
       
   305 class CParserPropertyValueRecurrence : public CParserTimePropertyValue
       
   306 /** A recurrence property value parser.
       
   307 
       
   308 This is used to store and retrieve the recurrence information for a repeating 
       
   309 vEvent or vTodo. This information is stored as a CVersitRecurrence object.
       
   310 
       
   311 The UID for a recurrence property value is KVCalPropertyRecurrenceUid. 
       
   312 @publishedAll
       
   313 @released
       
   314 */
       
   315 	{
       
   316 public:
       
   317 	IMPORT_C CParserPropertyValueRecurrence(CVersitRecurrence* aValue);
       
   318 	IMPORT_C ~CParserPropertyValueRecurrence();
       
   319 	inline CVersitRecurrence* Value() const;
       
   320 public: // from CParserTimePropertyValue
       
   321 	IMPORT_C void ConvertAllDateTimesToUTCL(const TTimeIntervalSeconds& aIncrement,const CVersitDaylight* aDaylight);
       
   322 	IMPORT_C void ConvertAllUTCDateTimesToMachineLocalL(const TTimeIntervalSeconds& aIncrement);
       
   323 public: // from CParserPropertyValue
       
   324 	IMPORT_C void ExternalizeL(RWriteStream& aStream,const Versit::TEncodingAndCharset& /*aEncodingCharset*/,TInt /*aLengthOutput*/);
       
   325 protected:
       
   326 	CVersitRecurrence* iValue;
       
   327 	};
       
   328 
       
   329 //
       
   330 // CRecurrenceParser
       
   331 //
       
   332 class CRecurrenceParser : public CVersitParser
       
   333 /** Base class used in the derivation of CParserVCalEntity.
       
   334 
       
   335 Provides recurrence functionality for vEvents and vToDos in vCalendars. 
       
   336 @publishedAll
       
   337 @released
       
   338 */
       
   339 	{
       
   340 public:
       
   341 	IMPORT_C CRecurrenceParser(TBool aHasVersion);
       
   342 	IMPORT_C CParserPropertyValue* MakePropertyValueRecurrenceL(TDes& aRecurringEntity);
       
   343 private:	
       
   344 	static void ResetAndDestroyArrayOfMonthPositions(TAny* aObject);	
       
   345 	void GetFrequencyAndIntervalL(CVersitRecurrence::TType& aFrequency,TInt& aInterval, const TDesC& aRecurrenceType);
       
   346 	CVersitRecurrence* GetFrequencyModifiersL(const CVersitRecurrence::TType& aRepeatType,TInt aInterval, const TDesC& aListDates);
       
   347 	CWeekDayArray* GetListOfWeekDayOccurrencesL(const TDesC& aListDays);
       
   348 private: // from CVersitParser
       
   349 	IMPORT_C virtual void Reserved1();
       
   350 	IMPORT_C virtual void Reserved2();
       
   351 	};
       
   352 
       
   353 #include <vrecur.inl>
       
   354 
       
   355 #endif