contentstorage/extsrc/caiconutility.cpp
author hgs
Tue, 23 Mar 2010 23:55:55 +0200
changeset 88 7f0462e8c3da
parent 87 9d806967057c
permissions -rw-r--r--
201009
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>
87
hgs
parents: 86
diff changeset
    21
#include <satdomainpskeys.h>
85
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
7feec50967db 201003_02
hgs
parents:
diff changeset
    32
// ================= LOCAL FUNCTIONS ========================
7feec50967db 201003_02
hgs
parents:
diff changeset
    33
7feec50967db 201003_02
hgs
parents:
diff changeset
    34
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    35
// LoadSkinL
7feec50967db 201003_02
hgs
parents:
diff changeset
    36
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    37
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    38
LOCAL_C CAknIcon* GetSkinL( TInt majorId, TInt minorId )
7feec50967db 201003_02
hgs
parents:
diff changeset
    39
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    40
    CAknIcon* icon = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
    41
    if( majorId >= 0 && minorId >= 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
    42
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
    43
        CFbsBitmap* bitmap( 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
    44
        CFbsBitmap* mask( 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
    45
7feec50967db 201003_02
hgs
parents:
diff changeset
    46
        TAknsItemID skinId;
7feec50967db 201003_02
hgs
parents:
diff changeset
    47
        skinId.Set( majorId, minorId );
7feec50967db 201003_02
hgs
parents:
diff changeset
    48
7feec50967db 201003_02
hgs
parents:
diff changeset
    49
        MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
7feec50967db 201003_02
hgs
parents:
diff changeset
    50
        if( skinInstance )
7feec50967db 201003_02
hgs
parents:
diff changeset
    51
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
    52
            AknsUtils::CreateIconLC( skinInstance, skinId, bitmap, mask,
7feec50967db 201003_02
hgs
parents:
diff changeset
    53
                    KNullDesC, KErrNotFound, KErrNotFound );
7feec50967db 201003_02
hgs
parents:
diff changeset
    54
            icon = CAknIcon::NewL();
7feec50967db 201003_02
hgs
parents:
diff changeset
    55
            icon->SetBitmap( bitmap );
7feec50967db 201003_02
hgs
parents:
diff changeset
    56
            icon->SetMask( mask );
7feec50967db 201003_02
hgs
parents:
diff changeset
    57
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
    58
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
        // bitmap and icon, AknsUtils::CreateIconLC doesn't specify the order
7feec50967db 201003_02
hgs
parents:
diff changeset
    60
        CleanupStack::Pop( 2 );
7feec50967db 201003_02
hgs
parents:
diff changeset
    61
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
    62
7feec50967db 201003_02
hgs
parents:
diff changeset
    63
    return icon;
7feec50967db 201003_02
hgs
parents:
diff changeset
    64
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    65
7feec50967db 201003_02
hgs
parents:
diff changeset
    66
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    67
// GetAppSkinL
7feec50967db 201003_02
hgs
parents:
diff changeset
    68
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    70
LOCAL_C CAknIcon* GetAppSkinL( TUid& aAppUid )
7feec50967db 201003_02
hgs
parents:
diff changeset
    71
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
    CAknIcon* icon = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
    73
    CFbsBitmap* bitmap( 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
    74
    CFbsBitmap* mask( 0 );
7feec50967db 201003_02
hgs
parents:
diff changeset
    75
7feec50967db 201003_02
hgs
parents:
diff changeset
    76
    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
7feec50967db 201003_02
hgs
parents:
diff changeset
    77
    if( skin )
7feec50967db 201003_02
hgs
parents:
diff changeset
    78
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
        TRAPD( err,
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
                    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    81
                    AknsUtils::CreateAppIconLC( skin, aAppUid,
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
                            EAknsAppIconTypeList, bitmap, mask );
7feec50967db 201003_02
hgs
parents:
diff changeset
    83
                    CleanupStack::Pop(2); //for trap
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
                    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    85
        );
7feec50967db 201003_02
hgs
parents:
diff changeset
    86
        if( err == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
    87
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
    88
            icon = CAknIcon::NewL();
7feec50967db 201003_02
hgs
parents:
diff changeset
    89
            icon->SetBitmap( bitmap );
7feec50967db 201003_02
hgs
parents:
diff changeset
    90
            icon->SetMask( mask );
7feec50967db 201003_02
hgs
parents:
diff changeset
    91
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
    92
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
    93
    return icon;
7feec50967db 201003_02
hgs
parents:
diff changeset
    94
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    95
7feec50967db 201003_02
hgs
parents:
diff changeset
    96
7feec50967db 201003_02
hgs
parents:
diff changeset
    97
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    98
// GetDefaultSkinL
7feec50967db 201003_02
hgs
parents:
diff changeset
    99
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   100
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   101
LOCAL_C CAknIcon* GetDefaultSkinL( const CCaInnerEntry &aItem )
7feec50967db 201003_02
hgs
parents:
diff changeset
   102
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   103
    CAknIcon* icon = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
   104
    if( aItem.GetEntryTypeName().Compare( KCaTypeApp ) == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   105
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   106
        TUid appUid( TUid::Uid( aItem.GetUid() ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
   107
        if( appUid == KSatUid )
7feec50967db 201003_02
hgs
parents:
diff changeset
   108
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   109
            CCaSatHandler* satHandler = CCaSatHandler::NewL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   110
            CleanupStack::PushL( satHandler );
7feec50967db 201003_02
hgs
parents:
diff changeset
   111
            icon = satHandler->LoadIconL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   112
            CleanupStack::PopAndDestroy( satHandler );
7feec50967db 201003_02
hgs
parents:
diff changeset
   113
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   114
        if( !icon )
7feec50967db 201003_02
hgs
parents:
diff changeset
   115
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   116
            icon = GetAppSkinL( appUid );
7feec50967db 201003_02
hgs
parents:
diff changeset
   117
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   118
        if( !icon )
7feec50967db 201003_02
hgs
parents:
diff changeset
   119
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   120
            icon = GetSkinL( KAknsIIDQgnMenuUnknownLst.iMajor,
7feec50967db 201003_02
hgs
parents:
diff changeset
   121
                    KAknsIIDQgnMenuUnknownLst.iMinor );
7feec50967db 201003_02
hgs
parents:
diff changeset
   122
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   123
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   124
    else if( aItem.GetEntryTypeName().Compare( KCaTypeFolder ) == KErrNone
7feec50967db 201003_02
hgs
parents:
diff changeset
   125
            || aItem.GetEntryTypeName().Compare( KCaTypeCollection )
7feec50967db 201003_02
hgs
parents:
diff changeset
   126
                    == KErrNone || aItem.GetEntryTypeName().Compare(
7feec50967db 201003_02
hgs
parents:
diff changeset
   127
            KCaTypeCollectionDownload ) == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   128
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
        icon = GetSkinL( KAknsIIDQgnPropFolderAppsMedium.iMajor,
7feec50967db 201003_02
hgs
parents:
diff changeset
   130
                KAknsIIDQgnPropFolderAppsMedium.iMinor );
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
    else if( aItem.GetEntryTypeName().Compare( KCaTypeUrl ) == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   133
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
        icon = GetSkinL( KAknsIIDQgnPropPbCommUrl.iMajor,
7feec50967db 201003_02
hgs
parents:
diff changeset
   135
                KAknsIIDQgnPropPbCommUrl.iMinor );
7feec50967db 201003_02
hgs
parents:
diff changeset
   136
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   137
    else if( aItem.GetEntryTypeName().Compare( KCaTypeWidget ) == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   138
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   139
        icon = GetSkinL( KAknsIIDQgnIndiBrowserTbFeeds.iMajor,
7feec50967db 201003_02
hgs
parents:
diff changeset
   140
                KAknsIIDQgnIndiBrowserTbFeeds.iMinor );
7feec50967db 201003_02
hgs
parents:
diff changeset
   141
        }
88
hgs
parents: 87
diff changeset
   142
    else if( aItem.GetEntryTypeName().Compare( KCaTypeTemplatedApp ) == KErrNone )
hgs
parents: 87
diff changeset
   143
        {
hgs
parents: 87
diff changeset
   144
        TInt uid;
hgs
parents: 87
diff changeset
   145
        TLex lex (aItem.GetIcon().iApplicationId);
hgs
parents: 87
diff changeset
   146
        lex.Val(uid);
hgs
parents: 87
diff changeset
   147
        TUid appUid( TUid::Uid( uid ) );
hgs
parents: 87
diff changeset
   148
        icon = GetAppSkinL( appUid );
hgs
parents: 87
diff changeset
   149
        if( !icon )
hgs
parents: 87
diff changeset
   150
            {
hgs
parents: 87
diff changeset
   151
            icon = GetSkinL( KAknsIIDQgnMenuUnknownLst.iMajor,
hgs
parents: 87
diff changeset
   152
                    KAknsIIDQgnMenuUnknownLst.iMinor );
hgs
parents: 87
diff changeset
   153
            }
hgs
parents: 87
diff changeset
   154
        }
hgs
parents: 87
diff changeset
   155
    
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   156
    return icon;
7feec50967db 201003_02
hgs
parents:
diff changeset
   157
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   158
7feec50967db 201003_02
hgs
parents:
diff changeset
   159
// ================= MEMBER FUNCTIONS =======================
7feec50967db 201003_02
hgs
parents:
diff changeset
   160
7feec50967db 201003_02
hgs
parents:
diff changeset
   161
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   162
// MenuIconUtility::GetItemIcon
7feec50967db 201003_02
hgs
parents:
diff changeset
   163
// ---------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   164
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   165
EXPORT_C CAknIcon* CaMenuIconUtility::GetItemIcon(
7feec50967db 201003_02
hgs
parents:
diff changeset
   166
        const CCaInnerEntry &aEntry )
7feec50967db 201003_02
hgs
parents:
diff changeset
   167
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   168
    CAknIcon* icon = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
   169
    CCaInnerEntry::TIconAttributes iconAttributes( aEntry.GetIcon() );
88
hgs
parents: 87
diff changeset
   170
    TRAP_IGNORE( icon = GetDefaultSkinL( aEntry ) );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   171
    return icon;
7feec50967db 201003_02
hgs
parents:
diff changeset
   172
    }