skins/AknSkins/rlsrc/AknsRlMasterLayout.cpp
changeset 0 05e9090e2422
child 1 ba33815114d6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/rlsrc/AknsRlMasterLayout.cpp	Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,567 @@
+/*
+* Copyright (c) 2004-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:  Master layout class.
+*
+*/
+
+
+// INCLUDE FILES
+#include "AknsRlMasterLayout.h"
+
+#include <aknlayout.cdl.h>
+#include <skinlayout.cdl.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include "layoutmetadata.cdl.h"
+#include <AknUtils.h>
+#include <AknSgcc.h>
+#include <AknStatuspaneUtils.h>
+#include <CdlEngine.h>
+#include <aknenv.h>
+
+#include <AknsConstants.h>
+
+// for reading the grid mode
+#include <centralrepository.h>
+
+// CONSTANTS
+
+// INTERNAL CLASSES
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+TInt GetGridModeL()
+    {
+    CRepository* repository = CRepository::NewL( TUid::Uid( 0x101F8847 ) );  // KCRUidMenu
+    CleanupStack::PushL( repository );
+    TInt gridMode;
+    User::LeaveIfError( repository->Get( (TUint32)(0x00000007), gridMode ) ); // //KMenuGridMode
+    CleanupStack::PopAndDestroy( repository );
+    return gridMode;
+    }
+
+
+// -----------------------------------------------------------------------------
+// Retrieves the given scalable layout (using the given intermediate pane)
+//
+// -----------------------------------------------------------------------------
+//
+static inline void GetScalableViaPane( TRect& aRect, const TRect& aParentRect,
+    const TAknWindowComponentLayout& aIntermediateLayout,
+    const TAknWindowComponentLayout& aFinalLayout )
+    {
+    TAknLayoutRect layout;
+    layout.LayoutRect( aParentRect,
+        TAknWindowComponentLayout::Compose(
+        aIntermediateLayout, aFinalLayout).LayoutLine() );
+    aRect = layout.Rect();
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAknsRlMasterLayout::CAknsRlMasterLayout
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CAknsRlMasterLayout::CAknsRlMasterLayout()
+: iGridMode(-1), iAknLayoutScalable_Avkon(AknLayoutScalable_Avkon::CustomisationInstance())
+    {
+    UpdateCachedLayoutData();
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CAknsRlMasterLayout::~CAknsRlMasterLayout()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsRlMasterLayout::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknsRlMasterLayout* CAknsRlMasterLayout::NewL()
+    {
+    CAknsRlMasterLayout* self =
+        new (ELeave) CAknsRlMasterLayout();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsRlMasterLayout::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CAknsRlMasterLayout::ConstructL()
+    {
+    AknLayoutScalable_Avkon::SetCustomisationChangeObserverL(this);
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsRlMasterLayout::GetParent
+// (commented in the header)
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TAknsItemID CAknsRlMasterLayout::GetParent( const TAknsItemID& aIID )
+    {
+    if( aIID.iMajor == EAknsMajorSkin )
+        {
+        switch( aIID.iMinor )
+            {
+            case EAknsMinorQsnBgScreen:
+                return KAknsIIDNone;
+
+            case EAknsMinorQsnBgScreenIdle:
+            case EAknsMinorQsnBgScreenMp:
+                return KAknsIIDQsnBgScreen;
+            case EAknsMinorQsnBgAreaMain:
+            case EAknsMinorQsnBgAreaMainAppsGrid:
+            case EAknsMinorQsnBgAreaMainListGene:
+            case EAknsMinorQsnBgAreaMainListSet:
+            case EAknsMinorQsnBgAreaMainMessage:
+                return KAknsIIDQsnBgScreen;
+
+            case EAknsMinorQsnBgAreaMainHigh:
+            case EAknsMinorQsnBgAreaMainCalc:
+            case EAknsMinorQsnBgAreaMainPinb:
+            case EAknsMinorQsnBgAreaMainQdial:
+                return KAknsIIDQsnBgScreen;
+
+            case EAknsMinorQsnBgAreaMainMp:
+                return KAknsIIDQsnBgScreenMp;
+
+            case EAknsMinorQsnBgAreaMainFlat:
+            case EAknsMinorQsnBgAreaMainSmall:
+                return KAknsIIDQsnBgScreen;
+#ifdef RD_FULLSCREEN_WALLPAPER
+            case EAknsMinorWallpaper:
+                return KAknsIIDQsnBgScreenIdle;
+#else
+            case EAknsMinorWallpaper:
+                return KAknsIIDQsnBgAreaMainIdle;
+#endif //RD_FULLSCREEN_WALLPAPER
+
+            case EAknsMinorQsnBgAreaMainIdle:
+            case EAknsMinorQsnBgAreaMainIdleDimmed:
+#ifdef RD_FULLSCREEN_WALLPAPER
+                return KAknsIIDWallpaper;
+#else
+                return KAknsIIDQsnBgScreenIdle;
+#endif // RD_FULLSCREEN_WALLPAPER
+
+            case EAknsMinorQsnBgAreaStatus:
+                return KAknsIIDQsnBgScreen;
+
+            case EAknsMinorQsnBgAreaStatusIdle:
+                return KAknsIIDQsnBgScreenIdle;
+
+            case EAknsMinorQsnBgAreaStaconRt:
+            case EAknsMinorQsnBgAreaStaconLt:
+            case EAknsMinorQsnBgAreaStaconRb:
+            case EAknsMinorQsnBgAreaStaconLb:
+                return KAknsIIDQsnBgScreen;
+
+            case EAknsMinorQsnBgAreaStaconRtIdle:
+            case EAknsMinorQsnBgAreaStaconLtIdle:
+            case EAknsMinorQsnBgAreaStaconRbIdle:
+            case EAknsMinorQsnBgAreaStaconLbIdle:
+                return KAknsIIDQsnBgScreenIdle;
+
+            case EAknsMinorQsnBgAreaControl:
+            case EAknsMinorQsnBgAreaControlPopup:
+                return KAknsIIDQsnBgScreen;
+
+            case EAknsMinorQsnBgAreaControlMp:
+                return KAknsIIDQsnBgScreenMp;
+
+            case EAknsMinorQsnBgAreaControlIdle:
+                return KAknsIIDQsnBgScreenIdle;
+
+            case EAknsMinorQsnBgColumn0:
+            case EAknsMinorQsnBgColumnA:
+            case EAknsMinorQsnBgColumnAB:
+            case EAknsMinorQsnBgColumnC0:
+            case EAknsMinorQsnBgColumnCA:
+            case EAknsMinorQsnBgColumnCAB:
+                return KAknsIIDQsnBgAreaMainListGene;
+
+            case EAknsMinorQsnBgSliceList0:
+            case EAknsMinorQsnBgSliceListA:
+            case EAknsMinorQsnBgSliceListAB:
+                return KAknsIIDQsnBgAreaMainListGene;
+
+            // INSERTION POINT for layout parent relations
+            }
+        }
+    else if( aIID.iMajor == EAknsMajorAvkon )
+        {
+        switch( aIID.iMinor )
+            {
+            case EAknsMinorQsnBgNavipaneSolid:
+            case EAknsMinorQsnBgNavipaneWipe:
+                return KAknsIIDQsnBgAreaStatus;
+
+            case EAknsMinorQsnBgNavipaneSolidIdle:
+            case EAknsMinorQsnBgNavipaneWipeIdle:
+                return KAknsIIDQsnBgAreaStatusIdle;
+            }
+        }
+
+    return KAknsIIDDefault;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsRlMasterLayout::GetItemLayout
+// (commented in the header)
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CAknsRlMasterLayout::GetItemLayout( const TAknsItemID& aIID,
+    const TRect& aParentRect, TRect& aRect  )
+    {
+    TRect normParentRect( TPoint(0,0), aParentRect.Size() );
+
+    TAknLayoutRect layRect;
+
+    if( aIID.iMajor == EAknsMajorSkin ) {
+        switch( aIID.iMinor )
+            {
+            case EAknsMinorQsnBgScreen:
+#ifdef RD_FULLSCREEN_WALLPAPER
+            case EAknsMinorWallpaper:
+#endif //RD_FULLSCREEN_WALLPAPER
+                {
+                aRect = iScreenRect;
+                return ETrue;
+                }
+            case EAknsMinorQsnBgScreenIdle:
+            case EAknsMinorQsnBgScreenMp:
+                {
+                aRect = normParentRect;
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgAreaMainAppsGrid:
+                {
+                if (iGridMode == -1)
+                    {
+                    // if gridmode is -1, it has not beed read
+                    // so read it here
+                    TRAP_IGNORE( iGridMode = GetGridModeL() );
+                    }
+                if (!Layout_Meta_Data::IsLandscapeOrientation() && iGridMode == 1) //3x4 mode
+                    {
+                    layRect.LayoutRect( normParentRect,
+                        iAknLayoutScalable_Avkon.main_pane(7));
+                    aRect = layRect.Rect();
+                    return ETrue;
+                    }
+                else // normal 3x3 mode
+                    {
+                    return AknLayoutUtils::LayoutMetricsRect(
+                        AknLayoutUtils::EMainPane, aRect );
+                    }
+                }
+
+            case EAknsMinorQsnBgAreaMain:
+            case EAknsMinorQsnBgAreaMainListGene:
+            case EAknsMinorQsnBgAreaMainListSet:
+            case EAknsMinorQsnBgAreaMainMessage:
+                layRect.LayoutRect( normParentRect,
+                AknLayout::main_pane( normParentRect, 0, 1, 1 ) );
+                aRect = layRect.Rect();
+                return ETrue;
+
+            case EAknsMinorQsnBgAreaMainFlat:
+                {
+                layRect.LayoutRect( normParentRect,
+                     iAknLayoutScalable_Avkon.main_pane(7));
+                    aRect = layRect.Rect();
+                    return ETrue;
+                }
+            case EAknsMinorQsnBgAreaMainSmall:
+                   {
+                   layRect.LayoutRect( normParentRect,
+                    iAknLayoutScalable_Avkon.main_pane(6));
+                    aRect = layRect.Rect();
+                    return ETrue;
+                  }
+
+            case EAknsMinorQsnBgAreaMainHigh:
+            case EAknsMinorQsnBgAreaMainCalc:
+            case EAknsMinorQsnBgAreaMainPinb:
+            case EAknsMinorQsnBgAreaMainQdial:
+                {
+                layRect.LayoutRect( normParentRect,
+                    AknLayout::main_pane( normParentRect, 0, 0, 1 ) );
+                aRect = layRect.Rect();
+                return ETrue;
+                }
+            case EAknsMinorQsnBgAreaMainMp:
+            	{
+            	if ( Layout_Meta_Data::IsLandscapeOrientation() )
+            		{
+            		layRect.LayoutRect( normParentRect,
+            				AknLayout::main_pane( normParentRect, 0, 0, 1 ) );
+            		aRect = layRect.Rect();
+            		}
+            	else
+            		{
+            		layRect.LayoutRect( normParentRect,
+            			iAknLayoutScalable_Avkon.main_pane(7));
+            		aRect = layRect.Rect();
+            		}
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgAreaMainIdle:
+            case EAknsMinorQsnBgAreaMainIdleDimmed:
+                {
+                layRect.LayoutRect( normParentRect,
+                    AknLayout::main_pane( normParentRect, 0, 1, 1 ) );
+                aRect = layRect.Rect();
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgAreaStatus:
+                {
+                GetScalableViaPane( aRect, normParentRect,
+                    iAknLayoutScalable_Avkon.area_top_pane(0),
+                    iAknLayoutScalable_Avkon.status_pane(0) );
+
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgAreaStatusIdle:
+                {
+                GetScalableViaPane( aRect, normParentRect,
+                    iAknLayoutScalable_Avkon.area_top_pane(0),
+                    iAknLayoutScalable_Avkon.status_pane(0) );
+
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgAreaStaconRt:
+            case EAknsMinorQsnBgAreaStaconLt:
+            case EAknsMinorQsnBgAreaStaconRtIdle:
+            case EAknsMinorQsnBgAreaStaconLtIdle:
+                {
+                GetScalableViaPane( aRect, normParentRect,
+                    iAknLayoutScalable_Avkon.area_top_pane(2),
+                    iAknLayoutScalable_Avkon.stacon_top_pane() );
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgAreaStaconRb:
+            case EAknsMinorQsnBgAreaStaconLb:
+            case EAknsMinorQsnBgAreaStaconRbIdle:
+            case EAknsMinorQsnBgAreaStaconLbIdle:
+                {
+                GetScalableViaPane( aRect, normParentRect,
+                    iAknLayoutScalable_Avkon.area_bottom_pane(2),
+                    iAknLayoutScalable_Avkon.stacon_bottom_pane() );
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgAreaControl:
+            case EAknsMinorQsnBgAreaControlPopup:
+            case EAknsMinorQsnBgAreaControlIdle:
+            case EAknsMinorQsnBgAreaControlMp:
+                {
+                layRect.LayoutRect( normParentRect,
+                    AknLayout::control_pane( normParentRect) );
+                aRect = layRect.Rect();
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgColumn0:
+                {
+                layRect.LayoutRect( normParentRect,
+                    SkinLayout::Column_background_and_list_slice_skin_placing_Line_1() );
+                aRect = layRect.Rect();
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgColumnA:
+                {
+                layRect.LayoutRect( normParentRect,
+                    SkinLayout::Column_background_and_list_slice_skin_placing_Line_2() );
+                aRect = layRect.Rect();
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgColumnAB:
+                {
+                layRect.LayoutRect( normParentRect,
+                    SkinLayout::Column_background_and_list_slice_skin_placing_Line_3() );
+                aRect = layRect.Rect();
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgColumnC0:
+                {
+                layRect.LayoutRect( normParentRect,
+                    SkinLayout::Column_background_and_list_slice_skin_placing_Line_4() );
+                aRect = layRect.Rect();
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgColumnCA:
+                {
+                layRect.LayoutRect( normParentRect,
+                    SkinLayout::Column_background_and_list_slice_skin_placing_Line_5() );
+                aRect = layRect.Rect();
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgColumnCAB:
+                {
+                layRect.LayoutRect( normParentRect,
+                    SkinLayout::Column_background_and_list_slice_skin_placing_Line_6() );
+                aRect = layRect.Rect();
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgSliceList0:
+            case EAknsMinorQsnBgSliceListA:
+            case EAknsMinorQsnBgSliceListAB:
+                {
+                layRect.LayoutRect( normParentRect,
+                    SkinLayout::Column_background_and_list_slice_skin_placing_Line_7() );
+                aRect = layRect.Rect();
+                return ETrue;
+                }
+#ifndef RD_FULLSCREEN_WALLPAPER
+            case EAknsMinorWallpaper:
+                {
+                aRect = normParentRect;
+                return ETrue;
+                }
+#endif //RD_FULLSCREEN_WALLPAPER
+
+            // INSERTION POINT for layout information retrieval
+            }
+        }
+    else if( aIID.iMajor == EAknsMajorAvkon )
+        {
+        switch( aIID.iMinor )
+            {
+            case EAknsMinorQsnBgNavipaneSolid:
+                {
+                layRect.LayoutRect( normParentRect,
+                    iAknLayoutScalable_Avkon.status_pane_g1(0) );
+                aRect = layRect.Rect();
+                // Artificial correction
+                aRect.iTl.iX = 0;
+                aRect.SetWidth( aParentRect.Width() );
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgNavipaneWipe:
+                {
+                layRect.LayoutRect( normParentRect,
+                    iAknLayoutScalable_Avkon.status_pane_g1(0) );
+                aRect = layRect.Rect();
+                // Artificial correction
+                aRect.iTl.iX = 0;
+                aRect.SetWidth( aParentRect.Width() );
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgNavipaneSolidIdle:
+                {
+                layRect.LayoutRect( normParentRect,
+                    iAknLayoutScalable_Avkon.status_pane_g1(0) );
+                aRect = layRect.Rect();
+                // Artificial correction
+                aRect.iTl.iX = 0;
+                aRect.SetWidth( aParentRect.Width() );
+                return ETrue;
+                }
+
+            case EAknsMinorQsnBgNavipaneWipeIdle:
+                {
+                layRect.LayoutRect( normParentRect,
+                    iAknLayoutScalable_Avkon.status_pane_g1(0) );
+                aRect = layRect.Rect();
+                // Artificial correction
+                aRect.iTl.iX = 0;
+                aRect.SetWidth( aParentRect.Width() );
+                return ETrue;
+                }
+            }
+        }
+
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsRlMasterLayout::CurrentLayoutType
+// (commented in the header)
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknsRlMasterLayout::CurrentLayoutType()
+    {
+    if (!iLayoutId)
+        {
+        TCdlRef ref = iAknLayoutScalable_Avkon.CustomisationInstance().Ref();
+        TLex lex(ref.iName->Mid(2,ref.iName->Length()-4));
+        TUint value = 0;
+        lex.Val(value, EHex);
+        iLayoutId = (TInt)(value);
+        }
+    return iLayoutId;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsRlMasterLayout::CurrentLayoutSize
+// (commented in the header)
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TSize CAknsRlMasterLayout::CurrentLayoutSize()
+    {
+    return iScreenRect.Size();
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsRlMasterLayout::HandleCustomisationChangeL
+// (commented in the header)
+// -----------------------------------------------------------------------------
+//
+void CAknsRlMasterLayout::HandleCustomisationChangeL(const CCdlUids& /*aUids*/)
+    {
+    UpdateCachedLayoutData();
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsRlMasterLayout::UpdateCachedLayoutData
+// (commented in the header)
+// -----------------------------------------------------------------------------
+//
+void CAknsRlMasterLayout::UpdateCachedLayoutData()
+    {
+    TCdlRef ref = iAknLayoutScalable_Avkon.CustomisationInstance().Ref();
+    TLex lex(ref.iName->Mid(2,ref.iName->Length()-4));
+    TUint value = 0;
+    lex.Val(value, EHex);
+    iLayoutId = (TInt)(value);
+
+    TAknWindowLineLayout screenLayout = AknLayout::screen();
+    iScreenRect = screenLayout.Rect();
+    }
+
+// End of File