contentstorage/extsrc/caiconutility.cpp
author hgs
Tue, 23 Mar 2010 23:28:12 +0200
changeset 86 e492551a0d54
parent 85 7feec50967db
child 87 9d806967057c
permissions -rw-r--r--
201005
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
85
7feec50967db 201003_02
hgs
parents:
diff changeset
     1
/*
7feec50967db 201003_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
7feec50967db 201003_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
7feec50967db 201003_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
7feec50967db 201003_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
7feec50967db 201003_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
7feec50967db 201003_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
7feec50967db 201003_02
hgs
parents:
diff changeset
     8
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
7feec50967db 201003_02
hgs
parents:
diff changeset
    11
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    12
 * Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    13
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    14
 * Description:  The API supports requesting raw bitmaps
7feec50967db 201003_02
hgs
parents:
diff changeset
    15
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    16
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    17
7feec50967db 201003_02
hgs
parents:
diff changeset
    18
// INCLUDE FILES
7feec50967db 201003_02
hgs
parents:
diff changeset
    19
#include <e32base.h>
86
hgs
parents: 85
diff changeset
    20
#include <AknsUtils.h>
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    21
#include <SATDomainPSKeys.h>
7feec50967db 201003_02
hgs
parents:
diff changeset
    22
#include <e32property.h>
7feec50967db 201003_02
hgs
parents:
diff changeset
    23
#include <apgcli.h>
86
hgs
parents: 85
diff changeset
    24
#include <AknInternalIconUtils.h>
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    25
#include "cadef.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    26
#include "cautils.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    27
#include "cainnerentry.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    28
#include "camenuiconutility.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    29
#include "caarraycleanup.inl"
7feec50967db 201003_02
hgs
parents:
diff changeset
    30
#include "casathandler.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    31
// Constants
7feec50967db 201003_02
hgs
parents:
diff changeset
    32
_LIT( KMifIconPath, "\\resource\\apps\\" );
7feec50967db 201003_02
hgs
parents:
diff changeset
    33
const TUint32 KMifIconPathLenght = 18;
7feec50967db 201003_02
hgs
parents:
diff changeset
    34
7feec50967db 201003_02
hgs
parents:
diff changeset
    35
// ================= LOCAL FUNCTIONS ========================
7feec50967db 201003_02
hgs
parents:
diff changeset
    36
7feec50967db 201003_02
hgs
parents:
diff changeset
    37
7feec50967db 201003_02
hgs
parents:
diff changeset
    38
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    39
// ParseIconFilePathL
7feec50967db 201003_02
hgs
parents:
diff changeset
    40
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    41
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    42
7feec50967db 201003_02
hgs
parents:
diff changeset
    43
LOCAL_C void ParseIconFilePathL( const TDesC& aIconFilePath,
7feec50967db 201003_02
hgs
parents:
diff changeset
    44
        RBuf& aIconFilePathBuf )
7feec50967db 201003_02
hgs
parents:
diff changeset
    45
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    46
    TParsePtrC fileParsePtrC( aIconFilePath );
7feec50967db 201003_02
hgs
parents:
diff changeset
    47
    if( !fileParsePtrC.PathPresent() )
7feec50967db 201003_02
hgs
parents:
diff changeset
    48
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
    49
        aIconFilePathBuf.CreateL( KMifIconPathLenght
7feec50967db 201003_02
hgs
parents:
diff changeset
    50
                + aIconFilePath.Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
    51
        aIconFilePathBuf.Append( KMifIconPath );
7feec50967db 201003_02
hgs
parents:
diff changeset
    52
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
    53
    else
7feec50967db 201003_02
hgs
parents:
diff changeset
    54
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
    55
        aIconFilePathBuf.CreateL( aIconFilePath.Length() );
7feec50967db 201003_02
hgs
parents:
diff changeset
    56
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
    57
    aIconFilePathBuf.Append( aIconFilePath );
7feec50967db 201003_02
hgs
parents:
diff changeset
    58
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
7feec50967db 201003_02
hgs
parents:
diff changeset
    60
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    61
// LoadSkinL
7feec50967db 201003_02
hgs
parents:
diff changeset
    62
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    63
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    64
LOCAL_C CAknIcon* GetSkinL( TInt majorId, TInt minorId )
7feec50967db 201003_02
hgs
parents:
diff changeset
    65
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    66
    CAknIcon* icon = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
    67
    if( majorId >= 0 && minorId >= 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
    68
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
        CFbsBitmap* bitmap( 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
    70
        CFbsBitmap* mask( 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
    71
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
        TAknsItemID skinId;
7feec50967db 201003_02
hgs
parents:
diff changeset
    73
        skinId.Set( majorId, minorId );
7feec50967db 201003_02
hgs
parents:
diff changeset
    74
7feec50967db 201003_02
hgs
parents:
diff changeset
    75
        MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
7feec50967db 201003_02
hgs
parents:
diff changeset
    76
        if( skinInstance )
7feec50967db 201003_02
hgs
parents:
diff changeset
    77
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
    78
            AknsUtils::CreateIconLC( skinInstance, skinId, bitmap, mask,
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
                    KNullDesC, KErrNotFound, KErrNotFound );
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
            icon = CAknIcon::NewL();
7feec50967db 201003_02
hgs
parents:
diff changeset
    81
            icon->SetBitmap( bitmap );
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
            icon->SetMask( mask );
7feec50967db 201003_02
hgs
parents:
diff changeset
    83
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
7feec50967db 201003_02
hgs
parents:
diff changeset
    85
        // bitmap and icon, AknsUtils::CreateIconLC doesn't specify the order
7feec50967db 201003_02
hgs
parents:
diff changeset
    86
        CleanupStack::Pop( 2 );
7feec50967db 201003_02
hgs
parents:
diff changeset
    87
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
    88
7feec50967db 201003_02
hgs
parents:
diff changeset
    89
    return icon;
7feec50967db 201003_02
hgs
parents:
diff changeset
    90
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    91
7feec50967db 201003_02
hgs
parents:
diff changeset
    92
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    93
// GetAppSkinL
7feec50967db 201003_02
hgs
parents:
diff changeset
    94
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    95
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    96
LOCAL_C CAknIcon* GetAppSkinL( TUid& aAppUid )
7feec50967db 201003_02
hgs
parents:
diff changeset
    97
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    98
    CAknIcon* icon = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
    99
    CFbsBitmap* bitmap( 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   100
    CFbsBitmap* mask( 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   101
7feec50967db 201003_02
hgs
parents:
diff changeset
   102
    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
7feec50967db 201003_02
hgs
parents:
diff changeset
   103
    if( skin )
7feec50967db 201003_02
hgs
parents:
diff changeset
   104
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   105
        TRAPD( err,
7feec50967db 201003_02
hgs
parents:
diff changeset
   106
                    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   107
                    AknsUtils::CreateAppIconLC( skin, aAppUid,
7feec50967db 201003_02
hgs
parents:
diff changeset
   108
                            EAknsAppIconTypeList, bitmap, mask );
7feec50967db 201003_02
hgs
parents:
diff changeset
   109
                    CleanupStack::Pop(2); //for trap
7feec50967db 201003_02
hgs
parents:
diff changeset
   110
                    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   111
        );
7feec50967db 201003_02
hgs
parents:
diff changeset
   112
        if( err == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   113
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   114
            icon = CAknIcon::NewL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   115
            icon->SetBitmap( bitmap );
7feec50967db 201003_02
hgs
parents:
diff changeset
   116
            icon->SetMask( mask );
7feec50967db 201003_02
hgs
parents:
diff changeset
   117
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   118
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   119
    return icon;
7feec50967db 201003_02
hgs
parents:
diff changeset
   120
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   121
7feec50967db 201003_02
hgs
parents:
diff changeset
   122
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   123
// GetIconL
7feec50967db 201003_02
hgs
parents:
diff changeset
   124
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   125
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   126
LOCAL_C CAknIcon* GetIconL( TFileName aFilename, int aBitmapId, int aMaskId )
7feec50967db 201003_02
hgs
parents:
diff changeset
   127
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   128
    CAknIcon* icon = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
    if( aFilename.Length() > 0 && aBitmapId >= 0 && aMaskId >= 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   130
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
        CFbsBitmap* bitmap( 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
        CFbsBitmap* mask( 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   133
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
        RBuf pathBuf;
7feec50967db 201003_02
hgs
parents:
diff changeset
   135
        pathBuf.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   136
        ParseIconFilePathL( aFilename, pathBuf );
7feec50967db 201003_02
hgs
parents:
diff changeset
   137
7feec50967db 201003_02
hgs
parents:
diff changeset
   138
        AknIconUtils::CreateIconLC( bitmap, mask, pathBuf, aBitmapId,
7feec50967db 201003_02
hgs
parents:
diff changeset
   139
                aMaskId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   140
        icon = CAknIcon::NewL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   141
        icon->SetBitmap( bitmap );
7feec50967db 201003_02
hgs
parents:
diff changeset
   142
        icon->SetMask( mask );
7feec50967db 201003_02
hgs
parents:
diff changeset
   143
        CleanupStack::Pop( 2 );
7feec50967db 201003_02
hgs
parents:
diff changeset
   144
        CleanupStack::PopAndDestroy( &pathBuf );
7feec50967db 201003_02
hgs
parents:
diff changeset
   145
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   146
    return icon;
7feec50967db 201003_02
hgs
parents:
diff changeset
   147
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   148
7feec50967db 201003_02
hgs
parents:
diff changeset
   149
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   150
// GetDefaultSkinL
7feec50967db 201003_02
hgs
parents:
diff changeset
   151
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   152
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   153
LOCAL_C CAknIcon* GetDefaultSkinL( const CCaInnerEntry &aItem )
7feec50967db 201003_02
hgs
parents:
diff changeset
   154
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   155
    CAknIcon* icon = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
   156
    if( aItem.GetEntryTypeName().Compare( KCaTypeApp ) == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   157
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   158
        TUid appUid( TUid::Uid( aItem.GetUid() ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   159
        if( appUid == KSatUid )
7feec50967db 201003_02
hgs
parents:
diff changeset
   160
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   161
            CCaSatHandler* satHandler = CCaSatHandler::NewL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   162
            CleanupStack::PushL( satHandler );
7feec50967db 201003_02
hgs
parents:
diff changeset
   163
            icon = satHandler->LoadIconL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   164
            CleanupStack::PopAndDestroy( satHandler );
7feec50967db 201003_02
hgs
parents:
diff changeset
   165
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   166
        if( !icon )
7feec50967db 201003_02
hgs
parents:
diff changeset
   167
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   168
            icon = GetAppSkinL( appUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   169
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   170
        if( !icon )
7feec50967db 201003_02
hgs
parents:
diff changeset
   171
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   172
            icon = GetSkinL( KAknsIIDQgnMenuUnknownLst.iMajor,
7feec50967db 201003_02
hgs
parents:
diff changeset
   173
                    KAknsIIDQgnMenuUnknownLst.iMinor );
7feec50967db 201003_02
hgs
parents:
diff changeset
   174
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   175
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   176
    else if( aItem.GetEntryTypeName().Compare( KCaTypeFolder ) == KErrNone
7feec50967db 201003_02
hgs
parents:
diff changeset
   177
            || aItem.GetEntryTypeName().Compare( KCaTypeCollection )
7feec50967db 201003_02
hgs
parents:
diff changeset
   178
                    == KErrNone || aItem.GetEntryTypeName().Compare(
7feec50967db 201003_02
hgs
parents:
diff changeset
   179
            KCaTypeCollectionDownload ) == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   180
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   181
        icon = GetSkinL( KAknsIIDQgnPropFolderAppsMedium.iMajor,
7feec50967db 201003_02
hgs
parents:
diff changeset
   182
                KAknsIIDQgnPropFolderAppsMedium.iMinor );
7feec50967db 201003_02
hgs
parents:
diff changeset
   183
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   184
    else if( aItem.GetEntryTypeName().Compare( KCaTypeUrl ) == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   185
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   186
        icon = GetSkinL( KAknsIIDQgnPropPbCommUrl.iMajor,
7feec50967db 201003_02
hgs
parents:
diff changeset
   187
                KAknsIIDQgnPropPbCommUrl.iMinor );
7feec50967db 201003_02
hgs
parents:
diff changeset
   188
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   189
    else if( aItem.GetEntryTypeName().Compare( KCaTypeWidget ) == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   190
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   191
        icon = GetSkinL( KAknsIIDQgnIndiBrowserTbFeeds.iMajor,
7feec50967db 201003_02
hgs
parents:
diff changeset
   192
                KAknsIIDQgnIndiBrowserTbFeeds.iMinor );
7feec50967db 201003_02
hgs
parents:
diff changeset
   193
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   194
    return icon;
7feec50967db 201003_02
hgs
parents:
diff changeset
   195
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   196
7feec50967db 201003_02
hgs
parents:
diff changeset
   197
// ================= MEMBER FUNCTIONS =======================
7feec50967db 201003_02
hgs
parents:
diff changeset
   198
7feec50967db 201003_02
hgs
parents:
diff changeset
   199
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   200
// MenuIconUtility::GetItemIcon
7feec50967db 201003_02
hgs
parents:
diff changeset
   201
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   202
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   203
EXPORT_C CAknIcon* CaMenuIconUtility::GetItemIcon(
7feec50967db 201003_02
hgs
parents:
diff changeset
   204
        const CCaInnerEntry &aEntry )
7feec50967db 201003_02
hgs
parents:
diff changeset
   205
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   206
    CAknIcon* icon = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
   207
    CCaInnerEntry::TIconAttributes iconAttributes( aEntry.GetIcon() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   208
    // Try to get the skin of the item
7feec50967db 201003_02
hgs
parents:
diff changeset
   209
    TRAP_IGNORE(icon = GetSkinL( iconAttributes.iSkinMajorId,
7feec50967db 201003_02
hgs
parents:
diff changeset
   210
                iconAttributes.iSkinMinorId ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   211
    if( !icon )
7feec50967db 201003_02
hgs
parents:
diff changeset
   212
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   213
        // Try to get the icon of the item (skin failed)
7feec50967db 201003_02
hgs
parents:
diff changeset
   214
        TRAP_IGNORE( icon = GetIconL( iconAttributes.iFileName,
7feec50967db 201003_02
hgs
parents:
diff changeset
   215
                            iconAttributes.iBitmapId,
7feec50967db 201003_02
hgs
parents:
diff changeset
   216
                            iconAttributes.iMaskId ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   217
        if( !icon )
7feec50967db 201003_02
hgs
parents:
diff changeset
   218
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   219
            // Return a default (skin and icon failed)
7feec50967db 201003_02
hgs
parents:
diff changeset
   220
            TRAP_IGNORE( icon = GetDefaultSkinL( aEntry ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   221
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   222
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   223
    return icon;
7feec50967db 201003_02
hgs
parents:
diff changeset
   224
    }