taskswitcher/server/src/tsiconproviderimp.cpp
changeset 127 7b66bc3c6dc9
equal deleted inserted replaced
126:efda7c0771b9 127:7b66bc3c6dc9
       
     1 /*
       
     2 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Task list entry
       
    15 *
       
    16 */
       
    17 #include <fbs.h>
       
    18 #include <apgcli.h>
       
    19 #include <apgicnfl.h>
       
    20 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
       
    21 #include <apaidpartner.h>
       
    22 #else
       
    23 #include <apaid.h>
       
    24 #endif
       
    25 
       
    26 #include <QPixmap>
       
    27 #include <HbIcon>
       
    28 #include <XQConversions>
       
    29 
       
    30 
       
    31 #include "tsiconproviderimp.h"
       
    32 
       
    33 // size for the created app icons
       
    34 const TInt KAppIconWidth(128);
       
    35 const TInt KAppIconHeight(128);
       
    36 const TInt KImgExtLenght(3);
       
    37 _LIT(KMbmExt, "mbm");
       
    38 
       
    39 //------------------------------------------------------------------------------
       
    40 CTsIconProvider* CTsIconProvider::NewL(MTsResourceManager& aResources)
       
    41     {
       
    42     CTsIconProvider* self = new(ELeave)CTsIconProvider(aResources);
       
    43     CleanupStack::PushL( self );
       
    44     self->ConstructL();
       
    45     CleanupStack::Pop( self );
       
    46     return self;
       
    47     }
       
    48 
       
    49 //------------------------------------------------------------------------------
       
    50 CTsIconProvider::CTsIconProvider(MTsResourceManager& aResources)
       
    51 :
       
    52     iResources(aResources)
       
    53     {
       
    54     //No implementation required
       
    55     }
       
    56 
       
    57 //------------------------------------------------------------------------------
       
    58 void CTsIconProvider::ConstructL()
       
    59     {
       
    60     QT_TRYCATCH_LEAVING(
       
    61         iDefaultIcon = Bitmap( HbIcon("qtg_large_application").qicon() );)
       
    62     User::LeaveIfNull(iDefaultIcon);
       
    63     }
       
    64 
       
    65 //------------------------------------------------------------------------------
       
    66 CTsIconProvider::~CTsIconProvider()
       
    67     {
       
    68     delete iDefaultIcon;
       
    69     }
       
    70 
       
    71 //------------------------------------------------------------------------------
       
    72 void CTsIconProvider::LoadIconL(CFbsBitmap& aDst, TUid aUid)
       
    73     {
       
    74     const TIconSource sources [] = {ESkin, EApparc, EFile, EDefault};
       
    75     const TInt count ( sizeof(sources) / sizeof(TIconSource) );
       
    76     if(0 == count)
       
    77         {
       
    78         User::Leave(KErrCorrupt);
       
    79         }
       
    80     TInt errNo(KErrNotFound);
       
    81     for(TInt offset(0); KErrNone != errNo && offset < count; ++offset)
       
    82         {
       
    83         TRAP( errNo, LoadL( sources[offset], aDst, aUid ) );
       
    84         }
       
    85     User::LeaveIfError(errNo);
       
    86     }
       
    87 
       
    88 //------------------------------------------------------------------------------
       
    89 CFbsBitmap* CTsIconProvider::Bitmap( const QIcon& aIcon )
       
    90     {
       
    91     CFbsBitmap* retValue(0);
       
    92     QPixmap pixmap = aIcon.pixmap( QSize(KAppIconWidth, KAppIconHeight) );
       
    93     if( !pixmap.isNull() )
       
    94         {
       
    95         retValue = pixmap.toSymbianCFbsBitmap();
       
    96         }
       
    97     return retValue;
       
    98     }
       
    99 //------------------------------------------------------------------------------
       
   100 CFbsBitmap* CTsIconProvider::Bitmap( CFbsBitmap& aBitmap, 
       
   101                                      CFbsBitmap& aMask )
       
   102     {
       
   103     QPixmap ico(QPixmap::fromSymbianCFbsBitmap(&aBitmap));
       
   104     ico.setAlphaChannel(QPixmap::fromSymbianCFbsBitmap(&aMask));
       
   105     return ico.scaled(QSize(KAppIconWidth, KAppIconHeight),
       
   106                       Qt::KeepAspectRatioByExpanding,
       
   107                       Qt::SmoothTransformation).toSymbianCFbsBitmap();
       
   108     
       
   109     }
       
   110 
       
   111 //------------------------------------------------------------------------------
       
   112 void CTsIconProvider::LoadL(TIconSource aSrc, CFbsBitmap& aDst, TUid aUid)
       
   113     {
       
   114     switch(aSrc)
       
   115         {
       
   116         case ESkin:LoadIconFromSkinL(aDst, aUid); break;
       
   117         case EApparc:LoadIconFromApparcL(aDst, aUid); break;
       
   118         case EFile: LoadIconFromFileL(aDst, aUid); break;
       
   119         case EDefault: LoadIconDefaultL(aDst); break;
       
   120         }
       
   121     }
       
   122 
       
   123 //------------------------------------------------------------------------------
       
   124 void CTsIconProvider::LoadIconFromSkinL(CFbsBitmap& aDst, TUid aUid)
       
   125     {
       
   126     CApaAppServiceInfoArray* skin =
       
   127         iResources.ApaSession().GetAppServiceOpaqueDataLC(aUid, TUid::Uid(0x2002DCF3));
       
   128     TArray<TApaAppServiceInfo> info( skin->Array() );
       
   129     if( 0 >= info.Count() )
       
   130         {
       
   131         User::Leave(KErrNotFound);
       
   132         }
       
   133     TPtrC8 opaque(info[0].OpaqueData());
       
   134     const TPtrC16 iconName((TText16*) opaque.Ptr(),(opaque.Length()+1)>>1);
       
   135     
       
   136     CFbsBitmap* ico(0);
       
   137     QT_TRYCATCH_LEAVING( 
       
   138     ico = Bitmap(HbIcon(XQConversions:: s60DescToQString(iconName)).qicon());)
       
   139     CopyAndDestroyL(aDst, ico);
       
   140     
       
   141     CleanupStack::PopAndDestroy(skin);
       
   142     }
       
   143 
       
   144 //------------------------------------------------------------------------------
       
   145 void CTsIconProvider::LoadIconFromApparcL(CFbsBitmap& aDst, TUid aUid)
       
   146     {
       
   147     const TSize size(KAppIconWidth, KAppIconHeight);
       
   148     CApaMaskedBitmap* bitmap = CApaMaskedBitmap::NewLC();
       
   149     User::LeaveIfError( iResources.ApaSession().GetAppIcon(aUid,size,*bitmap) );
       
   150     User::LeaveIfNull(bitmap->Mask());
       
   151     TInt iconsCount(0);
       
   152     iResources.ApaSession().NumberOfOwnDefinedIcons( aUid, iconsCount);
       
   153     if(0 >= iconsCount)
       
   154         {
       
   155         User::Leave(KErrNotFound);
       
   156         }
       
   157     
       
   158     CFbsBitmap *ico(0);
       
   159     QT_TRYCATCH_LEAVING(
       
   160         ico = Bitmap(*bitmap, *bitmap->Mask());)
       
   161     CopyAndDestroyL(aDst, ico);
       
   162     
       
   163     CleanupStack::PopAndDestroy(bitmap);
       
   164     }
       
   165 
       
   166 //------------------------------------------------------------------------------
       
   167 void CTsIconProvider::LoadIconFromFileL(CFbsBitmap& aDst, TUid aUid)
       
   168     {
       
   169     HBufC* fileName( 0 );
       
   170     User::LeaveIfError(iResources.ApaSession().GetAppIcon(aUid,fileName));
       
   171     CleanupStack::PushL(fileName);
       
   172     fileName->Des().LowerCase();
       
   173     if(0 == fileName->Right(KImgExtLenght).Compare(KMbmExt))
       
   174         {
       
   175         User::LeaveIfError( aDst.Load(*fileName) );
       
   176         }
       
   177     else
       
   178         {
       
   179         CFbsBitmap* ico(0);
       
   180         QT_TRYCATCH_LEAVING(
       
   181             ico = Bitmap(QIcon(XQConversions::s60DescToQString(*fileName)));)
       
   182         CopyAndDestroyL(aDst, ico);
       
   183         }
       
   184         
       
   185     CleanupStack::PopAndDestroy(fileName);
       
   186     }
       
   187 
       
   188 //------------------------------------------------------------------------------
       
   189 void CTsIconProvider::LoadIconDefaultL(CFbsBitmap& aDst)
       
   190     {
       
   191     User::LeaveIfError( aDst.Duplicate( iDefaultIcon->Handle() ) );
       
   192     }
       
   193 
       
   194 //------------------------------------------------------------------------------
       
   195 void CTsIconProvider::CopyAndDestroyL(CFbsBitmap& aDst, CFbsBitmap* aSrc)
       
   196     {
       
   197     User::LeaveIfNull(aSrc);
       
   198     CleanupStack::PushL(aSrc);
       
   199     User::LeaveIfError(aDst.Duplicate(aSrc->Handle()));
       
   200     CleanupStack::PopAndDestroy(aSrc);
       
   201     }