calendarui/views/src/calenmissedalarmscontainer.cpp
branchRCL_3
changeset 66 bd7edf625bdd
child 67 1539a383d7b6
child 74 97232defd20e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/src/calenmissedalarmscontainer.cpp	Wed Sep 01 12:32:31 2010 +0100
@@ -0,0 +1,1012 @@
+/*
+* Copyright (c) 2008 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:   Container for missed alarm view's controls.
+ *
+*/
+
+
+
+// System Includes
+#include <StringLoader.h>
+#include <eikdef.h>
+#include <eikenv.h>
+#include <avkon.rsg>
+#include <AknUtils.h>
+#include <aknlists.h>
+#include <AknsUtils.h>
+#include <AknIconArray.h>
+#include <avkon.hrh>
+#include <aknconsts.h>
+#include <data_caging_path_literals.hrh>
+#include <AknIconArray.h>
+#include <AknsDrawUtils.h>
+#include <avkon.mbg>
+#include <gulicon.h>
+#include <aknenv.h>
+#include <eikapp.h>
+#include <AknBidiTextUtils.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <AknsFrameBackgroundControlContext.h>
+#include <csxhelp/cale.hlp.hrh>
+#include <calentryview.h>
+#include <calsession.h>
+#include <calinstanceview.h>
+#include <calinstance.h>
+#include <missedalarmstore.h>
+#include <missedalarm.h>
+#include <calenagendautils.h>
+#include <calenglobaldata.h>
+#include <calendar.mbg>
+#include <Calendar.rsg>
+#include <calencommands.hrh>            // Calendar commands
+#include <calencontext.h>
+#include <caleninstanceid.h>            // TCalenInstanceId
+#include <calenservices.h>
+#include <calentoolbar.h>
+#include <calenviewutils.h>
+
+// User Includes
+#include "calendarui_debug.h"
+#include "calenmissedalarmscontainer.h"
+#include "calendar.hrh"
+#include "calencontainer.h"
+#include "calenicons.h"
+#include "calenicons.h"
+#include "CalenUid.h"
+
+// Constants
+const TInt KMissedAlarmListMaxLength = 25;
+const TInt KMissedAlarmListBoxItems = 10;
+const TInt KListDataLength = 256;
+_LIT( KListSeparator, "\t" );
+_LIT( KIconFormat,"%d");
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::CCalenMissedAlarmsContainer
+// Performs the first phase of two phase construction.
+// -----------------------------------------------------------------------------
+//
+CCalenMissedAlarmsContainer::CCalenMissedAlarmsContainer(CCalenNativeView* aView,
+                         MCalenServices& aServices,TInt& aHighlightedRowNumber) :
+    CCalenContainer(aView, aServices),
+    iHighlightedRowNumber(aHighlightedRowNumber)
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::~CCalenMissedAlarmsContainer
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CCalenMissedAlarmsContainer::~CCalenMissedAlarmsContainer()
+    {
+    TRACE_ENTRY_POINT;
+    
+    if(iListBoxItemArray)
+        {
+        delete iListBoxItemArray;
+        }
+    if(iMissedAlarmsArray.Count())
+        {
+        iMissedAlarmsArray.Reset();
+        iMissedAlarmsArray.Close();
+        }
+    if (iListBox)
+        {
+        delete iListBox;
+        iListBox = NULL;
+        }
+
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::ConstructImplL
+// Third phase constructor.
+// This function was called CCalenNativeView::ConstructL().
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::ConstructImplL()
+    {
+    TRACE_ENTRY_POINT;
+
+    iListBoxItemArray = new(ELeave) CDesCArrayFlat(KMissedAlarmListBoxItems);
+    
+    iMissedAlarmStore = iServices.MissedAlarmStore();
+    
+    // Get the missed alarms count
+    iMissedAlarmStore->CountL(iMissedAlarmsCount);
+    
+    iListBox = new( ELeave ) CAknDoubleGraphicStyleListBox;
+    iListBox->ConstructL( this, 0);
+    iListBox->SetContainerWindowL( *this);
+    
+    // Create scroll bar
+    iListBox->CreateScrollBarFrameL(ETrue);
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,
+            CEikScrollBarFrame::EAuto);
+    iListBox->SetListBoxObserver( this ); // single click changes MK
+    // set the model array
+    iListBox->Model()->SetItemTextArray(iListBoxItemArray);
+
+    // set icon array
+    CAknIconArray* iconArray = CreateIconsL( iIconIndices, KCalenMissedAlarmsViewUidValue ); 
+    CleanupStack::PushL(iconArray);
+    iListBox->ItemDrawer()->FormattedCellData()->SetIconArray(iconArray);
+    CleanupStack::Pop();
+
+    iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
+    iListBox->View()->SetListEmptyTextL( KNullDesC );
+    iFirstTap = EFalse;
+    
+    //Set toolbar visibility to false, bcoz this view is not using the ToolBar
+    MCalenToolbar* toolbar = iServices.ToolbarOrNull();
+    if(toolbar)
+        {
+        toolbar->SetToolbarVisibilityL(EFalse);  
+        }
+
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::UpdateSize
+// Do layout changes after calendar settings are
+// changed.  No necessary actions for this view.
+// ----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::UpdateSize()
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::IconIndexForEntryL
+// Gets the Icon Index for the missed alarm entry 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCalenMissedAlarmsContainer::IconIndexForEntryL(CCalEntry& aEntry, 
+                                                    TInt aSeenMissedAlarm)
+    {
+    TRACE_ENTRY_POINT;
+    TInt iconIndex(0);
+    
+    if(aSeenMissedAlarm)
+        {
+        switch(aEntry.EntryTypeL())
+            {
+            case CCalEntry::EAnniv:
+                iconIndex = IconIndex(MCalenServices::ECalenBirthdayIcon);
+                break;
+            case CCalEntry::EEvent:
+                iconIndex = IconIndex(MCalenServices::ECalenDaynoteIcon);
+                break;
+            case CCalEntry::EAppt:
+                iconIndex = IconIndex(MCalenServices::ECalenMeetingIcon);
+                break;
+            case CCalEntry::ETodo:
+                iconIndex = IconIndex(MCalenServices::ECalenTodoIconUndone);
+                break;
+            default:
+                ASSERT( EFalse );
+                break;
+            }
+        }
+    else
+        {
+        switch(aEntry.EntryTypeL())
+            {
+            case CCalEntry::EAnniv:
+                iconIndex = IconIndex(MCalenServices::ECalenBirthdayIconMissed);
+                break;
+            case CCalEntry::EEvent:
+                iconIndex = IconIndex(MCalenServices::ECalenDaynoteIconMissed);
+                break;
+            case CCalEntry::EAppt:
+                iconIndex = IconIndex(MCalenServices::ECalenMeetingIconMissed);
+                break;
+            case CCalEntry::ETodo:
+                iconIndex = IconIndex(MCalenServices::ECalenToDoIconMissed);
+                break;
+            default:
+                ASSERT( EFalse );
+                break;
+            }
+        }
+    return iconIndex;
+    TRACE_EXIT_POINT;    
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::CreateIconIndicesL
+// Fill the list of icons used by the MAV
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::CreateIconIndicesL(
+                               RArray<MCalenServices::TCalenIcons>& aIndexArray)
+    {
+    TRACE_ENTRY_POINT;
+    
+    aIndexArray.Reset();
+    aIndexArray.AppendL( MCalenServices::ECalenBirthdayIcon );
+    aIndexArray.AppendL( MCalenServices::ECalenDaynoteIcon );
+    aIndexArray.AppendL( MCalenServices::ECalenMeetingIcon );
+    aIndexArray.AppendL( MCalenServices::ECalenTodoIconUndone );
+    aIndexArray.AppendL( MCalenServices::ECalenBirthdayIconMissed );
+    aIndexArray.AppendL( MCalenServices::ECalenDaynoteIconMissed );
+    aIndexArray.AppendL( MCalenServices::ECalenMeetingIconMissed );
+    aIndexArray.AppendL( MCalenServices::ECalenToDoIconMissed );
+    aIndexArray.AppendL( MCalenServices::ECalenClearMissedAlarms );
+    aIndexArray.AppendL( MCalenServices::ECalenClearAllMissedAlarms )
+   
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::GetHelpContext
+// Get help context.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::GetHelpContext(TCoeHelpContext& aContext) const
+    {
+    TRACE_ENTRY_POINT;
+
+    aContext.iMajor = KUidCalendar;
+    aContext.iContext = KCALE_HLP_MONTH_VIEW; // need to change	
+
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::MopSupplyObject
+// Pass the skin information
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TTypeUid::Ptr CCalenMissedAlarmsContainer::MopSupplyObject(TTypeUid aId)
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+
+    return MAknsControlContext::SupplyMopObject(aId, iBgContext);
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::ListBox
+// Returns the listbox
+// -----------------------------------------------------------------------------
+//
+CAknDoubleGraphicStyleListBox* CCalenMissedAlarmsContainer::ListBox() const
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+
+    return iListBox;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::SizeChanged
+// Called by the framework when the view size is changed.
+// -----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::SizeChanged()
+    {
+    TRACE_ENTRY_POINT;
+    TRect main_pane( Rect() );
+    CCalenContainer::SizeChanged( main_pane );
+    
+    if(iListBox)
+        {
+        iListBox->SetRect( main_pane );
+        }
+    
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::CountComponentControls
+// Gets the number of controls contained in a compound control.
+// -----------------------------------------------------------------------------
+//
+TInt CCalenMissedAlarmsContainer::CountComponentControls() const
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+
+    return 1;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::ComponentControl
+// Gets the specified component of a compound control.
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CCalenMissedAlarmsContainer::ComponentControl(TInt aIndex) const
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    switch (aIndex)
+        {
+        case 0:
+            return iListBox;
+        default:
+            return NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::OfferKeyEventL
+// Called by the framework when a key event needs to be processed. 
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CCalenMissedAlarmsContainer::OfferKeyEventL(
+        const TKeyEvent& aKeyEvent, TEventCode aType)
+    {
+    TRACE_ENTRY_POINT;
+
+    TKeyResponse ret(EKeyWasNotConsumed);
+
+    if (EEventKey == aType)
+        {
+        switch (aKeyEvent.iCode)
+            {
+            case EKeyBackspace:
+            case EKeyDelete:
+                {
+                iView->HandleCommandL(ECalenCmdClear);
+                ret = EKeyWasConsumed;
+                }
+                break;
+            default:
+                break;
+            }
+        }
+    
+    if(ret == EKeyWasNotConsumed)
+        {
+        TInt oldCursor = iListBox->View()->CurrentItemIndex();
+        ret = iListBox->OfferKeyEventL(aKeyEvent, aType);
+        TInt newCursor = iListBox->View()->CurrentItemIndex();
+        if(oldCursor != newCursor)
+            {
+            iHighlightedRowNumber = newCursor;
+            SetContextFromMissedAlarmEntryL(newCursor);
+            }
+        }
+    TRACE_EXIT_POINT;
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::HandleResourceChange
+// Handles a change to the application's resources which are shared across the environment. 
+// -----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::HandleResourceChange(TInt aType)
+    {
+    TRACE_ENTRY_POINT;
+    
+    CCalenContainer::HandleResourceChange( aType );
+
+    if ( aType == KAknsMessageSkinChange || aType == KEikDynamicLayoutVariantSwitch )
+        {
+        SizeChanged();
+	      /*TRect main_pane;
+	      AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, main_pane );
+	      SetRect( main_pane );
+	      if(iListBox)
+	        {
+	        TRect mainPane;
+	        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPane );
+	        TRect bgContextRect( TPoint(0, 0), mainPane.Size() );
+	        iListBox->SetRect( bgContextRect );
+	        }*/
+
+        // refresh
+        TRAPD(error,iView->BeginRepopulationL());
+        if(error!=KErrNone)
+            {
+            // do avoid warning
+            }         
+        }
+    
+    CCoeControl::HandleResourceChange( aType );
+
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::Draw
+// Draws the control
+// -----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::Draw(const TRect& aRect) const
+    {
+    TRACE_ENTRY_POINT;
+
+    CWindowGc& gc = SystemGc();
+    TRect main_pane( Rect() );
+    
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    MAknsControlContext* cc = AknsDrawUtils::ControlContext(this);
+
+    AknsDrawUtils::Background(skin, cc, this, gc, aRect);
+    
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::HandlePointerEventL
+// Handles the pointer events in touch resolutions
+// -----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::HandlePointerEventL(
+        const TPointerEvent& aPointerEvent)
+    {
+    TRACE_ENTRY_POINT;
+    
+    TInt pointerIndex(-1);
+    TBool isItem (iListBox->View()->XYPosToItemIndex(aPointerEvent.iPosition, pointerIndex));
+
+    if(isItem == EFalse)
+        {
+        iListBox->HandlePointerEventL(aPointerEvent);
+        return;
+        }
+    
+    TInt index = iListBox->CurrentItemIndex();
+
+    switch (aPointerEvent.iType)
+        {
+        case TPointerEvent::EButton1Down:
+            {
+            TBool isItem (iListBox->View()->XYPosToItemIndex(aPointerEvent.iPosition, pointerIndex));
+            
+            if(isItem && MissedAlarmsCount() > 0)
+                {
+                iHighlightedRowNumber = iListBox->View()->CurrentItemIndex(); 
+                SetContextFromMissedAlarmEntryL(iListBox->View()->CurrentItemIndex());
+                }
+            
+            break;
+            }
+        case TPointerEvent::EDrag:
+            {
+            /*iListBox->HandlePointerEventL(aPointerEvent);
+            if (iFirstTap && index != iListBox->CurrentItemIndex())
+                {
+                iFirstTap = EFalse;
+                }*/
+            break;
+            }
+
+        case TPointerEvent::EButton1Up:
+            {
+           // if (iFirstTap)
+                {
+               // iView->HandleCommandL(ECalenMissedEventView);
+                }
+            break;
+            }
+        default:
+            break;
+        }
+
+   if ( aPointerEvent.iType != TPointerEvent::EButtonRepeat )
+        {
+        iListBox->HandlePointerEventL( aPointerEvent );
+        }
+  
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::HandleNaviDecoratorEventL
+// ?implementation_description
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::HandleNaviDecoratorEventL( TInt /*aEventID*/ )
+    {
+    TRACE_ENTRY_POINT;
+    
+    TRACE_EXIT_POINT;   
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::HandleLongTapEventL
+// processing of a long tap event
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::HandleLongTapEventL( const TPoint& /*aPenEventLocation*/,
+                                              const TPoint& /*aPenEventScreenLocation*/ )
+    {
+    TRACE_ENTRY_POINT;
+
+    TRACE_EXIT_POINT;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::CurrentItemIndex
+// Returns the current/highlighted listbox index
+// -----------------------------------------------------------------------------
+//
+TInt CCalenMissedAlarmsContainer::CurrentItemIndex()
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    
+    return iListBox->CurrentItemIndex();
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::SetEmptyListTextL
+// Sets the empty list box text (no events)
+// -----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::SetEmptyListTextL()
+    {
+    TRACE_ENTRY_POINT;
+
+    HBufC* noEvents = StringLoader::LoadLC(R_CALEN_QTN_CALE_NO_EVENTS);
+    iListBox->View()->SetListEmptyTextL(noEvents->Des());
+    CleanupStack::PopAndDestroy(noEvents);
+
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::MissedAlarmsCount
+// Returns the missed alarms count.
+// -----------------------------------------------------------------------------
+//
+TInt CCalenMissedAlarmsContainer::MissedAlarmsCount()
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    
+    return iMissedAlarmsArray.Count();
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::SetHighlightingL
+// Sets the highlighting
+// ----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::SetHighlightingL()
+    {
+    TRACE_ENTRY_POINT;
+
+    TInt focusIx = KErrNotFound;
+
+    if ( iHighlightedRowNumber != KErrNotFound )
+        {
+        focusIx = iHighlightedRowNumber;
+        }
+    else
+        {
+        MCalenContext& context = iServices.Context();
+        if ( !(context.InstanceId() == TCalenInstanceId::NullInstanceId()) )
+            {
+            iHighlightedRowNumber = focusIx = FindMissedAlarmEntryIndexL(context.InstanceId());
+            }
+        }
+
+    // If everything else fails, focus on first item
+    if ( focusIx == KErrNotFound )
+        {
+        focusIx = 0;
+        }
+
+    // Set iHighlightedRowNumber as the current focus
+    SetCurrentItemIndex( focusIx );
+    // Draw listbox with this new iHighlightedRowNumber value.
+    // otherwise we won't get updated focus
+    SetCurrentItemIndexAndDraw();
+
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenTodoContainer::SetCurrentItemIndex
+// Set current item index.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::SetCurrentItemIndex(TInt aIndex)
+    {
+    TRACE_ENTRY_POINT;
+
+    TInt count(iMissedAlarmsArray.Count());
+    if( aIndex < count )
+        {
+        iHighlightedRowNumber = aIndex;
+        }
+    else
+        {
+        iHighlightedRowNumber = count-1;
+        }
+
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::SetCurrentItemIndexAndDraw
+// Set current item index and draw list.
+// ----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::SetCurrentItemIndexAndDraw()
+    {
+    TRACE_ENTRY_POINT;
+
+    if( iHighlightedRowNumber != KErrNotFound &&
+        iHighlightedRowNumber < iListBox->Model()->NumberOfItems() )
+        {
+        iListBox->SetCurrentItemIndexAndDraw( iHighlightedRowNumber );
+        }
+
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::UpdateMissedAlarmsArray
+// Update Missed Alarms Array
+// -----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::UpdateMissedAlarmsArrayL()
+    {
+    TRACE_ENTRY_POINT;
+    
+    if(iMissedAlarmsArray.Count())
+        {
+        iMissedAlarmsArray.Reset();
+        }
+    
+    // get missed alarms list from services
+    iServices.GetMissedAlarmsList(iMissedAlarmsArray);
+    
+    // Get the missed alarms count
+    iMissedAlarmStore->CountL(iMissedAlarmsCount);
+    
+    TRACE_EXIT_POINT;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::PopulateWithMissedAlarmsL
+// Populate Missed alarms view
+// ----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::PopulateWithMissedAlarmsL()
+    {
+    TRACE_ENTRY_POINT;
+    
+    // resets list box item array
+    if(iListBoxItemArray)
+        {
+        delete iListBoxItemArray;
+        iListBoxItemArray = NULL;   
+        }
+
+    iListBoxItemArray = new(ELeave) CDesCArrayFlat(KMissedAlarmListBoxItems);
+    
+    if(iMissedAlarmsArray.Count())
+        {
+        for(TInt index = 0;index < iMissedAlarmsArray.Count(); index++ )
+            {
+            CreateListBoxDataL(index);
+            }
+        iListBox->Model()->SetItemTextArray(iListBoxItemArray);
+        
+        if(!iHighlightedRowNumber || iHighlightedRowNumber == KErrNotFound )
+            {
+            //set first missed alarm entry to the context
+            SetContextFromMissedAlarmEntryL(0);
+            }
+       iListBox->HandleItemAdditionL(); 
+       }
+    else
+       {
+       iListBox->Model()->SetItemTextArray(iListBoxItemArray);
+       SetEmptyListTextL();
+       }
+  
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::CreateListBoxDataL
+// Creates the list box items and appends in to listrbox item array  
+// -----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::CreateListBoxDataL(TInt aIndex)
+    {
+    TRACE_ENTRY_POINT;
+    
+    // temporary buffer
+    HBufC* buffer = HBufC::NewLC( KListDataLength );
+    CleanupStack::Pop(buffer);
+    
+    // initialise the item to construct a new listbox entry
+    buffer->Des().Zero();
+    
+    // double graphic style "0\tText\tText2\t1
+    TPtr ptr( buffer->Des() );
+    
+    CCalEntry* entry = NULL;
+    TTime instanceTime;
+    TInt isEventViewed;
+    
+    // Get the missed alarm  entry
+    entry = GetMissedAlarmEntryL(aIndex);
+    
+    // Get the instance time
+    instanceTime = GetInstanceTime(aIndex);
+    
+    // Get the viewed event info
+    isEventViewed = GetViewedEventInfo(aIndex);
+    
+    if(entry)
+        {
+        // get the icon from the entry
+        TBuf<10> icon;
+        TInt iconIndex(0);
+        iconIndex =IconIndexForEntryL( *entry , isEventViewed);
+        icon.Format(KIconFormat,iconIndex);
+        
+        ptr.Append(icon);
+        ptr.Append(KListSeparator);
+    
+        // get the subject from the entry
+        // Set summary
+        // Create temporary buffer for summary 
+       
+        HBufC* summary = HBufC::NewLC( KMissedAlarmListMaxLength );
+        TPtr summaryPtr = summary->Des();
+        TInt maxLength = summary->Length()- KMissedAlarmListMaxLength;
+        CalenViewUtils::GetSummaryLocationTextL( *entry, summaryPtr, KMissedAlarmListMaxLength );
+        
+        AknBidiTextUtils::ConvertToVisualAndClipL( summaryPtr,
+                *iEikonEnv->NormalFont(),
+                KListDataLength,
+                KListDataLength );
+        ptr.Append(summary->Des());
+        ptr.Append(KListSeparator);
+            
+        CleanupStack::PopAndDestroy( summary );
+        
+        // get the start time and date
+        // for timed display both start time and date
+        // append start time of the instance 
+        TBuf<10> timeString;    
+        
+        if(entry->EntryTypeL() == CCalEntry::EAppt )
+            {
+            HBufC* timeFormat = StringLoader::LoadLC(R_QTN_TIME_USUAL_WITH_ZERO);
+            instanceTime.FormatL(timeString, *timeFormat);  
+            // convert the date numbers into Arabic-Indic numbers
+            AknTextUtils::DisplayTextLanguageSpecificNumberConversion( timeString );
+            CleanupStack::PopAndDestroy(timeFormat);
+            }
+                
+        //append date
+        TBuf<20> dateString;    
+        HBufC* dateFormat = StringLoader::LoadLC(R_QTN_DATE_USUAL_WITH_ZERO);
+        instanceTime.FormatL(dateString, *dateFormat);  
+        AknTextUtils::DisplayTextLanguageSpecificNumberConversion( dateString );
+        CleanupStack::PopAndDestroy(dateFormat);
+                
+        CDesCArrayFlat* strings = new (ELeave) CDesCArrayFlat(2);
+        CleanupStack::PushL( strings );
+                
+        strings->AppendL(timeString);
+        strings->AppendL(dateString);   
+                
+        HBufC* timeDateFormat = StringLoader::LoadL(R_CALE_MAV_START_TIME,*strings);
+        CleanupStack::PushL( timeDateFormat );
+        ptr.Append(timeDateFormat->Des());
+        CleanupStack::PopAndDestroy(timeDateFormat);    
+        CleanupStack::PopAndDestroy(strings);// strings
+        
+        CleanupStack::PopAndDestroy(entry);
+        
+        ptr.Append( KListSeparator );
+             
+        iListBoxItemArray->AppendL(ptr);
+        }
+        
+    delete buffer;
+        
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::GetMissedAlarmEntryL
+// Get a Missed Alarm entry based on the index
+// -----------------------------------------------------------------------------
+//
+CCalEntry* CCalenMissedAlarmsContainer::GetMissedAlarmEntryL(TInt aIndex) const
+    {
+    TRACE_ENTRY_POINT;
+    
+    TInt localUid;
+    TTime instanceTime;
+    TCalenInstanceId missedAlarm = iMissedAlarmsArray[aIndex];
+    
+    // get the local uid and instancetime
+    localUid = missedAlarm.iEntryLocalUid;
+    instanceTime = missedAlarm.iInstanceTime;
+        
+    CCalEntry* entry=NULL;
+    // Get the entry using the localUid 
+    TRAP_IGNORE(entry=iServices.EntryViewL(missedAlarm.iColId)->FetchL(localUid));
+     
+    CleanupStack::PushL(entry);
+    
+    TRACE_EXIT_POINT;
+    return entry;   
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::GetInstanceTime
+// Get the instance time
+// -----------------------------------------------------------------------------
+//
+TTime CCalenMissedAlarmsContainer::GetInstanceTime(TInt aIndex) const
+    {
+    TRACE_ENTRY_POINT;
+
+    TCalenInstanceId missedAlarm = iMissedAlarmsArray[aIndex];
+  
+    TRACE_EXIT_POINT;
+    return missedAlarm.iInstanceTime;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::GetViewedEventInfo
+// Get the viewed event information
+// -----------------------------------------------------------------------------
+//
+TInt CCalenMissedAlarmsContainer::GetViewedEventInfo(TInt aIndex)
+    {
+    TRACE_ENTRY_POINT;
+    
+    TCalenInstanceId missedAlarm= iMissedAlarmsArray[aIndex];
+      
+    TRACE_EXIT_POINT;
+    return missedAlarm.iInstanceViewed;
+    }
+
+// ----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::CompletePopulationL
+// Complete population
+// ----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::CompletePopulationL()
+    {
+    TRACE_ENTRY_POINT;
+
+    AddToStackAndMakeVisibleL();
+    SetHighlightingL();
+    DrawDeferred();
+
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::SetContextFromMissedAlarmEntryL
+// Sets the context from the current focused missed alarm entry
+// -----------------------------------------------------------------------------
+//
+void CCalenMissedAlarmsContainer::SetContextFromMissedAlarmEntryL(TInt aIndex)
+    {
+    TRACE_ENTRY_POINT;
+    
+    TCalenInstanceId missedAlarm = iMissedAlarmsArray[aIndex];
+            
+    CCalEntry* entry = iServices.EntryViewL(missedAlarm.iColId)->FetchL( missedAlarm.iEntryLocalUid );
+    //User::LeaveIfNull( entry );
+    if (entry)
+    	{
+    CleanupStack::PushL( entry );
+    
+    TTime instanceTime;
+    TCalTime inscaltime;
+    
+    instanceTime = CalenAgendaUtils::EntryTimeL( *entry );
+    inscaltime.SetTimeLocalL( instanceTime );
+    
+    // set the context
+    MCalenContext &context = iServices.Context();
+    TCalenInstanceId id = TCalenInstanceId::CreateL( *entry, inscaltime );
+    id.iColId = missedAlarm.iColId;
+    context.SetInstanceIdL( id, context.ViewId() ); 
+    
+    CleanupStack::PopAndDestroy( entry );
+    }
+    
+    TRACE_EXIT_POINT;
+    }
+
+// -----------------------------------------------------------------------------
+// CCalenMissedAlarmsContainer::FindMissedAlarmEntryIndexL
+// Find missed alarm entry's index
+// -----------------------------------------------------------------------------
+//
+TInt CCalenMissedAlarmsContainer::FindMissedAlarmEntryIndexL(
+                                                    const TCalenInstanceId& aId)
+    {
+    TRACE_ENTRY_POINT;
+
+    for(TInt index(0); index < iMissedAlarmsArray.Count(); ++index)
+        {
+        if( iMissedAlarmsArray[index].iEntryLocalUid == aId.iEntryLocalUid )
+            {
+            TRACE_EXIT_POINT;
+            return index;
+            }
+        }
+
+    TRACE_EXIT_POINT;
+    return KErrNotFound;
+    }
+
+
+void CCalenMissedAlarmsContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/, 
+                                                      TListBoxEvent aEventType)
+    {
+    TRACE_ENTRY_POINT;
+    switch( aEventType )
+        {
+        // Single click integration
+        case EEventItemSingleClicked:
+            {
+             iHighlightedRowNumber = iListBox->View()->CurrentItemIndex();
+            
+              SetContextFromMissedAlarmEntryL(iListBox->View()->CurrentItemIndex());
+            //Handle listbox item selection event
+           // iListBox->HandlePointerEventL(aPointerEvent);
+            if(iView->MenuBar()->IsDisplayed() == EFalse)
+                {
+                iView->HandleCommandL( ECalenMissedEventView );
+                }
+            break;
+            }
+            
+        // Single click integration
+        case EEventEnterKeyPressed:
+            {
+            iHighlightedRowNumber = iListBox->View()->CurrentItemIndex();
+            
+              SetContextFromMissedAlarmEntryL(iListBox->View()->CurrentItemIndex());
+            iView->HandleCommandL( ECalenMissedEventView );
+            break;
+            }
+        default:
+            break;
+        };
+    TRACE_EXIT_POINT;
+    }
+
+
+
+// End of File