mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewlayout.cpp
changeset 0 ff3acec5bc43
child 15 a1247965635c
--- /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 <AknsUtils.h>
+#include <AknUtils.h>
+#include <barsread.h>
+#include <gulicon.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <data_caging_path_literals.hrh>
+#include <mpxcommonplaybackview.rsg>
+#include <mpxcommonplaybackview.mbg>
+#include <mpxfmtx.rsg> // For FF_FMTX
+#include <featmgr.h>
+#include <centralrepository.h>
+#include <mpxinternalcrkeys.h>
+#include <mpxlbxextendedfeatures.h>
+#include <mpxlog.h>
+#include <mpxuser.h>
+
+#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<TBool>( 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<TMPXPbvLayoutVariants> (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