diff -r 000000000000 -r 05e9090e2422 skins/AknSkins/rlsrc/AknsRlMasterLayout.cpp --- /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 +#include +#include +#include "layoutmetadata.cdl.h" +#include +#include +#include +#include +#include + +#include + +// for reading the grid mode +#include + +// 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