diff -r d189ee25cf9d -r 3533d4323edc emailuis/emailui/src/FreestyleEmailUiLayoutHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailuis/emailui/src/FreestyleEmailUiLayoutHandler.cpp Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,1592 @@ +/* +* Copyright (c) 2007 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: FreestyleEmailUi layout data handler implementation +* +*/ + + +// SYSTEM INCLUDE FILES +#include "emailtrace.h" +#include +#include +#include +#include + +#include +#include +#include +#include + +// For generic treelist layout data setting +#include "fstreelist.h" + +// INTERNAL INCLUDE FILES +#include "FreestyleEmailUiLayoutHandler.h" +#include "FreestyleEmailUiLayoutData.h" + +const TInt KPopupMargin = 8; + +// ----------------------------------------------------------------------------- +// GeneralHash +// ----------------------------------------------------------------------------- +// +template< typename T > +TUint32 GeneralHash( const T& aValue ) + { + return DefaultHash::Des8( TPckgC< T >( aValue ) ); + } + +// ----------------------------------------------------------------------------- +// GeneralPtrIdentity +// ----------------------------------------------------------------------------- +// +template< typename T > +TBool GeneralPtrIdentity( const T& aP1, const T& aP2 ) + { + return TPckgC< T >( aP1 ) == TPckgC< T >( aP2 ); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::CFSEmailUiLayoutHandler +// Base construction. May not leave. +// ----------------------------------------------------------------------------- +// +CFSEmailUiLayoutHandler::CFSEmailUiLayoutHandler( CAlfEnv& aEnv ) + : iEnv(aEnv), + iTextStyleMap( THashFunction32< TAknTextComponentLayout >( GeneralHash ), + TIdentityRelation< TAknTextComponentLayout >( GeneralPtrIdentity< TAknTextComponentLayout > ) ) + { + FUNC_LOG; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::NewL +// First phase construction function. +// ----------------------------------------------------------------------------- +// +CFSEmailUiLayoutHandler* CFSEmailUiLayoutHandler::NewL( CAlfEnv& aEnv ) + { + FUNC_LOG; + CFSEmailUiLayoutHandler* self = new ( ELeave ) CFSEmailUiLayoutHandler( aEnv ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ConstructL +// Symbian second phase construction. May leave. +// ----------------------------------------------------------------------------- +// +void CFSEmailUiLayoutHandler::ConstructL() + { + FUNC_LOG; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::~CFSEmailUiLayoutHandler +// D'tor +// ----------------------------------------------------------------------------- +// +CFSEmailUiLayoutHandler::~CFSEmailUiLayoutHandler() + { + FUNC_LOG; + DeleteTextStyles(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ScreenOrientation +// Function can be used to fetch orientation of the current screen resolution +// ----------------------------------------------------------------------------- +// +TScreenOrientation CFSEmailUiLayoutHandler::ScreenOrientation() const + { + FUNC_LOG; + return Layout_Meta_Data::IsLandscapeOrientation() ? ELandscape : EPortrait; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GridRowsInThisResolution +// ----------------------------------------------------------------------------- +// +TInt CFSEmailUiLayoutHandler::GridRowsInThisResolution() const + { + FUNC_LOG; + const TInt var( Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0 ); + return AknLayoutScalable_Apps::cell_cmail_l_pane_ParamLimits( var ).LastRow() + 1; + } + + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GridColumnsInThisResolution +// ----------------------------------------------------------------------------- +// +TInt CFSEmailUiLayoutHandler::GridColumnsInThisResolution() const + { + FUNC_LOG; + const TInt var( Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0 ); + return AknLayoutScalable_Apps::cell_cmail_l_pane_ParamLimits( var ).LastColumn() + 1; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GridIconSize +// ----------------------------------------------------------------------------- +// +TRgb CFSEmailUiLayoutHandler::GridNormalStateTextSkinColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb textColor; + // Should use EAknsCIFsTextColorsCG3 if background is white + if ( AknsUtils::GetCachedColor( skin, textColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone ) + { + textColor = KRgbBlack; + } + return textColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GridIconSize +// ----------------------------------------------------------------------------- +// +TSize CFSEmailUiLayoutHandler::GridIconSize() const + { + FUNC_LOG; +// Use layout data instead of hard-coded values + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + + TAknLayoutRect scrollBarRect; + scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::aid_size_touch_scroll_bar()); + TRect gridRect = mainPaneRect; + gridRect.iBr.iX -= scrollBarRect.Rect().Width(); + + TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; + TAknLayoutRect itemRect; + itemRect.LayoutRect(gridRect, AknLayoutScalable_Apps::cell_cmail_l_pane(var,0,0)); + + TAknLayoutRect gridIconLRect; + gridIconLRect.LayoutRect( itemRect.Rect(), AknLayoutScalable_Apps::cell_cmail_l_pane_g1( 0 ) ); + TSize iconSize = gridIconLRect.Rect().Size(); + return iconSize; + } + + +TSize CFSEmailUiLayoutHandler::MailIconSizeInThisResolution() const + { + FUNC_LOG; + TAknLayoutRect rect; + rect.LayoutRect( TRect( 0, 0, 0, 0 ), + AknLayoutScalable_Apps::list_single_dyc_row_pane_g1( 0 ).LayoutLine() ); + return rect.Rect().Size(); + } + + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::SetListMarqueeBehaviour +// Function sets FS Email UI default values for marquee behavioutr for treelist object +// ----------------------------------------------------------------------------- +// +void CFSEmailUiLayoutHandler::SetListMarqueeBehaviour( CFsTreeList* aTreeList ) const + { + FUNC_LOG; + if ( aTreeList ) // Safety check + { + aTreeList->SetTextMarqueeType( KListTextMarqueeType ); + aTreeList->SetTextMarqueeSpeed ( KListTextMarqueeSpeed ); + aTreeList->SetTextMarqueeStartDelay ( KListTextMarqueeStartDelay ); + aTreeList->SetTextMarqueeRepetitions ( KListTextMarqueeSpeedRepeats ); + } + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::FolderListIconSizeInThisResolution +// Folder list icon size, calculated based on the item size +// ----------------------------------------------------------------------------- +// +TSize CFSEmailUiLayoutHandler::FolderListIconSize( const TBool aPopup ) const + { + FUNC_LOG; + if ( aPopup ) + { + TAknWindowComponentLayout g1Layout( TAknWindowComponentLayout::Compose( + AknLayoutScalable_Apps::list_single_dyc_row_pane( 0 ), + AknLayoutScalable_Apps::list_single_dyc_row_pane_g1( 0 ) ) ); + TAknLayoutRect paneG1; + paneG1.LayoutRect( DropDownMenuListRect( ELeft, EFalse ), g1Layout.LayoutLine() ); + return paneG1.Rect().Size(); + } + else + { + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + + TAknLayoutRect scrollBarRect; + scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::scroll_pane()); + TRect gridRect = mainPaneRect; + gridRect.iBr.iX -= scrollBarRect.Rect().Width(); + + TAknLayoutRect itemRect; + itemRect.LayoutRect( gridRect, AknLayoutScalable_Avkon::list_single_large_graphic_pane_g1( 0 ).LayoutLine() ); + + return itemRect.Rect().Size(); + } + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::FolderListPaneRectInThisResolution +// Folder list pane rect, taken from Avkon layouts +// ----------------------------------------------------------------------------- +// +TRect CFSEmailUiLayoutHandler::FolderListPaneRectInThisResolution( const TRect& aParent) const + { + FUNC_LOG; + TAknLayoutRect itemRect; + itemRect.LayoutRect(aParent, AknLayoutScalable_Avkon::listscroll_gen_pane(0,0,0)); + return itemRect.Rect(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::FolderListIndentation +// Folder list pane indentation in pixels, taken from Avkon layouts +// ----------------------------------------------------------------------------- +// +TInt CFSEmailUiLayoutHandler::FolderListIndentation( const TRect& aParent ) const + { + FUNC_LOG; + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( aParent, + AknLayoutScalable_Avkon::aid_indentation_list_msg().LayoutLine() ); + return layoutRect.Rect().Width(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::FolderListItemSizeInThisResolution +// Folder list item size, taken from Avkon layouts +// ----------------------------------------------------------------------------- +// +TSize CFSEmailUiLayoutHandler::FolderListItemSizeInThisResolution( const TRect& aParent ) const + { + FUNC_LOG; + TAknLayoutRect itemRect; + itemRect.LayoutRect( aParent, // Only zero variety with this one + AknLayoutScalable_Avkon::list_single_large_graphic_pane( 0, 0 ,0 ) ); + + return itemRect.Rect().Size(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::DropDownMenuListRect +// Selector ring image visual size +// ----------------------------------------------------------------------------- +// +TRect CFSEmailUiLayoutHandler::DropDownMenuListRect( + const TDropDownMenuSide aSide, TBool aStretch ) const + { + FUNC_LOG; + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, + mainPaneRect ); + mainPaneRect.Move( 0, -mainPaneRect.iTl.iY ); + TInt variety( aSide == ELeft ? 0 : 1 ); + TBool landscape = Layout_Meta_Data::IsLandscapeOrientation(); + if ( landscape ) + { + // landscape orientation variety is portrait + 2 + variety += 2; + } + + TAknWindowComponentLayout ddMenuPane( + TAknWindowComponentLayout::Compose( + AknLayoutScalable_Apps::main_sp_fs_email_pane(), + AknLayoutScalable_Apps::popup_sp_fs_action_menu_pane_cp01( variety ) + ) ); + + TAknLayoutRect menuPane; + menuPane.LayoutRect( mainPaneRect, ddMenuPane.LayoutLine() ); + TRect rect = menuPane.Rect(); + if ( aStretch ) + { + rect.iBr.iY = mainPaneRect.iBr.iY; + + if( !landscape ) // landscape layout occupy the right side of the display + { + rect.iBr.iY -= ControlBarHeight(); + } + } + + // Calculate the placement next to the button (below or left side) + TRect buttonRect; + TRect cbr = GetControlBarRect(); + if( aSide == ELeft ) + { + buttonRect = GetControlBarFolderListButtonRect(); + } + else + { + buttonRect = GetControlBarSortButtonRect(); + } + buttonRect.Move( cbr.iTl ); // relative to control bar + + if( landscape ) + { + TSize menuSize = rect.Size(); + if ( !CFsLayoutManager::IsMirrored() ) + { + // position left from the button + rect.SetRect( TPoint( buttonRect.iTl.iX - menuSize.iWidth, + buttonRect.Center().iY - menuSize.iHeight / 2 ), menuSize ); + } + else + { + // position right from the button + rect.SetRect( TPoint( buttonRect.Width(), + buttonRect.Center().iY - menuSize.iHeight / 2 ), menuSize ); + } + } + else + { + // position below the button + rect.Move( 0, buttonRect.iBr.iY - rect.iTl.iY ); + } + + // keep the popup menu inside the screen area + if( landscape ) + { + if( rect.iTl.iX < KPopupMargin ) + { + rect.Move( KPopupMargin - rect.iTl.iX , 0 ); + } + if( rect.iBr.iY > mainPaneRect.iBr.iY - KPopupMargin ) + { + rect.Move( 0, mainPaneRect.iBr.iY - rect.iBr.iY - KPopupMargin ); + } + } + if( rect.iTl.iY < KPopupMargin ) + { + rect.iTl.iY = KPopupMargin; + } + return rect; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::OneLineListNodeHeight +// List node item height +// ----------------------------------------------------------------------------- +// +TInt CFSEmailUiLayoutHandler::OneLineListNodeHeight() const + { + FUNC_LOG; + TRect mainPaneRect; + TAknLayoutRect listItem; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + listItem.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::list_single_fs_dyc_pane( 0 ) ); + return listItem.Rect().Height(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::OneLineListItemHeight +// List item height +// ----------------------------------------------------------------------------- +// +TInt CFSEmailUiLayoutHandler::OneLineListItemHeight() const + { + FUNC_LOG; + TRect mainPaneRect; + TAknLayoutRect listItem; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + listItem.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::list_single_fs_dyc_pane( 0 ) ); + return listItem.Rect().Height(); + } + +TInt CFSEmailUiLayoutHandler::TwoLineListItemHeight() const + { + TRect mainPaneRect; + TAknLayoutRect listItem; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + listItem.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::list_single_fs_dyc_pane( 1 ) ); + return listItem.Rect().Height(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::FolderListOneLineItemHeight +// List item height for folder list +// ----------------------------------------------------------------------------- +// +TInt CFSEmailUiLayoutHandler::FolderListOneLineItemHeight( + const TBool& aFullscreen ) const + { + FUNC_LOG; + if ( aFullscreen ) + { + return OneLineListItemHeight(); + } + return 0; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ControlBarHeight +// Control bar height +// ----------------------------------------------------------------------------- +// +TInt CFSEmailUiLayoutHandler::ControlBarHeight() const + { + FUNC_LOG; + TRect mainPaneRect; + TAknLayoutRect ctrlBarRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + ctrlBarRect.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane( 0 ) ); + return ctrlBarRect.Rect().Height(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ControlBarListPadding +// ----------------------------------------------------------------------------- +TPoint CFSEmailUiLayoutHandler::ControlBarListPadding() const + { + FUNC_LOG; + return KControlBarListPadding; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ControlBarListBorderRoundingSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ControlBarListBorderRoundingSize() const + { + FUNC_LOG; + return KControlBarListBorderRoundingSize; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ControlBarButtonBgRoundingSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ControlBarButtonBgRoundingSize() const + { + FUNC_LOG; + return KControlBarbuttonBorderRoundingSize; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListFadeInEffectTime +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ListFadeInEffectTime() const + { + FUNC_LOG; + return KListFadeInEffectTime; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListFadeOutEffectTime +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ListFadeOutEffectTime() const + { + FUNC_LOG; + return KListFadeOutEffectTime; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::StatusIndicatorFadeEffectTime +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::StatusIndicatorFadeEffectTime() const + { + FUNC_LOG; + return KStatusIndicatorFadeEffectTime; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::CtrlBarListFadeEffectTime +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::CtrlBarListFadeEffectTime() const + { + FUNC_LOG; + return KCtrlBarListFadeEffectTime; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewSlideEffectActive +// ----------------------------------------------------------------------------- +TBool CFSEmailUiLayoutHandler::ViewSlideEffectActive() const + { + FUNC_LOG; + return KListSlideEffectActive; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewFadeEffectActive +// ----------------------------------------------------------------------------- +TBool CFSEmailUiLayoutHandler::ViewFadeEffectActive() const + { + FUNC_LOG; + return KListFadeEffectActive; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewSlideEffectTime +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewSlideEffectTime() const + { + FUNC_LOG; + return KListSlideEffectTime; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewFadeInEffectTime +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewFadeInEffectTime() const + { + FUNC_LOG; + return KListFadeInEffectTime; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewFadeOutEffectTime +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewFadeOutEffectTime() const + { + FUNC_LOG; + return KListFadeOutEffectTime; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListScrollingTime +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ListScrollingTime() const + { + FUNC_LOG; + return KListScrollingTime; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListItemExpansionDelay +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ListItemExpansionDelay() const + { + FUNC_LOG; + return KListItemExpansionDelay; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListFocusedStateTextSkinColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ListFocusedStateTextSkinColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb textColor; + if( AknsUtils::GetCachedColor( skin, textColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG10 ) != KErrNone ) + { + textColor = KRgbBlack; + } + return textColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListNormalStateTextSkinColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ListNormalStateTextSkinColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb textColor; + if ( AknsUtils::GetCachedColor( skin, textColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone ) + { + textColor = KRgbBlack; + } + return textColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListNodeBackgroundColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ListNodeBackgroundColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb nodeBgColor; + if ( AknsUtils::GetCachedColor( skin, nodeBgColor, + KAknsIIDFsOtherColors, EAknsCIFsOtherColorsCG19 ) != KErrNone ) + { + nodeBgColor = KRgbDarkGray; + } + return nodeBgColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListNodeTextColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ListNodeTextColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb nodeTextColor; + if ( AknsUtils::GetCachedColor( skin, nodeTextColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone ) + { + nodeTextColor = KRgbWhite; + } + return nodeTextColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListHeaderBackgroundColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ListHeaderBackgroundColor() const + { + FUNC_LOG; + // The header item bg color is gained by mixing 50/50 node bg color + // and list item bg color. + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb listItemBgColor; + if ( AknsUtils::GetCachedColor( skin, listItemBgColor, + KAknsIIDQsnLineColors, EAknsCIFsTextColorsCG3 ) != KErrNone ) + { + listItemBgColor = KRgbWhite; + } + TRgb nodeItemBgColor = ListNodeBackgroundColor(); + TRgb headerBgColor; + headerBgColor.SetRed( (listItemBgColor.Red()+nodeItemBgColor.Red()) / 2 ); + headerBgColor.SetGreen( (listItemBgColor.Green()+nodeItemBgColor.Green()) / 2 ); + headerBgColor.SetBlue( (listItemBgColor.Blue()+nodeItemBgColor.Blue()) / 2 ); + return headerBgColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::DropdownMenuTextColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::DropdownMenuTextColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb textColor; + if ( AknsUtils::GetCachedColor( skin, textColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone ) + { + textColor = KRgbBlack; + } + return textColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListItemFontHeightInTwips +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ListItemFontHeightInTwips( const TBool aPopup ) const + { + FUNC_LOG; + if ( aPopup ) + { + TRect mainPaneRect; + TAknLayoutText itemText; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + itemText.LayoutText( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_ddmenu_pane_t1( 0 ) ); + return itemText.Font()->FontSpecInTwips().iHeight; + } + else + { + TRect mainPaneRect; + TAknLayoutText itemText; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + itemText.LayoutText( mainPaneRect, AknLayoutScalable_Apps::list_single_dyc_row_text_pane_t1( 0 ) ); + return itemText.Font()->FontSpecInTwips().iHeight; + } + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerTitleFontAknLogicalFontId +// ----------------------------------------------------------------------------- +TAknLogicalFontId CFSEmailUiLayoutHandler::ViewerTitleFontAknLogicalFontId() const + { + FUNC_LOG; + return KViewerLogicalTitleFontId; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerTextFontAknLogicalFontId +// ----------------------------------------------------------------------------- +TAknLogicalFontId CFSEmailUiLayoutHandler::ViewerTextFontAknLogicalFontId() const + { + FUNC_LOG; + return KViewerLogicalTextFontId; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerTitleFontHeight +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerTitleFontHeight() const + { + FUNC_LOG; + TAknLayoutRect labelRect; + labelRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_caption_pane() ); + TAknLayoutText layoutText; + layoutText.LayoutText( labelRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_caption_pane_t1() ); + return layoutText.Font()->FontMaxHeight(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerTextFontHeight +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerTextFontHeight() const + { + FUNC_LOG; + TAknLayoutRect labelRect; + labelRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) ); + TAknLayoutText layoutText; + layoutText.LayoutText( labelRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_t1( 0 ) ); + return layoutText.Font()->FontMaxHeight(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerTopMostSpaceHeight +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerTopMostSpaceHeight() const + { + FUNC_LOG; + TAknLayoutRect labelRect; + labelRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_caption_pane( 0 ) ); + return labelRect.Rect().Height(); + } +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerRecipientSpaceHeight +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerRecipientSpaceHeight() const + { + FUNC_LOG; + TAknLayoutRect labelRect; + labelRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) ); + return labelRect.Rect().Height(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerHeaderInfoSpaceHeight +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerHeaderInfoSpaceHeight() const + { + FUNC_LOG; + return ViewerTopMostSpaceHeight(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerBottomMostSpaceHeight +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerBottomMostSpaceHeight() const + { + FUNC_LOG; + return ViewerRecipientSpaceHeight(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerMaxRecipientLineCount +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerMaxRecipientLineCount() const + { + FUNC_LOG; + return KViewerMaxRecipientLineCount; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerMaxSubjectLineCount +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerMaxSubjectLineCount() const + { + FUNC_LOG; + return KViewerMaxSubjectLineCount; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerTitleTextColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ViewerTitleTextColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb textColor; + if (AknsUtils::GetCachedColor( skin, textColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone ) + { + textColor = KBlackFallbackTextColor; + } + return textColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerTextTextColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ViewerTextTextColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb textColor; + if (AknsUtils::GetCachedColor( skin, textColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone ) + { + textColor = KBlackFallbackTextColor; + } + return textColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerBodyTextColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ViewerBodyTextColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb textColor; + if ( AknsUtils::GetCachedColor( skin, textColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG13 ) != KErrNone ) + { + textColor = KBlackFallbackTextColor; + } + return textColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerNormalHotspotTextColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ViewerNormalHotspotTextColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb textColor; + if ( AknsUtils::GetCachedColor( skin, textColor, + KAknsIIDQsnHighlightColors, + EAknsCIQsnHighlightColorsCG3 ) != KErrNone ) + { + textColor = KLightBlueFallbackTextColor; + } + return textColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerHighlightedHotspotTextColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ViewerHighlightedHotspotTextColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb textColor; + if ( AknsUtils::GetCachedColor( skin, textColor, + KAknsIIDQsnHighlightColors, EAknsCIQsnHighlightColorsCG3 ) + != KErrNone ) + { + textColor = KLightBlueFallbackTextColor; + } + return textColor; + } +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerSentTextColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ViewerSentTextColor() const + { + FUNC_LOG; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb textColor; + if ( AknsUtils::GetCachedColor( skin, textColor, + KAknsIIDFsTextColors, EAknsCIFsTextColorsCG8 ) != KErrNone ) + { + textColor = KBlackFallbackTextColor; + } + return textColor; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerPixelsBetweenMsgStatusIconAndSubject +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerPixelsBetweenMsgStatusIconAndSubject() const + { + FUNC_LOG; + const TRect cmailPaneRect( ListCmailPaneRect() ); + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( cmailPaneRect, AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) ); + TAknLayoutRect iconRect; + iconRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_g1( 0 ) ); + if (AknLayoutUtils::LayoutMirrored()) + { + return cmailPaneRect.iBr.iX - iconRect.Rect().iBr.iX; + } + else + { + return Abs( cmailPaneRect.iTl.iX - iconRect.Rect().iTl.iX ); + } + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerIconSize +// ----------------------------------------------------------------------------- +TSize CFSEmailUiLayoutHandler::ViewerIconSize() const + { + FUNC_LOG; + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) ); + layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_g1( 2 ) ); + return layoutRect.Rect().Size(); + } +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerIndentationIconSize +// ----------------------------------------------------------------------------- +TSize CFSEmailUiLayoutHandler::ViewerIndentationIconSize() const + { + FUNC_LOG; + return ViewerIconSize(); + } +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerActionMenuIconSize +// ----------------------------------------------------------------------------- +TSize CFSEmailUiLayoutHandler::ViewerActionMenuIconSize() const + { + FUNC_LOG; + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) ); + layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_g2( 0 ) ); + return layoutRect.Rect().Size(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerActionMenuIconMargin +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerActionMenuIconMargin() const + { + FUNC_LOG; + if (AknLayoutUtils::LayoutMirrored()) + { + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) ); + TInt x( layoutRect.Rect().iTl.iX ); + layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_g2( 0 ) ); + return Abs( layoutRect.Rect().iTl.iX - x ); + } + else + { + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) ); + TInt x( layoutRect.Rect().iBr.iX ); + layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_g2( 0 ) ); + return Abs( x - layoutRect.Rect().iBr.iX ); + } + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerSelectorOpacity +// ----------------------------------------------------------------------------- +TReal CFSEmailUiLayoutHandler::ViewerSelectorOpacity() const + { + FUNC_LOG; + return KViewerSelectorOpacity; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerRightMarginInPixels +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerRightMarginInPixels() const + { + FUNC_LOG; + const TRect cmailPaneRect( ListCmailPaneRect() ); + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( cmailPaneRect, AknLayoutScalable_Apps::list_single_cmail_header_caption_pane() ); + TAknLayoutText captionTextRect; + captionTextRect.LayoutText( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_caption_pane_t1() ); + return Abs( cmailPaneRect.iBr.iX - captionTextRect.TextRect().iBr.iX ); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerLeftMarginInPixels +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerLeftMarginInPixels() const + { + FUNC_LOG; + const TRect cmailPaneRect( ListCmailPaneRect() ); + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( cmailPaneRect, AknLayoutScalable_Apps::list_single_cmail_header_caption_pane() ); + TAknLayoutText captionTextRect; + captionTextRect.LayoutText( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_caption_pane_t1() ); + return Abs( cmailPaneRect.iTl.iX - captionTextRect.TextRect().iTl.iX ); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ComposerFieldBorderColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ComposerFieldBorderColor() const + { + FUNC_LOG; + return GetSkinColor( KAknsIIDFsOtherColors, EAknsCIFsOtherColorsCG14, KRgbBlack ); + } +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ComposerFieldBackgroundColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ComposerFieldBackgroundColor() const + { + FUNC_LOG; + return GetSkinColor( KAknsIIDFsOtherColors, EAknsCIFsOtherColorsCG12, KRgbWhite ); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ComposerHeaderFieldTextColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ComposerHeaderFieldTextColor() const + { + FUNC_LOG; + return GetSkinColor( KAknsIIDFsTextColors, EAknsCIFsTextColorsCG4, KRgbBlack ); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ComposerBodyFieldTextColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ComposerBodyFieldTextColor() const + { + FUNC_LOG; + return GetSkinColor( KAknsIIDFsTextColors, EAknsCIFsTextColorsCG3, KRgbBlack ); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ComposerDimmedTextColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::ComposerDimmedTextColor() const + { + FUNC_LOG; + return GetSkinColor( KAknsIIDFsTextColors, EAknsCIFsTextColorsCG18, KRgbGray ); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::MaxPcsMatches +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::MaxPcsMatches() const + { + FUNC_LOG; + return KMaxPcsMatches; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::PcsPopupDimmedFontTransparency +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::PcsPopupDimmedFontTransparency() const + { + FUNC_LOG; + return KPcsPopupDimmedFontTransparency; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListTextureNodeExpandedSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ListTextureNodeExpandedSize() const + { + FUNC_LOG; + TRect mainPaneRect; + TAknLayoutRect listItem; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + listItem.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::list_single_dyc_row_pane_g1( 0 ) ); + return listItem.Rect().Height(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::SearchLookingGlassIconSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::SearchLookingGlassIconSize() const + { + FUNC_LOG; + return KSearchLookingGlassIconSize; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::statusPaneIconSize +// ----------------------------------------------------------------------------- +TSize CFSEmailUiLayoutHandler::statusPaneIconSize() const + { + FUNC_LOG; + TRect titlePaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::ETitlePane, titlePaneRect); + TAknLayoutRect iconRect; + iconRect.LayoutRect(titlePaneRect, AknLayoutScalable_Avkon::title_pane_g2(0)); + return iconRect.Rect().Size(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListControlBarMailboxDefaultIconSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ListControlBarMailboxDefaultIconSize() const + { + FUNC_LOG; + return GetControlBarMailboxIconRect().Size().iWidth; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::EMailListBarBgIconSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::EMailListBarBgIconSize() const + { + FUNC_LOG; + return GetControlBarRect().Size().iHeight; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListTextureMailboxDefaultIconSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ListTextureMailboxDefaultIconSize() const + { + FUNC_LOG; + return KListTextureMailboxDefaultIconSize; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::EListTextureSelectorSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::EListTextureSelectorSize() const + { + FUNC_LOG; + return OneLineListItemHeight(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListControlMenuIconSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ListControlMenuIconSize() const + { + FUNC_LOG; + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + mainPaneRect.Move(-mainPaneRect.iTl); + TAknLayoutRect controlBarRect; + controlBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane(0)); + TAknLayoutRect iconRect; + iconRect.LayoutRect(controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_g1(0)); + return iconRect.Rect().Height(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::AttachmentIconSize +// ----------------------------------------------------------------------------- +TSize CFSEmailUiLayoutHandler::AttachmentIconSize() const + { + FUNC_LOG; + TAknLayoutRect rect; + rect.LayoutRect( TRect(0,0,0,0), + AknLayoutScalable_Apps::list_single_dyc_row_pane_g1( 0 ).LayoutLine() ); + return rect.Rect().Size(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ViewerHighlightTextureSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ViewerHighlightTextureSize() const + { + FUNC_LOG; + return KViewerHighlightTextureSize; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ControlBarArrowTextureXSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ControlBarArrowTextureXSize() const + { + FUNC_LOG; + return KControlBarArrowTextureXSize; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ControlBarArrowTextureYSize +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::ControlBarArrowTextureYSize() const + { + FUNC_LOG; + return KControlBarArrowTextureYSize; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GetSkinColor +// ----------------------------------------------------------------------------- +TRgb CFSEmailUiLayoutHandler::GetSkinColor( const TAknsItemID& aId, + TInt aIndex, const TRgb& aFallbackColor ) const + { + FUNC_LOG; + TRgb color; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + TInt err = AknsUtils::GetCachedColor( + skin, + color, + aId, + aIndex ); + if ( err != KErrNone ) + { + color = aFallbackColor; + } + + return color; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GetControlBarMailboxIconRect +// ----------------------------------------------------------------------------- +TRect CFSEmailUiLayoutHandler::GetControlBarMailboxIconRect() const + { + FUNC_LOG; + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + mainPaneRect.Move(-mainPaneRect.iTl); + TAknLayoutRect controlBarRect; + controlBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane(0)); + TAknLayoutRect iconRect; + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + iconRect.LayoutRect(controlBarRect.Rect(), AknLayoutScalable_Apps::cmail_ddmenu_btn02_pane_g2(0)); + } + else + { + if ( AknLayoutUtils::LayoutMirrored() ) + { + iconRect.LayoutRect(controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_g2(0)); + } + else + { + iconRect.LayoutRect(controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_g1(0)); + } + } + return iconRect.Rect(); + } + +// ----------------------------------------------------------------------------- +TRect CFSEmailUiLayoutHandler::GetControlBarNewEmailButtonRect() const + { + FUNC_LOG; + TAknLayoutRect iconRect; + TRect cbr = GetControlBarRect(); + if( Layout_Meta_Data::IsLandscapeOrientation() ) + { + iconRect.LayoutRect( cbr, + AknLayoutScalable_Apps::cmail_ddmenu_btn02_pane(3) ); + } + else + { + if ( AknLayoutUtils::LayoutMirrored() ) + { + iconRect.LayoutRect( cbr, + AknLayoutScalable_Apps::cmail_ddmenu_btn03_pane(2) ); + } + else + { + iconRect.LayoutRect( cbr, + AknLayoutScalable_Apps::cmail_ddmenu_btn01_pane(2) ); + } + } + + TRect rect = iconRect.Rect(); + rect.Move( -cbr.iTl ); + return rect; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GetControlBarFolderListButtonRect +// ----------------------------------------------------------------------------- +TRect CFSEmailUiLayoutHandler::GetControlBarFolderListButtonRect() const + { + FUNC_LOG; + + TAknLayoutRect folderListButtonRect; + TRect cbr = GetControlBarRect(); + if( Layout_Meta_Data::IsLandscapeOrientation() ) + { + folderListButtonRect.LayoutRect( cbr, + AknLayoutScalable_Apps::cmail_ddmenu_btn02_pane_cp1(3) ); + } + else + { + folderListButtonRect.LayoutRect( cbr, + AknLayoutScalable_Apps::cmail_ddmenu_btn02_pane(2) ); + } + + TRect rect = folderListButtonRect.Rect(); + rect.Move( -cbr.iTl ); + return rect; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GetControlBarSortButtonRect +// ----------------------------------------------------------------------------- +TRect CFSEmailUiLayoutHandler::GetControlBarSortButtonRect() const + { + FUNC_LOG; + + TAknLayoutRect sortButtonRect; + TRect cbr = GetControlBarRect(); + if( Layout_Meta_Data::IsLandscapeOrientation() ) + { + sortButtonRect.LayoutRect( cbr, + AknLayoutScalable_Apps::cmail_ddmenu_btn02_pane_cp2(3) ); + } + else + { + if ( AknLayoutUtils::LayoutMirrored() ) + { + sortButtonRect.LayoutRect( cbr, + AknLayoutScalable_Apps::cmail_ddmenu_btn01_pane(2) ); + } + else + { + sortButtonRect.LayoutRect( cbr, + AknLayoutScalable_Apps::cmail_ddmenu_btn03_pane(2) ); + } + } + + TRect r = sortButtonRect.Rect(); + r.Move( -cbr.iTl ); + return r; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GetControlBarConnectionIconRect +// ----------------------------------------------------------------------------- +TRect CFSEmailUiLayoutHandler::GetControlBarConnectionIconRect() const + { + FUNC_LOG; + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + mainPaneRect.Move(-mainPaneRect.iTl); + TAknLayoutRect controlBarRect; + controlBarRect.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane(0 ) ); + TAknLayoutRect iconRect; + + if ( AknLayoutUtils::LayoutMirrored() ) + { + iconRect.LayoutRect( controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_g1( 0 ) ); + } + else + { + iconRect.LayoutRect( controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_g2( 0 ) ); + } + + return iconRect.Rect(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GetControlBarRect +// ----------------------------------------------------------------------------- +TRect CFSEmailUiLayoutHandler::GetControlBarRect() const + { + FUNC_LOG; + TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 3 : 2; + + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + mainPaneRect.Move(-mainPaneRect.iTl); + + TRect emailRect = mainPaneRect; + TAknLayoutRect emailPaneRect; + emailPaneRect.LayoutRect(mainPaneRect, + AknLayoutScalable_Apps::main_sp_fs_email_pane()); + emailRect = emailPaneRect.Rect(); + + TAknLayoutRect controlBarRect; + controlBarRect.LayoutRect( emailRect, + AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane(var)); + TRect rect = controlBarRect.Rect(); + + return rect; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GetListRect +// ----------------------------------------------------------------------------- +TRect CFSEmailUiLayoutHandler::GetListRect( TBool aControlsOnTop ) const + { + FUNC_LOG; + TBool landscape = Layout_Meta_Data::IsLandscapeOrientation(); + TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 3 : 2; + + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + mainPaneRect.Move(-mainPaneRect.iTl); + + TAknLayoutRect listRect; + listRect.LayoutRect( mainPaneRect, + AknLayoutScalable_Apps::main_sp_fs_listscroll_pane_te_cp01( var )); + TRect rect = listRect.Rect(); + + // if control bar is required, reserve space on top of the listbox + if( aControlsOnTop && landscape ) + { + listRect.LayoutRect( mainPaneRect, + AknLayoutScalable_Apps::main_sp_fs_listscroll_pane_te_cp01( 0 )); + rect = listRect.Rect(); + } + + return rect; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::GetSearchListHeaderTextLayout +// ----------------------------------------------------------------------------- +TAknLayoutText CFSEmailUiLayoutHandler::GetSearchListHeaderTextLayout() const + { + FUNC_LOG; + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + mainPaneRect.Move(-mainPaneRect.iTl); + TAknLayoutRect headerRect; + headerRect.LayoutRect(mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane()); + TAknLayoutText textLayout; + textLayout.LayoutText(headerRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_t1()); + return textLayout; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::FSTextStyleFromLayoutL +// ----------------------------------------------------------------------------- +CAlfTextStyle& CFSEmailUiLayoutHandler::FSTextStyleFromLayoutL( const TAknTextComponentLayout& aLayout ) + { + FUNC_LOG; + CAlfTextStyle** findResult = iTextStyleMap.Find( aLayout ); + CAlfTextStyle* style = NULL; + if( !findResult ) + { + TInt fontStyle(0); + fontStyle = CAlfStatic::Env().TextStyleManager().CreatePlatformTextStyleL( aLayout.Font(), EAlfTextStyleNormal ); + style = CAlfStatic::Env().TextStyleManager().TextStyle( fontStyle ); + TInt insertError( iTextStyleMap.Insert( aLayout, style ) ); + if( insertError ) + { + CAlfStatic::Env().TextStyleManager().DeleteTextStyle( style->Id() ); + User::Leave( insertError ); + } + TAknLayoutText textLayout; + textLayout.LayoutText(TRect(0,0,0,0), aLayout); + style->SetBold(textLayout.Font()->FontSpecInTwips().iFontStyle.StrokeWeight()); + style->SetItalic(textLayout.Font()->FontSpecInTwips().iFontStyle.Posture()); + } + else + { + style = *findResult; + } + return *style; + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::DeleteTextStyles +// ----------------------------------------------------------------------------- +void CFSEmailUiLayoutHandler::DeleteTextStyles() + { + FUNC_LOG; + THashMapIter< TAknTextComponentLayout, CAlfTextStyle* > + mapIterator( iTextStyleMap ); + CAlfTextStyle** value = mapIterator.CurrentValue(); + while( value ) + { + CAlfStatic::Env().TextStyleManager().DeleteTextStyle( ( *value )->Id() ); + mapIterator.RemoveCurrent(); + mapIterator.NextValue(); + value = mapIterator.CurrentValue(); + } + iTextStyleMap.Close(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::ListCmailPaneRect +// ----------------------------------------------------------------------------- +TRect CFSEmailUiLayoutHandler::ListCmailPaneRect() const + { + FUNC_LOG; + + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_email_pane() ); + layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::listscroll_cmail_pane() ); + layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_cmail_pane() ); + return layoutRect.Rect(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::TitleCaptionPadding +// +// Returns padding value for title caption visual +// ----------------------------------------------------------------------------- +TInt CFSEmailUiLayoutHandler::TitleCaptionPadding() const + { + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + + TAknLayoutRect ctrlBarPane; + ctrlBarPane.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane( 0 ) ); + const TRect ctrlBarPaneRect( ctrlBarPane.Rect() ); + + TAknLayoutText ctrlBarPaneT1; + ctrlBarPaneT1.LayoutText( ctrlBarPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_t1( 0 ) ); + const TRect ctrlBarPaneT1Rect( ctrlBarPaneT1.TextRect() ); + + return Abs( ctrlBarPaneRect.iTl.iY - ctrlBarPaneT1Rect.iTl.iY ); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::SeparatorGraphicSizeInThisResolution +// ----------------------------------------------------------------------------- +// +TSize CFSEmailUiLayoutHandler::SeparatorGraphicSizeInThisResolution() const + { + FUNC_LOG; + + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + + TAknLayoutRect listRect; + listRect.LayoutRect(mainPaneRect, AknLayoutScalable_Apps::list_cmail_pane()); + + TAknLayoutRect bodyRect; + bodyRect.LayoutRect(listRect.Rect(), AknLayoutScalable_Apps::list_cmail_body_pane()); + + TAknLayoutRect itemRect; + itemRect.LayoutRect(bodyRect.Rect(), AknLayoutScalable_Apps::list_cmail_body_pane_g1()); + + return itemRect.Rect().Size(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::SeparatorLineColor +// ----------------------------------------------------------------------------- +// +TRgb CFSEmailUiLayoutHandler::SeparatorLineColor() const + { + FUNC_LOG; + return ViewerNormalHotspotTextColor(); + } + +// ----------------------------------------------------------------------------- +// CFSEmailUiLayoutHandler::DropDownMenuListPadding +// ----------------------------------------------------------------------------- +// +TInt CFSEmailUiLayoutHandler::DropDownMenuListPadding() const + { + FUNC_LOG; + // main pane + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect( + AknLayoutUtils::EMainPane, mainPaneRect ); + + // menu pane + TAknLayoutRect menuPane; + menuPane.LayoutRect( mainPaneRect, + AknLayoutScalable_Apps::popup_sp_fs_action_menu_pane( 2 ) ); + const TRect menuPaneRect( menuPane.Rect() ); + + // Menu gene pane + TAknLayoutRect menuListPane; + menuListPane.LayoutRect( menuPaneRect, + AknLayoutScalable_Apps::sp_fs_action_menu_list_pane( 0 ) ); + const TRect menuListPaneRect( menuListPane.Rect() ); + + return Abs( menuListPaneRect.iTl.iY - menuPaneRect.iTl.iY ); + } + +// End of file +