diff -r 000000000000 -r ff3acec5bc43 mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewlayout.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewlayout.cpp Thu Dec 17 08:45:05 2009 +0200 @@ -0,0 +1,651 @@ +/* +* 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: Layout and graphic factory for Common Playback View +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // For FF_FMTX +#include +#include +#include +#include +#include +#include + +#include "mpxcommonplaybackviewlayout.h" + +using namespace AknLayoutScalable_Apps; + + +// CONSTANTS +_LIT(KMXPanicCategory, "CMPXCommonPlaybackViewLayout"); +//_LIT(KMpxcommonplaybackviewMbmFile, "mpxcommonplaybackview.mbm"); + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Get layout data for a button. +// --------------------------------------------------------------------------- +// +EXPORT_C TRect CMPXCommonPlaybackViewLayout::ButtonLayout( + const TRect& aParentRect ) + { + TAknLayoutRect res; + TAknWindowComponentLayout layoutItem; + TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation(); + if(!isLandscape) + { + layoutItem = mup3_rocker_pane(0); + } + else + { + layoutItem = mup3_rocker_pane(1); + } + + res.LayoutRect( aParentRect, layoutItem.LayoutLine() ); + return res.Rect(); + } + +// --------------------------------------------------------------------------- +// Get layout data for an graphical indicator. +// --------------------------------------------------------------------------- +// +EXPORT_C TRect CMPXCommonPlaybackViewLayout::IndicatorLayout( + const TRect& aParentRect, + TMPXPbvIndicator aIndicator ) + { + TAknLayoutRect res; + + TMPXPbvLayoutVariants lafVariant(EPbvUndefinedVariant); + lafVariant = GetIndicatorVariant(aIndicator); + if (lafVariant == EPbvUndefinedVariant) + { + // unsupported + ASSERT(0); + } + else + { + TAknWindowComponentLayout layoutItem; + switch ( aIndicator ) + { + case EIconPlay: + case EIconPause: + case EIconStop: + { + layoutItem = main_mup3_pane_g5(lafVariant); + break; + } + case EIconRepeatAll: + case EIconRepeatOne: + { + layoutItem = main_mup3_pane_g4(lafVariant); + break; + } + case EIconRandom: + { + layoutItem = main_mup3_pane_g3(lafVariant); + break; + } + case EAlbumArtArea: + { + layoutItem = main_mup3_pane_g2(lafVariant); + break; + } + case ESliderPane: + { + layoutItem = mup3_progress_pane(lafVariant); + break; + } + case ESliderBackground: + { + layoutItem = mup_progress_pane_cp03(); + break; + } + case EPlaybackSlider: + { + layoutItem = mup_progress_pane_cp03(); + break; + } + case EDownloadSlider: + { + layoutItem = mup_progress_pane_cp03(); + break; + } +#ifdef RD_RA_SUPPORT_FOR_MUSIC_PLAYER + case EIconReal: + { + if( lafVariant == EPbvPortraitWithRocker ) + { + layoutItem = main_mup3_pane_g8( 0 ); + } + else if( lafVariant == EPbvLandscapeWithRocker ) + { + layoutItem = main_mup3_pane_g8( 15 ); + } + else + { + layoutItem = main_mup3_pane_g8( lafVariant ); + } + + break; + } +#endif + default: + { + __ASSERT_ALWAYS(EFalse, + User::Panic(KMXPanicCategory, KErrArgument)); + } + } + + res.LayoutRect(aParentRect, layoutItem.LayoutLine()); + } + return res.Rect(); + } + +// --------------------------------------------------------------------------- +// Set layout data for a text label. +// --------------------------------------------------------------------------- +// +EXPORT_C void CMPXCommonPlaybackViewLayout::LayoutLabel( + CEikLabel* aLabel, + const TRect& aParentRect, + TMPXPbvTextIndicator aText, + TInt /*aOffsetx*/, /* =0 */ + TInt /*aOffsety*/ /* =0 */ ) + { + TMPXPbvLayoutVariants lafVariant(EPbvUndefinedVariant); + lafVariant = GetTextVariant(aText); + if (lafVariant == EPbvUndefinedVariant) + { + ASSERT(0); + } + else + { + TAknTextComponentLayout layoutItem; + switch ( aText ) + { + case ETextTrack: + { + layoutItem = main_mup3_pane_t1(lafVariant); + break; + } + case ETextArtist: + { + layoutItem = main_mup3_pane_t2(lafVariant); + break; + } + case ETextPlaylistCount: + { + if( lafVariant == EPbvLandscapeWithRocker ) + { + lafVariant = (TMPXPbvLayoutVariants)15; + } + layoutItem = main_mup3_pane_t5(lafVariant); + break; + } + case ETextEmpty: + { + layoutItem = main_mup3_pane_t6(lafVariant); + break; + } + case ETextElapsedTime: + { + layoutItem = mup3_progress_pane_t1(); + break; + } + case ETextRemainingTime: + { + layoutItem = mup3_progress_pane_t2(); + break; + } + case ETextDownloadState: + { + layoutItem = mup3_progress_pane_t3(); + break; + } + case ETextFMFrequency: + { + if( lafVariant == EPbvPortraitWithRocker ) + { + layoutItem = main_mup3_pane_t7( 15 ); + } + else if( lafVariant == EPbvLandscapeWithRocker ) + { + layoutItem = main_mup3_pane_t7( 16 ); + } + else + { + layoutItem = main_mup3_pane_t7(lafVariant); + } + break; + } + default: + { + __ASSERT_ALWAYS(EFalse, + User::Panic(KMXPanicCategory, KErrArgument)); + } + } + + AknLayoutUtils::LayoutLabel(aLabel, aParentRect, layoutItem.LayoutLine()); + + } + } + +// --------------------------------------------------------------------------- +// Get the bitmap and mask for a soft button in a given state. +// --------------------------------------------------------------------------- +// +EXPORT_C void CMPXCommonPlaybackViewLayout::GetButtonBitmapsL( + TMPXPbvButton /*aButton*/, + TInt /*aButtonState*/, + CFbsBitmap*& /*aBitmap*/, + CFbsBitmap*& /*aMask*/ ) + { +// do nothing + } + +// --------------------------------------------------------------------------- +// Get the bitmap and mask for a given indicator. +// --------------------------------------------------------------------------- +// +EXPORT_C CGulIcon* CMPXCommonPlaybackViewLayout::GetIndicatorIconMaskL( + TMPXPbvIndicator aIndicator ) + { + TParse parse; + parse.Set( KMPXCommonPlaybackViewIconFile, &KDC_APP_RESOURCE_DIR, NULL ); + TFileName iconFile( parse.FullName() ); + User::LeaveIfError( MPXUser::CompleteWithDllPath( iconFile ) ); + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + switch ( aIndicator ) + { + case EIconPlay: + { + return AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiMupPlay, + iconFile, + EMbmMpxcommonplaybackviewQgn_indi_mup_play, + EMbmMpxcommonplaybackviewQgn_indi_mup_play_mask); + } + case EIconPause: + { + return AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiMupPause, + iconFile, + EMbmMpxcommonplaybackviewQgn_indi_mup_pause, + EMbmMpxcommonplaybackviewQgn_indi_mup_pause_mask); + } + case EIconStop: + { + return AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiMupStop, + iconFile, + EMbmMpxcommonplaybackviewQgn_indi_mup_stop, + EMbmMpxcommonplaybackviewQgn_indi_mup_stop_mask); + } + case EIconRepeatAll: + { + return CreateColorIconL( + skin, + KAknsIIDQgnIndiMupRepeat, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG26, + iconFile, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_icon_repeat, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_icon_repeat_mask ); + } + case EIconRepeatOne: + { + return CreateColorIconL( + skin, + KAknsIIDQgnIndiMupRepeatOne, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG26, + iconFile, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_icon_repeatone, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_icon_repeatone_mask ); + } + case EIconRandom: + { + return CreateColorIconL( + skin, + KAknsIIDQgnIndiMupRandom, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG26, + iconFile, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_icon_shuffle, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_icon_shuffle_mask ); + } + case ESliderBackground: + { + return AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnGrafMup2BarFrame, + iconFile, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_prbar_bgd, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_prbar_bgd_mask ); + } + case EPlaybackSlider: + { + return AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnGrafMup2BarProgress2, + iconFile, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_prbar_top_play, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_prbar_top_play_mask ); + } + case EDownloadSlider: + { + return AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnGrafMup2BarProgress, + iconFile, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_prbar_mid_download, + EMbmMpxcommonplaybackviewQgn_graf_mup_npv_prbar_mid_download_mask ); + } + case EAlbumArtArea: + { + return AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiMupDefaultAlbum, + iconFile, + EMbmMpxcommonplaybackviewQgn_indi_mup_default_album, + EMbmMpxcommonplaybackviewQgn_indi_mup_default_album_mask ); + } +#ifdef RD_RA_SUPPORT_FOR_MUSIC_PLAYER + case EIconReal: + { + return AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiMupRp, + iconFile, + EMbmMpxcommonplaybackviewQgn_indi_mup_rp, + EMbmMpxcommonplaybackviewQgn_indi_mup_rp_mask ); + } +#endif + default: + { + __ASSERT_ALWAYS( + EFalse, + User::Panic( KMXPanicCategory, KErrArgument ) ); + break; + } + } + return NULL; // Not reached + } + +// --------------------------------------------------------------------------- +// Create a color-skinned icon. +// --------------------------------------------------------------------------- +// +EXPORT_C CGulIcon* CMPXCommonPlaybackViewLayout::CreateColorIconL( + MAknsSkinInstance* aSkin, + const TAknsItemID& aIconSkinId, + const TAknsItemID& aColorId, + TInt aColorIndex, + const TDesC& aBitmapFilename, + TInt aFileBitmapId, + TInt aFileMaskId ) + { + CFbsBitmap* icon = NULL; + CFbsBitmap* mask = NULL; + + AknsUtils::CreateColorIconLC( + aSkin, // aInstance + aIconSkinId, // aID + aColorId, // aColorID + aColorIndex, // aColorIndex + icon, // aBitmap + mask, // aMask + aBitmapFilename, // aFilename + aFileBitmapId, // aFileBitmapId + aFileMaskId, // aFileBitmapId + KRgbBlack ); // aDefaultColor + + CGulIcon* res = CGulIcon::NewL( icon, mask ); + res->SetBitmapsOwnedExternally( EFalse ); + CleanupStack::Pop(2); // mask, icon + + return res; + } + +// --------------------------------------------------------------------------- +// Layouts the label by reading in the resource values +// --------------------------------------------------------------------------- +// +EXPORT_C void CMPXCommonPlaybackViewLayout::DoLayoutLabelL( + CEikLabel* aLabel, + const TRect& aParentRect, + TInt aResId, + TInt aOffsetx, + TInt aOffsety ) + { + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId ); + + // Read the layout from resource file + TAknTextComponentLayout textLayout; + textLayout.SetFont( reader.ReadInt16() ); + textLayout.SetC( reader.ReadInt16() ); + textLayout.Setl( reader.ReadInt16() + aOffsetx ); + textLayout.Setr( reader.ReadInt16() - aOffsetx ); + textLayout.Setb( reader.ReadInt16() + aOffsety ); + textLayout.SetW( reader.ReadInt16() ); + textLayout.SetJ( reader.ReadInt16() ); + CleanupStack::PopAndDestroy(); // reader + + AknLayoutUtils::LayoutLabel( + aLabel, aParentRect, textLayout.LayoutLine() ); + } + +// --------------------------------------------------------------------------- +// Get layout data for a button. +// --------------------------------------------------------------------------- +// +EXPORT_C TRect CMPXCommonPlaybackViewLayout::ButtonLayout(const TRect& aParentRect, + TInt aButton) + { + + + TAknLayoutRect res; + TAknWindowComponentLayout layoutItem; + TInt buttonVariant = 0; + + switch (aButton) + { + case EButtonPlay: + case EButtonPause: + { + layoutItem = mup3_control_keys_pane_g3(buttonVariant); + break; + } + case EButtonFastForward: + { + layoutItem = mup3_control_keys_pane_g2(buttonVariant); + break; + } + case EButtonRewind: + { + layoutItem = mup3_control_keys_pane_g1(buttonVariant); + break; + } + case EButtonStop: + case EButtonVolumeDown: + { + layoutItem = mup3_control_keys_pane_g4(buttonVariant); + break; + } + case EButtonVolumeUp: + { + layoutItem = mup3_control_keys_pane_g4_copy1(buttonVariant); + break; + } + default: + { + ASSERT(0); + break; + } + } + + res.LayoutRect( aParentRect, layoutItem.LayoutLine() ); + + return res.Rect(); + } + + +// --------------------------------------------------------------------------- +// Determine the layout (touch, non-touch, landscape, portrait, rocker, etc...) +// --------------------------------------------------------------------------- +// +EXPORT_C TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::DetermineLayoutVariant() + { + TMPXPbvLayoutVariants variant(EPbvUndefinedVariant); + + TInt flags( 0 ); + CRepository* repository = CRepository::NewL( KCRUidMPXMPFeatures ); + User::LeaveIfError( repository->Get( KMPXMPLocalVariation, flags )); + delete repository; + repository = NULL; + TBool showRockerGraphics = static_cast( flags & KMPXRockerMappingSupport ); + + TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation(); + + TBool isTouch = AknLayoutUtils::PenEnabled(); + + if (isTouch && !isLandscape ) + { + variant = EPbvPortraitNhdTouchWithFM; + } + else if (isTouch && isLandscape) + { + variant = EPbvLandscapeNhdTouchWithFM; + } + else if (!showRockerGraphics && !isLandscape ) + { + variant = EPbvPortraitWithoutRocker; + } + else if (!showRockerGraphics && isLandscape) + { + variant = EPbvLandscapeWithoutRocker; + } + else if (showRockerGraphics && !isLandscape) + { + variant = EPbvPortraitWithRocker; + } + else if (showRockerGraphics && isLandscape) + { + variant = EPbvLandscapeWithRocker; + } + + + return(variant); + } + +// --------------------------------------------------------------------------- +// Determine the layout variant for a text item +// --------------------------------------------------------------------------- +// +EXPORT_C TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::GetTextVariant(TMPXPbvTextIndicator aText) + { + TMPXPbvLayoutVariants layoutVariant = DetermineLayoutVariant(); + TMPXPbvLayoutVariants textVariant; + switch ( aText ) + { + case ETextTrack: + case ETextArtist: + case ETextPlaylistCount: + case ETextFMFrequency: + { + textVariant = layoutVariant; + break; + } + case ETextEmpty: + case ETextElapsedTime: + case ETextRemainingTime: + case ETextDownloadState: + { + textVariant = static_cast (0); // always 0 regardless of layout variant + break; + } + default: + { + textVariant = EPbvUndefinedVariant; + } + } + + return(textVariant); + } + +// --------------------------------------------------------------------------- +// Determine the layout variant type for an indicator item +// --------------------------------------------------------------------------- +// +EXPORT_C TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::GetIndicatorVariant(TMPXPbvIndicator aIndicator) + { + TMPXPbvLayoutVariants layoutVariant = DetermineLayoutVariant(); + TMPXPbvLayoutVariants indicatorVariant; + switch ( aIndicator ) + { + case EAlbumArtArea: + case EIconRepeatOne: + case EIconRepeatAll: + case EIconRandom: + case EIconPlay: + case EIconStop: + case EIconPause: + case ESliderPane: + case ESliderBackground: + case EPlaybackSlider: + case EDownloadSlider: + case EIconReal: + { + indicatorVariant = layoutVariant; + break; + } + case EIconFastForward: + case EIconRewind: + case EIconRemotePlayer: + case EBackgroundGraphic: + { + indicatorVariant = EPbvUndefinedVariant; + break; + } + + default: + { + indicatorVariant = EPbvUndefinedVariant; + } + } + + return(indicatorVariant); + } + +// End of File