calendarui/views/src/calenpreviewdata.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/src/calenpreviewdata.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,801 @@
+/*
+* Copyright (c) 2002 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:  The model part of popup
+*/
+
+#include <calinstance.h>
+#include <calenagendautils.h>
+#include <caleninstanceid.h>            // TCalenInstanceId
+#include <calenviewutils.h>
+#include <calenservices.h>
+#include <centralrepository.h>
+#include <calcalendarinfo.h>
+
+#include "calendarui_debug.h"
+#include "calenpreviewdata.h"
+#include "calenpreviewlayoutmanager.h"
+#include "calenpreviewentry.h"
+#include "calenglobaldata.h"
+#include "calendateutils.h"
+#include "CalendarPrivateCRKeys.h"
+#include "calenglobaldata.h"
+#include "calennativeview.h"
+
+// ---------------------------------------------------------------------------
+// ?classname::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CCalenPreviewData::CCalenPreviewData(
+    CCalenPreviewLayoutManager *aLayoutManager,
+    MCalenServices& aServices,
+    TInt aMaxInstances)
+    : iLayoutManager(aLayoutManager), 
+      iNotShownEntries(EFalse),
+      iMaxInstances(aMaxInstances),
+      iServices( aServices )
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// ?classname::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCalenPreviewData::ConstructL(const TTime& aDay)
+    {
+    TRACE_ENTRY_POINT;
+    FindInstancesL(aDay);
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// ?classname::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CCalenPreviewData* CCalenPreviewData::NewL(
+    CCalenPreviewLayoutManager *aLayoutManager,
+    MCalenServices& aServices,
+    TInt aMaxInstances,
+    TTime aFocusedTime)
+    {
+    TRACE_ENTRY_POINT;
+
+    CCalenPreviewData* self = new( ELeave ) CCalenPreviewData(aLayoutManager,
+                                                              aServices,
+                                                              aMaxInstances);
+    CleanupStack::PushL( self );
+    self->ConstructL(aFocusedTime);
+    CleanupStack::Pop( self );
+    
+    TRACE_EXIT_POINT;
+    return self;
+    }
+// ---------------------------------------------------------------------------
+// ?classname::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CCalenPreviewData* CCalenPreviewData::NewL(
+    CCalenPreviewLayoutManager *aLayoutManager,
+    MCalenServices& aServices,
+    TInt aMaxInstances,
+    CCalInstance* aInst)
+    {
+    TRACE_ENTRY_POINT;
+
+    CCalenPreviewData* self = new( ELeave ) CCalenPreviewData(aLayoutManager,
+                                                              aServices, 
+                                                              aMaxInstances);
+    CleanupStack::PushL( self );
+    self->iSingleInstance = ETrue;
+    self->iInstances.Append(aInst);
+    CleanupStack::Pop( self );
+    
+    TRACE_EXIT_POINT;
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// ?classname::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CCalenPreviewData::~CCalenPreviewData()
+    {
+    TRACE_ENTRY_POINT;
+    if(iLayoutManager)
+        iLayoutManager->SetLinesUsed(0);
+    /* Single instance is not owned by CalenPreviewData 
+       so it is not deleted here*/
+    iTodoPriorityOrder.Close();
+    if(!iSingleInstance)
+        iInstances.ResetAndDestroy();
+    iInstances.Close();
+    iEntries.ResetAndDestroy();
+    iEntries.Close();
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// ?classname::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CCalenPreviewData::InstanceCount() const
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    return iInstances.Count();
+    }
+
+TInt CCalenPreviewData::EntryCount() const
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    return iEntries.Count();
+    }
+
+// ---------------------------------------------------------------------------
+// ?classname::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CCalenPreviewData::NotShownEntries() const
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    return iNotShownEntries;
+    }
+
+// ---------------------------------------------------------------------------
+// ?classname::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCalenPreviewData::SetToday(TBool aToday) 
+    {
+    TRACE_ENTRY_POINT;
+    iToday = aToday;
+    TRACE_EXIT_POINT;
+    }
+// ---------------------------------------------------------------------------
+// ?classname::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CCalenPreviewData::Today() 
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    return iToday;
+    }
+
+// ---------------------------------------------------------------------------
+// CCalenPreviewData::RemoveInstancesL
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCalenPreviewData::RemoveInstancesL(const CCalEntry::TType aType)
+    {
+    TRACE_ENTRY_POINT;
+    
+    TInt i( iInstances.Count() - 1 );
+
+    if(aType == CCalEntry::ETodo)
+        {
+        for(TInt i(0); i < iTodoPriorityOrder.Count() && iInstances.Count() > iMaxInstances; i++)
+            {
+            for(TInt j(0); j < iInstances.Count() && iInstances.Count() > iMaxInstances; j++)
+                {
+                if( iTodoPriorityOrder[i] == iInstances[j] )
+                    {
+                    delete iInstances[j];
+                    iInstances.Remove(j);
+                    iTodoPriorityOrder.Remove(i);
+                    i--;
+                    iNotShownEntries = ETrue;
+                    break;
+                    }   
+                }
+            }
+        }
+    else
+        {
+        TInt i( iInstances.Count() - 1 );
+        while( i >= 0 && 
+               iInstances.Count() > iMaxInstances )
+            {
+            if( iInstances[i]->Entry().EntryTypeL() == aType )
+                {
+                delete iInstances[i];
+                iInstances.Remove(i);
+                iNotShownEntries = ETrue;
+                }
+            i--;
+            }
+        }
+    
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// CCalenPreviewData::RemoveInstances
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCalenPreviewData::RemoveInstances()
+    {
+    TRACE_ENTRY_POINT;
+    
+    TInt i( 0 );
+
+    while( iInstances.Count() > iMaxInstances )
+        {
+        i = iInstances.Count() - 1;
+        delete iInstances[i];
+        iInstances.Remove( i );
+        iNotShownEntries = ETrue;
+        }
+
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// CCalenPreviewData::RemoveInstance
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCalenPreviewData::RemoveInstance(TInt aIndex)
+    {
+    TRACE_ENTRY_POINT;
+    
+    if( aIndex < iInstances.Count() && aIndex >= 0 )
+        {
+        delete iInstances[aIndex];
+        iInstances.Remove(aIndex);
+        }
+
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// CCalenPreviewData::DeleteInstances
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCalenPreviewData::DeleteInstances()
+    {
+    TRACE_ENTRY_POINT;
+    iInstances.ResetAndDestroy();
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------------------------
+// CCalenPopupDataBuilder::FindInstancesL
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCalenPreviewData::FindInstancesL(const TTime& aDay)
+    {
+    TRACE_ENTRY_POINT;
+
+    iInstances.ResetAndDestroy();
+    
+    RArray<TInt> colIdArray;
+    CCalenNativeView::GetActiveCollectionidsL( iServices, colIdArray );
+                
+    if(colIdArray.Count() > 0)
+        {  
+          CalenAgendaUtils::CreateEntryIdListForDayL( iInstances,
+                                iServices.InstanceViewL(colIdArray),
+                                aDay,
+                              ETrue/*custom sort for popup*/ );
+          
+        }
+    else
+          {
+          CalenAgendaUtils::CreateEntryIdListForDayL( iInstances,
+                                            iServices.InstanceViewL(),
+                                            aDay,
+                                          ETrue/*custom sort for popup*/ );      
+          }
+    
+    colIdArray.Reset();
+    TRACE_EXIT_POINT;  
+    }
+
+// ---------------------------------------------------------------------------
+// CCalenPreviewData::GetInstance
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CCalInstance* CCalenPreviewData::Instance(TInt aIndex)
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    return iInstances[aIndex];
+    }
+// ---------------------------------------------------------------------------
+// CCalenPreviewData::GetInstance
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CCalenPreviewEntry* CCalenPreviewData::Entry(TInt aIndex)
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    return iEntries[aIndex];
+    }
+
+// ---------------------------------------------------------------------------
+// ?classname::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCalenPreviewData::CreateEntriesL(const TTime& aDay)
+    {
+    TRACE_ENTRY_POINT;
+    TInt rowsUsed(0);
+    CCalenPreviewEntry* temp = NULL;
+    
+    /* Calculate need for each row */    
+    TInt maxRows = iLayoutManager->UsePreview() ? 
+    (iMaxInstances - iInstances.Count() + 1) : 1;
+    
+    TInt count = iInstances.Count();
+    if(iInstances.Count() > 0)
+        {
+        RPointerArray<CCalCalendarInfo> calendarInfoList;
+        iServices.GetAllCalendarInfoL(calendarInfoList);
+        CleanupClosePushL(calendarInfoList); 
+        
+        for( TInt i(0); i < iInstances.Count(); i++)
+            {
+            CCalEntry& aEntry = iInstances[i]->Entry();
+            TCalCollectionId colId = iInstances[i]->InstanceIdL().iCollectionId;
+            HBufC* calendarFileName = iServices.GetCalFileNameForCollectionId(colId).AllocLC();
+            TInt calIndex = calendarInfoList.Find(*calendarFileName, 
+                        CCalenPreviewData::CalendarInfoIdentifierL);
+            CleanupStack::PopAndDestroy(calendarFileName);
+            if(calIndex != KErrNotFound && calendarInfoList[calIndex]->Enabled())
+                {
+                temp = CCalenPreviewEntry::NewL(iInstances[i], iLayoutManager,
+                aDay, maxRows,calendarInfoList[calIndex]->Color().Value());
+                iEntries.AppendL(temp);
+                rowsUsed += temp->LineCount();
+                }
+            }
+        CleanupStack::PopAndDestroy(&calendarInfoList);
+        }
+    else if(iLayoutManager->UsePreview())
+        {
+        /* Create entry for empty text */
+        temp = CCalenPreviewEntry::NewL(
+        iLayoutManager,
+        CCalenPreviewEntry::ECalenPreviewEntryEmpty,0);
+        iEntries.AppendL(temp);
+        rowsUsed += temp->LineCount();
+        }
+
+    /* Calculate row division */
+    TInt rows = maxRows;
+    while(rowsUsed > iMaxInstances)
+        {
+        RemoveLine( CCalEntry::ETodo, rowsUsed, rows );
+        if(rowsUsed == iMaxInstances)
+            break;
+        RemoveLine( CCalEntry::EAnniv, rowsUsed, rows );
+        if(rowsUsed == iMaxInstances)
+            break;
+        RemoveLine( CCalEntry::EEvent, rowsUsed, rows );
+        if(rowsUsed == iMaxInstances)
+            break;
+
+        RemoveMeetingLineL( rowsUsed, rows );
+        rows--;
+        }
+
+    for(TInt i(0); i < iEntries.Count(); i++)
+        {
+        TBool lastLine(EFalse);
+        if( i == iEntries.Count() - 1 &&
+            NotShownEntries())
+            lastLine = ETrue;
+        iEntries[i]->FormatTextL(lastLine);
+        }
+
+    iLayoutManager->SetLinesUsed(rowsUsed);
+    TRACE_EXIT_POINT;
+    }
+
+void CCalenPreviewData::RemoveLine(const CCalEntry::TType aType,
+                                   TInt& aRowsUsed, TInt aRows)
+    {
+    TRACE_ENTRY_POINT;
+
+    if(aType == CCalEntry::ETodo)
+        {
+        // use todo priority list
+        for(TInt i(0); i < iTodoPriorityOrder.Count() && aRowsUsed > iMaxInstances; i++)
+            {
+            for(TInt j(0); j < iInstances.Count() && aRowsUsed > iMaxInstances; j++)
+                {
+                if( iTodoPriorityOrder[i] == iInstances[j] &&
+                    iEntries[j]->LineCount() == aRows && 
+                    iEntries[j]->RemoveLine())
+                    {
+                    aRowsUsed--;
+                    break;
+                    }
+                }   
+            }
+        }
+    else
+        {
+        for(TInt i = iEntries.Count()-1; 
+            i >= 0 && aRowsUsed > iMaxInstances; i--)
+            {
+            if( iEntries[i]->EventType() == aType &&
+                iEntries[i]->LineCount() == aRows && 
+                iEntries[i]->RemoveLine())
+                {
+                aRowsUsed--;
+                }
+            }
+        }
+    TRACE_EXIT_POINT;
+    }
+
+void CCalenPreviewData::RemoveMeetingLineL(TInt& aRowsUsed, TInt aRows)
+    {
+    TRACE_ENTRY_POINT;
+
+    if(iToday)
+        {
+        // Past events
+        for(TInt i(0); i < iEntries.Count() && aRowsUsed > iMaxInstances; i++)
+            {
+            if( ( iEntries[i]->EventType() == CCalEntry::EAppt ||
+                  iEntries[i]->EventType() == CCalEntry::EReminder ) &&
+                iInstances[i]->EndTimeL().TimeLocalL() < iCurrent)
+                {
+                if(iEntries[i]->LineCount() == aRows && 
+                   iEntries[i]->RemoveLine())
+                    {
+                    aRowsUsed--;
+                    }
+                }
+            }
+        // Ongoing meetings, start time less than 30 from current time
+        TTime range(iCurrent - TTimeIntervalMinutes(iRange));
+        for(TInt i(0); i < iEntries.Count() && aRowsUsed > iMaxInstances; i++)
+            {
+            if( (iEntries[i]->EventType() == CCalEntry::EAppt ||
+                 iEntries[i]->EventType() == CCalEntry::EReminder) &&
+                iInstances[i]->EndTimeL().TimeLocalL() > iCurrent &&
+                iInstances[i]->StartTimeL().TimeLocalL() < range)
+                {
+                if(iEntries[i]->LineCount() == aRows && 
+                   iEntries[i]->RemoveLine())
+                    {
+                    aRowsUsed--;
+                    }
+                }
+            }
+        // Upcoming events
+        for(TInt i(iEntries.Count()-1); i >= 0  && aRowsUsed > iMaxInstances; i--)
+            {
+            if( (iEntries[i]->EventType() == CCalEntry::EAppt ||
+                 iEntries[i]->EventType() == CCalEntry::EReminder) &&
+                iInstances[i]->StartTimeL().TimeLocalL() > iCurrent)
+                {
+                if(iEntries[i]->LineCount() == aRows && 
+                   iEntries[i]->RemoveLine())
+                    {
+                    aRowsUsed--;
+                    }
+                }
+            }
+        // Ongoing in range
+        for(TInt i(0); i < iEntries.Count() && aRowsUsed > iMaxInstances; i++)
+            {
+            if( (iEntries[i]->EventType() == CCalEntry::EAppt ||
+                 iEntries[i]->EventType() == CCalEntry::EReminder) &&
+                iInstances[i]->StartTimeL().TimeLocalL() > range && 
+                iInstances[i]->StartTimeL().TimeLocalL() < iCurrent &&
+                iInstances[i]->EndTimeL().TimeLocalL() > iCurrent)
+                {
+                if(iEntries[i]->LineCount() == aRows && 
+                   iEntries[i]->RemoveLine())
+                    {
+                    aRowsUsed--;
+                    }
+                }
+            }
+        }
+    else
+        {
+        for(TInt i = iEntries.Count()-1; i >= 0 && aRowsUsed > iMaxInstances; i--)
+            {
+            if( iEntries[i]->EventType() == CCalEntry::EAppt ||
+                iEntries[i]->EventType() == CCalEntry::EReminder)
+                {
+                if(iEntries[i]->LineCount() == aRows && 
+                   iEntries[i]->RemoveLine())
+                    {
+                    aRowsUsed--;
+                    }
+                }
+            }
+        }
+    TRACE_EXIT_POINT;
+    }
+
+void CCalenPreviewData::PrioritizeTodosL()
+    {
+    TRACE_ENTRY_POINT;
+    for(TInt i(0); i < iInstances.Count(); i++)
+        {
+        if( iInstances[i]->Entry().EntryTypeL() == CCalEntry::ETodo )
+            {
+            iTodoPriorityOrder.AppendL(iInstances[i]);
+            }
+        }
+
+    TLinearOrder<CCalInstance> instanceListOrder( CCalenPreviewData::TodoPrioCompare );
+    iTodoPriorityOrder.Sort( instanceListOrder );
+    TRACE_EXIT_POINT;
+    }
+
+void CCalenPreviewData::SetTimedRangeL(const TTime aCurrent, const TInt aRange)
+    {
+    TRACE_ENTRY_POINT;
+    iCurrent = aCurrent;
+    iRange = aRange;
+    TRACE_EXIT_POINT;
+    }
+
+TInt CCalenPreviewData::TodoPrioCompare(const CCalInstance& aInstance_1, 
+                                        const CCalInstance& aInstance_2)
+    {
+    TRACE_ENTRY_POINT;
+
+    const CCalEntry& entry_1 = aInstance_1.Entry();
+    const CCalEntry& entry_2 = aInstance_2.Entry();
+
+    TInt res = KErrArgument;
+    PIM_TRAPD_HANDLE( (res = DoTodoPrioCompareL(entry_1, entry_2)) );
+    
+    TRACE_EXIT_POINT;    
+    return res;
+    }
+
+TInt CCalenPreviewData::DoTodoPrioCompareL(const CCalEntry& aEntry_1, 
+                                           const CCalEntry& aEntry_2)
+    {
+    TRACE_ENTRY_POINT;
+
+    TInt ret( 0 );
+    CCalEntry::TStatus status_1 = aEntry_1.StatusL();
+    CCalEntry::TStatus status_2 = aEntry_2.StatusL();
+
+    if( status_1 == CCalEntry::ENullStatus )  status_1 = CCalEntry::ETodoNeedsAction;
+    if( status_2 == CCalEntry::ENullStatus )  status_2 = CCalEntry::ETodoNeedsAction;
+
+    if( status_1 == status_2 )
+        {
+        TTime time_1 = aEntry_1.EndTimeL().TimeUtcL();
+        TTime time_2 = aEntry_2.EndTimeL().TimeUtcL();
+        
+        if( time_1 == time_2 )
+            {
+            const TUint pri_1( aEntry_1.PriorityL() );
+            const TUint pri_2( aEntry_2.PriorityL() );
+            
+            if( pri_1 == pri_2 )
+                {
+                time_1 = aEntry_1.LastModifiedDateL().TimeUtcL();
+                time_2 = aEntry_2.LastModifiedDateL().TimeUtcL();
+                
+                if( time_1 == time_2 )     ret = 0;
+                else if( time_1 > time_2 ) ret = -1;
+                else                       ret = 1;
+                }
+            else
+                {
+                if( pri_1 > pri_2 ) ret = -1;
+                else                ret = 1;
+                }
+            }
+        else
+            {
+            if( time_1 > time_2 ) ret = 1;
+            else                  ret = -1;
+            }
+        }
+    else
+        {
+        if( status_1 == CCalEntry::ETodoCompleted ) ret = 1;
+        else                                        ret = -1;
+        }
+    TRACE_EXIT_POINT;
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// CCalenPreviewData::ProcessMonthInstancesL
+// ?implementation_description
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+//
+void CCalenPreviewData::ProcessMonthInstancesL(const TTime aRangeStart, 
+                                               const TBool aIsToday)
+    {
+    TRACE_ENTRY_POINT;
+    /**
+     * Priority order
+     * by types:
+     *  1. EAppt (and EReminder)
+     *  2. ETodo
+     *  3. EAnniv
+     *  4. EEvent 
+     * by properties:
+     *  1. date/time (start time for EAppt and EReminder)
+     *  2. by duration (shotest 1st) (only EAppt and EReminder) 
+     *     FIXME: AL - EReminder has no duration...do we prefer EAppts?
+     *  3. priority (only ETodo)
+     *  4. by modified date (oldest 1st)
+     **/
+
+    // remove all excess entries
+
+    PrioritizeTodosL();    
+
+    if( iInstances.Count() > iMaxInstances )
+        {
+        RemoveInstancesL( CCalEntry::ETodo );
+
+        RemoveInstancesL( CCalEntry::EAnniv );
+        RemoveInstancesL( CCalEntry::EEvent );
+ 
+        
+        TInt i( 0 );
+        // ...next, all 'expired' timed notes (applies only for 'today')...
+        while( i < iInstances.Count() && 
+               iInstances.Count() > iMaxInstances && 
+               aIsToday )
+            {
+            CCalInstance* inst = iInstances[i];
+            CCalEntry& entry = inst->Entry();
+            CCalEntry::TType type = entry.EntryTypeL();
+            TTime entryStart(0);
+
+            TBool timedEntry( type == CCalEntry::EAppt || 
+                              type == CCalEntry::EReminder );
+
+            // StartTimeL for undated to-dos will leave w/ KErrArgument!
+            if( timedEntry )
+                {
+                entryStart = inst->StartTimeL().TimeLocalL();
+                }
+            //  past or (timed entry AND out of time range)
+            if( timedEntry && 
+                ( inst->EndTimeL().TimeLocalL() < iCurrent || 
+                  entryStart < aRangeStart ) )
+                {
+                RemoveInstance(i);
+                iNotShownEntries = ETrue;
+                }
+            else
+                {
+                i++;
+                }
+            }
+        // ...and finally all timed notes that doesn't fit
+        RemoveInstances();
+        }
+    
+    TRACE_EXIT_POINT;
+    }
+
+// --------------------------------------------------------------------------
+// CCalenPreviewData::ProcessWeekInstancesL
+// ?implementation_description
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+//
+void CCalenPreviewData::ProcessWeekInstancesL(const TTime aStart, 
+                                              const TTime aEnd)
+    {
+    TRACE_ENTRY_POINT;
+
+    TInt i( 0 );
+
+    // remove entries that do not intersect with the time range
+    while( i < iInstances.Count() )
+        {
+        CCalEntry& entry = iInstances[i]->Entry();
+        CCalEntry::TType type = entry.EntryTypeL();
+        TTime entryStart( TInt64(0) );
+        TTime entryEnd( TInt64(0) );
+
+        TBool timedEntry( type == CCalEntry::EAppt || type == CCalEntry::EReminder 
+                          || CalenViewUtils::IsAlldayEventL( *( iInstances[i] ) ) );
+
+        // calling StartTimeL for undated to-do will leave w/ KErrArgument!
+        if( timedEntry )
+            {
+            entryStart = iInstances[i]->StartTimeL().TimeLocalL();
+            entryEnd = iInstances[i]->EndTimeL().TimeLocalL();
+            }
+
+        // (timed entry AND doesn't intersect with the time range)
+        //  OR
+        // (non-timed entry)
+        if( !timedEntry ||
+            (timedEntry && !CalenDateUtils::TimeRangesIntersect(aStart, aEnd, entryStart, entryEnd)) )
+            {
+            RemoveInstance(i);
+            }
+        else
+            {
+            i++;
+            }
+        }
+
+    // remove timed notes that doesn't fit (starting from bottom)
+    RemoveInstances();
+    
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenPreviewData::CalendarInfoIdentifierL
+// Returns the multiple DB information.
+// -----------------------------------------------------------------------------
+//
+TBool CCalenPreviewData::CalendarInfoIdentifierL( const HBufC* aName,
+                                        const CCalCalendarInfo& aCalendarInfo)
+    {
+    TRACE_ENTRY_POINT;
+    TBool retVal = EFalse;
+    HBufC* calendarFileName = aCalendarInfo.FileNameL().AllocLC();
+    retVal = calendarFileName->CompareF(*aName);
+    CleanupStack::PopAndDestroy(calendarFileName);
+    TRACE_EXIT_POINT;
+    return (!retVal);
+    }
+
+//  End of File