--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/exampleapps/alfexcalendar/src/alfexcalendarengine.cpp Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,262 @@
+/*
+* Copyright (c) 2006 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:
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <EikEnv.h>
+#include <barsread.h>
+#include <e32math.h>
+
+#include <alfexcalendar.rsg>
+#include "alfexcalendarengine.h"
+
+// CONSTANTS
+const TReal KAlfExCalendarEngineChangeDay = 0.7;
+const TReal KAlfExCalendarEngineDayRandomizeLoopCount = 4;
+const TReal KAlfExCalendarEngineDayRandomize = 10;
+const TReal KAlfExCalendarEngineDayTenDays = 10;
+const TReal KAlfExCalendarEngineArrayGranularity = 4;
+
+// LOCAL CONSTANTS AND MACROS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------
+// CAlfExCalendarEngine::NewL
+// ----------------------------------------------------
+CAlfExCalendarEngine* CAlfExCalendarEngine::NewL()
+ {
+ CAlfExCalendarEngine* self = CAlfExCalendarEngine::NewLC();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ----------------------------------------------------
+// CAlfExCalendarEngine::NewLC
+// ----------------------------------------------------
+CAlfExCalendarEngine* CAlfExCalendarEngine::NewLC()
+ {
+ CAlfExCalendarEngine* self = new (ELeave) CAlfExCalendarEngine();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+// ----------------------------------------------------
+// CAlfExCalendarEngine::CAlfExCalendarEngine
+// ----------------------------------------------------
+CAlfExCalendarEngine::CAlfExCalendarEngine()
+ {
+ iCalendarEventArray.Reset();
+ }
+
+
+// ----------------------------------------------------
+// CAlfExCalendarEngine::ConstructL
+// ----------------------------------------------------
+void CAlfExCalendarEngine::ConstructL()
+ {
+ TReal randomNumber;
+ TInt randomNumberInt;
+ TInt64 seed=0;
+
+ CDesCArrayFlat* array = new(ELeave) CDesCArrayFlat(KAlfExCalendarEngineArrayGranularity);
+ CleanupStack::PushL( array );
+
+ CEikonEnv* coeEnv = CEikonEnv::Static();
+ TResourceReader reader;
+ coeEnv->CreateResourceReaderLC(reader, R_ALFEXCALENDAR_CALENDAR_EVENTS_ARRAY);
+
+ const TInt count = reader.ReadInt16();
+ for(TInt loop = 0; loop < count; loop++)
+ {
+ HBufC* txt = reader.ReadHBufCL();
+ CleanupStack::PushL(txt);
+ array->AppendL(*txt);
+ CleanupStack::PopAndDestroy(txt);
+ }
+ CleanupStack::PopAndDestroy(); //reader2
+
+ TAlfExCalendarEngineListItem event;
+ event.iItemDay.HomeTime();
+ seed = event.iItemDay.Int64();
+ randomNumber = count * Math::FRand(seed);
+ randomNumberInt = (TInt) randomNumber;
+
+ TTimeIntervalDays days(KAlfExCalendarEngineDayTenDays);
+ event.iItemDay -= days; // lets start 10 days before present
+
+ for(TInt i=0; i<KAlfExCalendarEngineDayRandomizeLoopCount; i++)
+ {
+ for(TInt loop = 0; loop < count; loop++)
+ {
+ randomNumber = Math::FRand(seed);
+ if(randomNumber < KAlfExCalendarEngineChangeDay)
+ {
+ randomNumber *= KAlfExCalendarEngineDayRandomize;
+ randomNumberInt = (TInt) randomNumber;
+ days = TTimeIntervalDays(randomNumberInt);
+ event.iItemDay += days;
+ }
+ event.iItemText.Copy((*array)[loop]);
+ iCalendarEventArray.AppendL(event);
+ }
+ }
+ CleanupStack::PopAndDestroy(array);
+ }
+
+
+// ----------------------------------------------------
+// CAlfExCalendarEngine::~CAlfExCalendarEngine
+// ----------------------------------------------------
+CAlfExCalendarEngine::~CAlfExCalendarEngine()
+ {
+ iCalendarEventArray.Close();
+ }
+
+// ----------------------------------------------------
+// CAlfExCalendarEngine::LoadCalendarEventsL
+// ----------------------------------------------------
+void CAlfExCalendarEngine::LoadCalendarEventsL( const TTime& aDate )
+ {
+ TReal randomNumber;
+ TInt randomNumberInt;
+ TInt64 seed=0;
+
+ CDesCArrayFlat* array = new(ELeave) CDesCArrayFlat(KAlfExCalendarEngineArrayGranularity);
+ CleanupStack::PushL( array );
+
+ CEikonEnv* coeEnv = CEikonEnv::Static();
+ TResourceReader reader;
+ coeEnv->CreateResourceReaderLC(reader, R_ALFEXCALENDAR_CALENDAR_EVENTS_ARRAY);
+
+ const TInt count = reader.ReadInt16();
+ for(TInt loop = 0; loop < count; loop++)
+ {
+ HBufC* txt = reader.ReadHBufCL();
+ CleanupStack::PushL(txt);
+ array->AppendL(*txt);
+ CleanupStack::PopAndDestroy(txt);
+ }
+ CleanupStack::PopAndDestroy(); //reader2
+
+ TAlfExCalendarEngineListItem event;
+ event.iItemDay = aDate; //.HomeTime();
+ seed = event.iItemDay.Int64();
+ randomNumber = count * Math::FRand(seed);
+ randomNumberInt = (TInt) randomNumber;
+
+ TTimeIntervalDays days(KAlfExCalendarEngineDayTenDays);
+ event.iItemDay -= days; // lets start 10 days before present
+
+ for(TInt i=0; i<KAlfExCalendarEngineDayRandomizeLoopCount; i++)
+ {
+ for(TInt loop = 0; loop < count; loop++)
+ {
+ randomNumber = Math::FRand(seed);
+ if(randomNumber < KAlfExCalendarEngineChangeDay)
+ {
+ randomNumber *= KAlfExCalendarEngineDayRandomize;
+ randomNumberInt = (TInt) randomNumber;
+ days = TTimeIntervalDays(randomNumberInt);
+ event.iItemDay += days;
+ }
+ event.iItemText.Copy((*array)[loop]);
+ iCalendarEventArray.AppendL(event);
+ }
+ }
+ CleanupStack::PopAndDestroy(array);
+ }
+
+// ----------------------------------------------------
+// CAlfExCalendarEngine::EventsAvailable
+// ----------------------------------------------------
+TBool CAlfExCalendarEngine::EventsAvailable(const TTime& aDate)
+ {
+ TBool ret( EFalse );
+ TDateTime requestedDate = aDate.DateTime();
+ const TInt arrayCount = iCalendarEventArray.Count();
+ for(TInt loop = 0; loop < arrayCount; loop++)
+ {
+ TDateTime eventDate = iCalendarEventArray[loop].iItemDay.DateTime();
+ if(eventDate.Day() == requestedDate.Day() &&
+ eventDate.Month() == requestedDate.Month() &&
+ eventDate.Year() == requestedDate.Year())
+ {
+ ret = ETrue;
+ break;
+ }
+ }
+ return ret;
+ }
+
+// ----------------------------------------------------
+// CAlfExCalendarEngine::NumberOfEvents
+// ----------------------------------------------------
+TInt CAlfExCalendarEngine::NumberOfEvents(const TTime& aDate)
+ {
+ TInt count = 0;
+ TDateTime requestedDate = aDate.DateTime();
+ const TInt arrayCount = iCalendarEventArray.Count();
+ for(TInt loop = 0; loop < arrayCount; loop++)
+ {
+ TDateTime eventDate = iCalendarEventArray[loop].iItemDay.DateTime();
+ if(eventDate.Day() == requestedDate.Day() &&
+ eventDate.Month() == requestedDate.Month() &&
+ eventDate.Year() == requestedDate.Year())
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+
+// ----------------------------------------------------
+// CAlfExCalendarEngine::NumberOfEvents
+// ----------------------------------------------------
+void CAlfExCalendarEngine::GetEventInformation(
+ const TTime& aDate,
+ TInt aIndex,
+ TDes& aTextBuffer)
+ {
+ aTextBuffer.Zero();
+ TInt count = KErrNotFound;
+ TDateTime requestedDate = aDate.DateTime();
+ const TInt arrayCount = iCalendarEventArray.Count();
+ for(TInt loop = 0; loop < arrayCount; loop++ )
+ {
+ TDateTime eventDate = iCalendarEventArray[loop].iItemDay.DateTime();
+ if(eventDate.Day() == requestedDate.Day() &&
+ eventDate.Month() == requestedDate.Month() &&
+ eventDate.Year() == requestedDate.Year())
+ {
+ count++;
+ }
+ if(aIndex == count)
+ {
+ aTextBuffer.Copy(iCalendarEventArray[loop].iItemText);
+ loop = arrayCount;
+ }
+ }
+ }
+
+
+// end of file
\ No newline at end of file