exampleapps/alfexcalendar/src/alfexcalendarengine.cpp
changeset 0 15bf7259bb7c
--- /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