diff -r 1a2a00e78665 -r 7feec50967db menucontentsrv/extsrc/mcsmenuiconutility.cpp --- a/menucontentsrv/extsrc/mcsmenuiconutility.cpp Tue Feb 02 00:23:10 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,463 +0,0 @@ -/* -* Copyright (c) 2008 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: The API supports requesting raw bitmaps -* Version : %version: 11 % << Don't touch! Updated by Synergy at check-out. -* -*/ - - -// INCLUDE FILES - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "mcssathandler.h" - -//#include "mcsextendedmenuitem.h" -#include "mcsmenuiconutility.h" -#include - -// Constants -_LIT( KMifIconPath, "\\resource\\apps\\" ); -const TUint32 KMifIconPathLenght = 18; -const TInt KJavaIconWidth = 88; // Java icon default width -const TInt KJavaIconHeight = 88; // Java icon default height - - - -// ================= LOCAL FUNCTIONS ======================== - - -// ----------------------------------------------------------------------------- -// CreateMbmIconLC2 - Creates bitmap -// ----------------------------------------------------------------------------- -// -LOCAL_C TBool CreateMbmIconLC2(CFbsBitmap*& aBitmap, CFbsBitmap*& aMask, const TDesC& aAppUid ) - { - TBool ret = EFalse; - TSize size( KJavaIconWidth, KJavaIconHeight ); - - aBitmap = NULL; - aMask = NULL; - - RApaLsSession lsSession; - User::LeaveIfError( lsSession.Connect() ); - CleanupClosePushL( lsSession ); // lsSession (1) - - TUint appUidUint; - - // Gets app TUid from aAppUid descryptor - User::LeaveIfError( MenuUtils::GetTUint( aAppUid, appUidUint ) ); - TUid appUid( TUid::Uid( appUidUint) ); - - // Tries to find icon with default size. - CApaMaskedBitmap* apaBmp = CApaMaskedBitmap::NewLC(); - TInt apaErr = lsSession.GetAppIcon( appUid, size, *apaBmp ); - if ( apaErr == KErrNotFound ) - { - // Icon not found. - // AppArc tries to find equal to or smaller than the specified size. - // Get all icon sizes and search for next bigger icon size. - CArrayFixFlat* sizes = new(ELeave) CArrayFixFlat( 5 ); - apaErr = lsSession.GetAppIconSizes(appUid, *sizes); - if ( !apaErr ) - { - if ( sizes->Count() ) - { - // There are other icon sizes - TInt idx = -1; - TInt square( size.iWidth * size.iHeight ); - for ( TInt i = 0; i < sizes->Count(); i++ ) - { - if ( ( sizes->At( i ).iWidth * sizes->At( i ).iHeight ) > square ) - { - idx = i; - break; - } - } - - if ( idx >= 0 ) - { - // Next bigger icon. - size = sizes->At( idx ); - } - else - { - // Just get the first available. - size = sizes->At( 0 ); - } - } - - // Gets icon with new size. - apaErr = lsSession.GetAppIcon( appUid, size, *apaBmp ); - } - - // Reset and destroy. - sizes->Reset(); - delete sizes; - sizes = NULL; - } - - // Some builds requires brackets - // logical correction was also made - if ( ( apaErr != KErrNone ) && - ( apaErr != KErrNotFound ) && - ( apaErr != KErrNotSupported ) ) - { - // System wide error. - User::LeaveIfError( apaErr ); - } - - if( !apaErr && - apaBmp && - apaBmp->Mask() && - apaBmp->Handle() && - apaBmp->Mask()->Handle()) - { - // AIF-based icon - CFbsBitmap* iconOwnedBitmap = new (ELeave) CFbsBitmap(); - CleanupStack::PushL( iconOwnedBitmap ); // iob (3) - CFbsBitmap* iconOwnedMask = new (ELeave) CFbsBitmap(); - CleanupStack::PushL( iconOwnedMask ); // iom (4) - User::LeaveIfError( - iconOwnedBitmap->Duplicate( apaBmp->Handle() ) ); - User::LeaveIfError( - iconOwnedMask->Duplicate( apaBmp->Mask()->Handle() ) ); - - CAknIcon* tmpIcon = CAknIcon::NewL(); - - // Ownership is transferred - tmpIcon->SetBitmap( iconOwnedBitmap ); - tmpIcon->SetMask( iconOwnedMask ); - // Ownership of tmpIcon is transferred - CAknIcon* appIcon = AknIconUtils::CreateIconL( tmpIcon ); - CleanupStack::Pop( 2 ); // iom, iob (2) - - aBitmap = appIcon->Bitmap(); - aMask = appIcon->Mask(); - AknInternalIconUtils::SetAppIcon(aBitmap); - - // Detach and delete - appIcon->SetBitmap( NULL ); - appIcon->SetMask( NULL ); - delete appIcon; - - ret = ETrue; - } - - CleanupStack::PopAndDestroy( 2 ); // lsSession, apaBmp (0) - - // These are both safe - if ( aBitmap ) - { - CleanupStack::PushL( aBitmap ); // (1) - CleanupStack::PushL( aMask ); // (2) - } - - return ret; - } - - -// --------------------------------------------------------- -// ParseIconFilePathL -// --------------------------------------------------------- -// - -LOCAL_C void ParseIconFilePathL( const TDesC& aIconFilePath, RBuf& aIconFilePathBuf ) - { - TParsePtrC fileParsePtrC(aIconFilePath); - if( !fileParsePtrC.PathPresent()) - { - aIconFilePathBuf.CreateL(KMifIconPathLenght + aIconFilePath.Length()); - aIconFilePathBuf.Append(KMifIconPath); - } - else - { - aIconFilePathBuf.CreateL(aIconFilePath.Length()); - } - aIconFilePathBuf.Append(aIconFilePath); - } - -// --------------------------------------------------------- -// LoadSkinL -// --------------------------------------------------------- -// -LOCAL_C CAknIcon* LoadSkinL( TUint majorId, TUint minorId ) - { - CAknIcon* icon = NULL; - CFbsBitmap* bitmap( 0 ); - CFbsBitmap* mask( 0 ); - - TAknsItemID skinId; - skinId.Set( majorId, minorId ); - - AknsUtils::CreateIconLC( - AknsUtils::SkinInstance(), - skinId, - bitmap, - mask, - KNullDesC, - KErrNotFound, - KErrNotFound ); - - icon = CAknIcon::NewL(); - icon->SetBitmap( bitmap ); - icon->SetMask( mask ); - - // bitmap and icon, AknsUtils::CreateIconLC doesn't specify the order - CleanupStack::Pop( 2 ); - - return icon; - } - -// --------------------------------------------------------- -// LoadSkinL -// --------------------------------------------------------- -// -LOCAL_C CAknIcon* LoadAppSkinL( TUid& aAppUid ) - { - CAknIcon* icon = NULL; - CFbsBitmap* bitmap( 0 ); - CFbsBitmap* mask( 0 ); - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - - TRAPD( err, - { - AknsUtils::CreateAppIconLC( skin, aAppUid, EAknsAppIconTypeList, bitmap, mask ); - CleanupStack::Pop(2); //for trap - } - ); - if( err == KErrNone ) - { - icon = CAknIcon::NewL(); - icon->SetBitmap( bitmap ); - icon->SetMask( mask ); - } - return icon; - } - -// --------------------------------------------------------- -// GetSkinL -// --------------------------------------------------------- -// -LOCAL_C CAknIcon* GetSkinL( CMenuItem& aItem ) - { - CAknIcon* icon = NULL; - TUint majorId( 0 ); - TUint minorId( 0 ); - TPtrC idString( KNullDesC ); - TBool attrExists; - - idString.Set( aItem.GetAttributeL( KMenuAttrIconSkinMajorId, attrExists ) ); - if ( attrExists && idString.Length() ) - { - User::LeaveIfError( MenuUtils::GetTUint( idString, majorId ) ); - } - else - { - return NULL; - } - - idString.Set( aItem.GetAttributeL( KMenuAttrIconSkinMinorId, attrExists ) ); - if ( attrExists && idString.Length() ) - { - User::LeaveIfError( MenuUtils::GetTUint( idString, minorId ) ); - } - else - { - return NULL; - } - - icon = LoadSkinL( majorId, minorId ); - - return icon; - } - -// --------------------------------------------------------- -// GetIconL -// --------------------------------------------------------- -// -LOCAL_C CAknIcon* GetIconL( CMenuItem& aItem ) - { - CAknIcon* icon = NULL; - TUint iconId( 0 ); - TUint maskId( 0 ); - TPtrC attrStr( KNullDesC ); - TBool attrExists; - - TPtrC iconFilePath( aItem.GetAttributeL( KMenuAttrIconFile, attrExists ) ); - - if ( !attrExists ) - { - return NULL; - } - - attrStr.Set( aItem.GetAttributeL( KMenuAttrIconId, attrExists ) ); - if ( attrExists ) - { - User::LeaveIfError( MenuUtils::GetTUint( attrStr, iconId ) ); - } - else - { - return NULL; - } - - attrStr.Set( aItem.GetAttributeL( KMenuAttrMaskId, attrExists ) ); - if ( attrExists ) - { - User::LeaveIfError( MenuUtils::GetTUint( attrStr, maskId ) ); - } - else - { - return NULL; - } - - CFbsBitmap* bitmap( 0 ); - CFbsBitmap* mask( 0 ); - - RBuf pathBuf; - pathBuf.CleanupClosePushL(); - ParseIconFilePathL(iconFilePath, pathBuf); - - AknIconUtils::CreateIconLC( bitmap, mask, pathBuf, iconId, maskId ); - icon = CAknIcon::NewL(); - icon->SetBitmap( bitmap ); - icon->SetMask( mask ); - CleanupStack::Pop( 2 ); - - CleanupStack::PopAndDestroy( &pathBuf ); - - return icon; - } - - - - -// --------------------------------------------------------- -// GetDefaultSkinL -// --------------------------------------------------------- -// -LOCAL_C CAknIcon* GetDefaultSkinL( CMenuItem& aItem ) - { - CAknIcon* icon = NULL; - - if ( KErrNone == aItem.Type().Compare( KMenuTypeApp ) ) - { - TBool attrExists( EFalse ); - TPtrC appUidDes( aItem.GetAttributeL( KMenuAttrUid, attrExists ) ); - if( appUidDes == KMenuSatUiUid ) - { - CMcsSatHandler* satHandler = CMcsSatHandler::NewL(); - CleanupStack::PushL( satHandler ); - icon = satHandler->LoadIconL(); - CleanupStack::PopAndDestroy( satHandler ); - } - if( !icon ) - { - if( aItem.GetAttributeL( KMenuAttrNative, attrExists ) == KMenuFalse ) - { - CFbsBitmap* bitmap( 0 ); - CFbsBitmap* mask( 0 ); - //for native - if( CreateMbmIconLC2( bitmap, mask, appUidDes ) ) - { - icon = CAknIcon::NewL(); - icon->SetBitmap( bitmap ); - icon->SetMask( mask ); - CleanupStack::Pop( 2 ); - } - } - if( !icon ) - { - TUint appUid; - TUid uid; - TInt err = MenuUtils::GetTUint( appUidDes, appUid ); - if ( !err ) - { - uid = TUid::Uid( appUid ); - icon = LoadAppSkinL( uid ); - } - } - if( !icon ) - { - icon = LoadSkinL( - KAknsIIDQgnMenuUnknownLst.iMajor, - KAknsIIDQgnMenuUnknownLst.iMinor ); - } - } - } - else if ( KErrNone == aItem.Type().Compare( KMenuTypeFolder ) ) - { - TUint childrenCount; - TBool attrExists( EFalse ); - TInt err = MenuUtils::GetTUint( - aItem.GetAttributeL( KChildrenCount, attrExists ), childrenCount ); - - if( childrenCount > 0 ) - { - icon = LoadSkinL( - KAknsIIDQgnPropFolderAppsMedium.iMajor, - KAknsIIDQgnPropFolderAppsMedium.iMinor ); - } - else - { - icon = LoadSkinL( - KAknsIIDQgnMenuFolderEmpty.iMajor, - KAknsIIDQgnMenuFolderEmpty.iMinor ); - - } - - } - - return icon; - } - -// ================= MEMBER FUNCTIONS ======================= - - -// --------------------------------------------------------- -// MenuIconUtility::GetItemIconL -// --------------------------------------------------------- -// -EXPORT_C CAknIcon* MenuIconUtility::GetItemIconL( CMenuItem& aItem ) - { - CAknIcon* icon = NULL; - // Try to get the skin of the item - TRAP_IGNORE(icon = GetSkinL( aItem )); - if ( icon ) - { - return icon; - } - - // Try to get the icon of the item (skin failed) - TRAP_IGNORE(icon = GetIconL( aItem )); - if ( icon ) - { - return icon; - } - - // Return a default (skin and icon failed) - icon = GetDefaultSkinL( aItem ); - - return icon; - } -