diff -r 12af337248b1 -r bd7edf625bdd calendarui/views/src/calenicondrawer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calendarui/views/src/calenicondrawer.cpp Wed Sep 01 12:32:31 2010 +0100 @@ -0,0 +1,335 @@ +/* +* 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: Draws recurrence/alarm icons +* +*/ + + + +//debug +#include "calendarui_debug.h" + +// User includes +#include "calenicondrawer.h" + +#include +#include + +// System includes +#include +#include + +// Layout includes +#include + +#include +#include +#include +#include +#include +#include + +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCalenIconDrawer::NewL +// Two-phased constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalenIconDrawer* CCalenIconDrawer::NewL( MCalenServices& aServices ) + { + TRACE_ENTRY_POINT; + + CCalenIconDrawer* self = new (ELeave) CCalenIconDrawer( aServices ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + TRACE_EXIT_POINT; + return self; + } + +// --------------------------------------------------------------------------- +// CCalenIconDrawer::ConstructL +// Second phase construction. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CCalenIconDrawer::ConstructL() + { + TRACE_ENTRY_POINT; + + // Create icons used by the viewer + iIconIndices.AppendL( MCalenServices::ECalenAlarmIcon ); + iIconIndices.AppendL( MCalenServices::ECalenRepeatIcon ); + iIconIndices.AppendL( MCalenServices::ECalenRepeatExceptionIcon ); + iIconIndices.AppendL( MCalenServices::ECalenNotePriorityLow ); + iIconIndices.AppendL( MCalenServices::ECalenNotePriorityHigh ); + iIconIndices.AppendL( MCalenServices::ECalenMapIcon ); + + iIconArray = CreateIconsL( iIconIndices ); + isMapIconAdded = EFalse; + //SetIconSizesFromLayout(); + + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// CCalenIconDrawer::SetIconSizesFromLayout +// Calculate icon size from layout +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CCalenIconDrawer::SetIconSizesFromLayout() + { + TRACE_ENTRY_POINT; + + TSize main_pane_size; + AknLayoutUtils::LayoutMetricsSize (AknLayoutUtils::EMainPane, main_pane_size); + TRect main_pane(main_pane_size); + + TAknLayoutRect main_cale_event_viewer_pane; + main_cale_event_viewer_pane.LayoutRect(main_pane, AknLayoutScalable_Apps::main_cale_event_viewer_pane().LayoutLine() ); + + TAknLayoutRect listscroll_cale_event_viewer_pane; + listscroll_cale_event_viewer_pane.LayoutRect(main_cale_event_viewer_pane.Rect(), AknLayoutScalable_Apps::listscroll_cale_event_viewer_pane().LayoutLine() ); + + TAknLayoutRect list_cale_ev2_pane; + list_cale_ev2_pane.LayoutRect(listscroll_cale_event_viewer_pane.Rect(), AknLayoutScalable_Apps::list_cale_ev2_pane().LayoutLine() ); + + TAknLayoutRect icon_layout_rect; + icon_layout_rect.LayoutRect( list_cale_ev2_pane.Rect(), AknLayoutScalable_Apps::field_cale_ev2_pane_g1(1).LayoutLine() ); + iFirstIconRect = icon_layout_rect.Rect(); + + icon_layout_rect.LayoutRect( list_cale_ev2_pane.Rect(), AknLayoutScalable_Apps::field_cale_ev2_pane_g2(1).LayoutLine() ); + iSecondIconRect = icon_layout_rect.Rect(); + + icon_layout_rect.LayoutRect( list_cale_ev2_pane.Rect(), AknLayoutScalable_Apps::field_cale_ev2_pane_g3(2).LayoutLine() ); + iThirdIconRect = icon_layout_rect.Rect(); + + AknIconUtils::SetSize( iIconArray->At(iFirstIconIndex)->Bitmap(), iFirstIconRect.Size() ); + AknIconUtils::SetSize( iIconArray->At(iSecondIconIndex)->Bitmap(), iSecondIconRect.Size() ); + AknIconUtils::SetSize( iIconArray->At(iThirdIconIndex)->Bitmap(), iThirdIconRect.Size() ); + + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------------------------- +// CCalenIconDrawer::CCalenIconDrawer +// C++ constructor can NOT contain any code, that might leave. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +CCalenIconDrawer::CCalenIconDrawer( MCalenServices& aServices ) + : iServices( aServices ) + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenIconDrawer::~CCalenIconDrawer +// Destructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalenIconDrawer::~CCalenIconDrawer() + { + TRACE_ENTRY_POINT; + + delete iIconArray; + iIconIndices.Close(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenIconDrawer::Draw +// Draw icon function +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenIconDrawer::Draw(CGraphicsContext& aGc, const TPoint& /*aTopLeft*/, + const TRect& /*aClipRect*/, MGraphicsDeviceMap* /*aMap*/) const + { + TRACE_ENTRY_POINT; + + aGc.Reset(); + switch (iIconCount) + { + case EThreeIcons: + aGc.DrawBitmapMasked(iThirdIconRect, iIconArray->At(iThirdIconIndex)->Bitmap(), iThirdIconRect.Size(), iIconArray->At(iThirdIconIndex)->Mask(), ETrue); + //lint -fallthrough + case ETwoIcons: /* fall through... */ + aGc.DrawBitmapMasked(iSecondIconRect, iIconArray->At(iSecondIconIndex)->Bitmap(), iSecondIconRect.Size(), iIconArray->At(iSecondIconIndex)->Mask(), ETrue); + //lint -fallthrough + case EOneIcon: /* fall through... */ + aGc.DrawBitmapMasked(iFirstIconRect, iIconArray->At(iFirstIconIndex)->Bitmap(), iFirstIconRect.Size(), iIconArray->At(iFirstIconIndex)->Mask(), ETrue); + //lint -fallthrough + case ENoIcons: /* fall through... */ + default: + break; + } + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenIconDrawer::ExternalizeL +// Pure virtual from CPicture, intentionally empty. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenIconDrawer::ExternalizeL(RWriteStream& /*aStream*/) const + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenIconDrawer::GetOriginalSizeInTwips +// Convert size to twips +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenIconDrawer::GetOriginalSizeInTwips( TSize& /*aSize*/ ) const + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenIconDrawer::HandleResourceChange +// Handle resource change. e.g. screen resolution change +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenIconDrawer::HandleResourceChange() + { + TRACE_ENTRY_POINT; + + SetIconSizesFromLayout(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenIconDrawer::AddIconL +// Store icon index for reserved icon position +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenIconDrawer::AddIconL( MCalenServices::TCalenIcons aIconIndex) + { + TRACE_ENTRY_POINT; + if(aIconIndex == MCalenServices::ECalenMapIcon) + { + isMapIconAdded = ETrue; + } + switch (iIconCount) + { + case ENoIcons: + iFirstIconIndex = IconIndex( aIconIndex ); + User::LeaveIfError( iFirstIconIndex == KErrNotFound ); + iIconCount = EOneIcon; + break; + + case EOneIcon: + iSecondIconIndex = IconIndex( aIconIndex ); + User::LeaveIfError( iSecondIconIndex == KErrNotFound ); + iIconCount = ETwoIcons; + break; + + case ETwoIcons: + iThirdIconIndex = IconIndex( aIconIndex ); + User::LeaveIfError( iThirdIconIndex == KErrNotFound ); + iIconCount = EThreeIcons; + break; + + case EThreeIcons: + /* fall through... */ + User::Leave(KErrNotSupported); + break; + } + + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------- +// CCalenIconDrawer::WidthInPixels +// Count width of all icons in pixel +// (other items were commented in a header). +// --------------------------------------------------------- +// +TInt CCalenIconDrawer::WidthInPixels() + { + TRACE_ENTRY_POINT; + + TInt widthInPixels = 0; + if (iIconCount) + { + // All icons are the same size + widthInPixels = iIconCount * iFirstIconRect.Size().iWidth; + } + + TRACE_EXIT_POINT; + return widthInPixels; + } + +// ---------------------------------------------------------------------------- +// CCalenIconDrawer::CreateIconsL +// Create array of icons according to icon indices array given +// (other items were commented in a header). +// ---------------------------------------------------------------------------- +// +CAknIconArray* CCalenIconDrawer::CreateIconsL( const RArray& aIndexArray ) + { + TRACE_ENTRY_POINT; + + const TInt iconCount( aIndexArray.Count() ); + CAknIconArray* icons = new(ELeave) CAknIconArray( iconCount ); + CleanupStack::PushL( icons ); + icons->SetReserveL( iconCount ); + + for( TInt i=0; iAppendL( iServices.GetIconL( static_cast(aIndexArray[i] ), KCalenMissedEventViewUidValue )); + } + CleanupStack::Pop( icons ); + + TRACE_EXIT_POINT; + return icons; + } + +// ---------------------------------------------------------------------------- +// CCalenContainer::IconIndex +// Get icon index of the icon array +// (other items were commented in a header). +// ---------------------------------------------------------------------------- +// +TInt CCalenIconDrawer::IconIndex( MCalenServices::TCalenIcons aType ) const + { + TRACE_ENTRY_POINT; + + TInt index( iIconIndices.Find( aType ) ); + // User::LeaveIfError( index == KErrNotFound ); + + TRACE_EXIT_POINT; + return index; + } + +// End of File