calendarui/views/src/calenicondrawer.cpp
changeset 0 f979ecb2b13e
child 15 9711e452b5e9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/src/calenicondrawer.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,375 @@
+/*
+* 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 <calenservices.h>
+
+// System includes
+#include <fbs.h>
+#include <eikapp.h>
+
+// Layout includes
+#include <aknlayoutscalable_apps.cdl.h>
+
+#include <AknsConstants.h>
+#include <AknsUtils.h>
+#include <gulicon.h>
+#include <avkon.mbg>
+#include <gdi.h>
+#include <fbs.h>
+
+#include <AknIconArray.h>
+
+// ============================ 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(TInt aNumOfLinesBefLocField)
+    {
+    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();
+    
+    // Adjust the map icon size
+    if(isMapIconAdded)
+        {
+        TInt mapIconIndex = IconIndex(MCalenServices::ECalenMapIcon);
+        TAknLayoutRect field_cale_ev2_pane;
+        field_cale_ev2_pane.LayoutRect(list_cale_ev2_pane.Rect(), AknLayoutScalable_Apps::field_cale_ev2_pane(aNumOfLinesBefLocField, 0, 0).LayoutLine() );
+            
+        icon_layout_rect.LayoutRect( field_cale_ev2_pane.Rect(), AknLayoutScalable_Apps::field_cale_ev2_pane_g4(0).LayoutLine() );
+        SetMapIconSize(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::SetMapIconSize
+// Fuction to set map icon size
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCalenIconDrawer::SetMapIconSize(TRect aIconRect)
+	{
+	TRACE_ENTRY_POINT;
+
+	if(iIconIndices[iFirstIconIndex] == MCalenServices::ECalenMapIcon)
+		{
+		iFirstIconRect = aIconRect;
+		iFirstIconRect.iBr.iX = iFirstIconRect.iTl.iX + 30;
+		iFirstIconRect.iBr.iY = iFirstIconRect.iTl.iY + 30;	
+		}
+	else if(iIconIndices[iSecondIconIndex] == MCalenServices::ECalenMapIcon)
+		{
+		iSecondIconRect = aIconRect;
+		iSecondIconRect.iBr.iX = iSecondIconRect.iTl.iX + 30;
+		iSecondIconRect.iBr.iY = iSecondIconRect.iTl.iY + 30;	
+		}
+	else if(iIconIndices[iThirdIconIndex] == MCalenServices::ECalenMapIcon)
+		{
+		iThirdIconRect = aIconRect;
+		iThirdIconRect.iBr.iX = iThirdIconRect.iTl.iX + 30;
+		iThirdIconRect.iBr.iY = iThirdIconRect.iTl.iY + 30;	
+		}
+		
+	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<MCalenServices::TCalenIcons>& 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; i<iconCount; ++i )
+        {
+        icons->AppendL( iServices.GetIconL( static_cast<MCalenServices::TCalenIcons>(aIndexArray[i] ) ));
+        }
+    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