menucontentsrv/extsrc/mcsmenuiconutility.cpp
changeset 85 7feec50967db
parent 4 1a2a00e78665
child 86 e492551a0d54
--- 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 <e32base.h>
-#include <AknsUtils.h> 
-#include <mcsmenu.h>
-#include <mcsmenuitem.h>
-#include <mcsmenuutils.h>
-#include <SATDomainPSKeys.h>
-#include <e32property.h>
-#include <apgcli.h>
-#include <AknInternalIconUtils.h>
-
-#include "mcssathandler.h"
-
-//#include "mcsextendedmenuitem.h"
-#include "mcsmenuiconutility.h"
-#include <mcsdef.h>
-
-// 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<TSize>* sizes = new(ELeave) CArrayFixFlat<TSize>( 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;
-	}
-