uiacceltk/hitchcock/coretoolkit/src/huiskinbackgroundlayout.cpp
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/coretoolkit/src/huiskinbackgroundlayout.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,434 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+
+#include <AknUtils.h>
+#include <uiacceltk/HuiStatic.h>
+
+#include "huiskinbackroundlayout.h"
+
+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();
+    }
+
+
+TAknsItemID 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;
+    }
+    
+TBool GetItemLayout( const TAknsItemID& aIID,
+    const TRect& aParentRect, TRect& aRect  )
+    {
+    if (!CCoeEnv::Static())
+        { //ToDO
+        aRect = aParentRect;
+        return ETrue;
+        }
+    //---------------------------------------
+    const AknLayoutScalable_Avkon::CInstance& iAknLayoutScalable_Avkon = AknLayoutScalable_Avkon::CustomisationInstance();
+    TAknWindowLineLayout screenLayout = AknLayout::screen();
+    TRect iScreenRect = screenLayout.Rect();
+    //---------------------------------------
+    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:
+            case EAknsMinorQsnBgAreaMainMp:
+                {
+                layRect.LayoutRect( normParentRect,
+                    AknLayout::main_pane( normParentRect, 0, 0, 1 ) );
+                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;
+    }
+
+EXPORT_C void GetRectForItem(const TAknsItemID& aID, TRect& aParentRect, TRect& aOutRect)
+    {
+    TAknsItemID parent = GetParent(aID);
+    TRect parentRect;
+    TRect itemRect;
+
+    if (parent != KAknsIIDDefault)//KAknsIIDNone) // go recursively down to the root element
+        {
+        GetRectForItem(parent, aParentRect, aOutRect);
+        }
+    else // root element
+        {
+        CHuiStatic::LayoutMetricsRect(AknLayoutUtils::EScreen,  aParentRect);
+        }
+    GetItemLayout( aID,aParentRect, aOutRect );
+    aParentRect = aOutRect;
+    }