diff -r 0b3699f6c654 -r e36b2f4799c0 contentstorage/caclient/s60/src/camenuiconutility.cpp --- a/contentstorage/caclient/s60/src/camenuiconutility.cpp Fri Sep 17 08:32:18 2010 +0300 +++ b/contentstorage/caclient/s60/src/camenuiconutility.cpp Mon Oct 04 00:38:31 2010 +0300 @@ -28,10 +28,20 @@ // cfbsbitmap #include +#include +#include +#include // MCL + +#include +#include + +#include + + #include +#include "ca2internalCRkeys.h" #include "camenuiconutility.h" -#include "cabitmapadapter.h" #include "caentry.h" #include "caquery.h" #include "caservice.h" @@ -39,6 +49,32 @@ const char appUidAttributeName[] = "application:uid"; +LOCAL_C void getIconFromFile(HbIcon& icon, const QSizeF &size) +{ + if ((icon.iconName().contains(QChar('.')) || + (icon.iconName().contains(QChar('/'))) || + (icon.iconName().contains(QChar('\\'))) ) + && !icon.isNull() && icon.size().isValid()) { + icon.setSize(size); + icon = HbIcon(QIcon(icon.pixmap())); + } +} + +/*! + Convert from bitmap and mask to qpixmap + \param input bitmap. + \param pixmap to prepare. + \retval void. + */ +LOCAL_C void fromBitmapAndMaskToPixmap(CFbsBitmap* fbsBitmap, + CFbsBitmap* fbsMask, QPixmap& pixmap) +{ + pixmap = pixmap.fromSymbianCFbsBitmap(fbsBitmap); + QPixmap mask; + mask = mask.fromSymbianCFbsBitmap(fbsMask); + pixmap.setAlphaChannel(mask); +} + /*! Get icon from entry. \param entry const reference to CaEntry. @@ -50,17 +86,14 @@ QString skinId(entry.iconDescription().skinId()); if (!skinId.isEmpty()) { icon = HbIcon(skinId); + getIconFromFile(icon, size); } if (icon.isNull() || !(icon.size().isValid())) { QString fileName(entry.iconDescription().filename()); if (!fileName.isEmpty()) { icon = HbIcon(fileName); - if (fileName.contains(QChar('.')) - && !icon.isNull() && icon.size().isValid()) { - icon.setSize(size); - icon = HbIcon(QIcon(icon.pixmap())); - } + getIconFromFile(icon, size); } } return icon; @@ -105,7 +138,7 @@ QPixmap pixmap; if ((err == KErrNone) && (iconsCount > 0)) { - CaBitmapAdapter::fromBitmapAndMaskToPixmapL(apaMaskedBitmap, + fromBitmapAndMaskToPixmap(apaMaskedBitmap, apaMaskedBitmap->Mask(), pixmap); pixmap = pixmap.scaled(size.toSize(), @@ -215,18 +248,161 @@ return icon; } + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT (Icon can be created only from SIM) +/*! + Get bitmap. + \param aIconEF icon information array + \retval bitmap. + */ +LOCAL_C CFbsBitmap* getSatBitmapL() + { + RSatSession satSession; + CleanupClosePushL(satSession); + RSatService satIcon; + CleanupClosePushL(satIcon); + + satSession.ConnectL(); + satIcon.OpenL(satSession); + + + TInt iconId(KErrNone); + RProperty::Get(KCRUidCa, KCaSatUIIconId, iconId); + + CFbsBitmap* bitmap(NULL); + + if (iconId != KErrNone) { + RIconEf iconEf; + satIcon.GetIconInfoL(TUint8(iconId), iconEf); + CleanupClosePushL(iconEf); + + TInt selectedIconIndex(KErrNotFound); + TSize selectedIconSize(0, 0); + + for (TInt i = 0; i < iconEf.Count(); ++i) { + if ((iconEf[i].IconSize().iHeight * iconEf[i].IconSize().iWidth) + >= (selectedIconSize.iHeight * selectedIconSize.iWidth)) + if (bitmap) { + delete bitmap; + bitmap = NULL; + } + // test and select index of icon which is not too big + bitmap = satIcon.GetIconL( iconEf[ i ] ); + if (bitmap) //!bitmap if iIcon is too big + { + selectedIconSize = iconEf[i].IconSize(); + selectedIconIndex = i; + } + } + if (selectedIconIndex != KErrNotFound) { + if (bitmap) { + delete bitmap; + bitmap = NULL; + } + bitmap = satIcon.GetIconL( iconEf[ selectedIconIndex ] ); + } + CleanupStack::PopAndDestroy(&iconEf); + } + + CleanupStack::PopAndDestroy(&satIcon); + CleanupStack::PopAndDestroy(&satSession); + + return bitmap; +} +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT + + + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT (Icon can be created only from SIM) +/*! + Get bitmap. + \param aIconEF icon information array + \retval bitmap. + */ +LOCAL_C CFbsBitmap* getSatMaskL(CFbsBitmap* aBitmap) + { + CFbsBitmap* mask(new (ELeave) CFbsBitmap); + CleanupStack::PushL(mask); + + User::LeaveIfError(mask->Create(aBitmap->SizeInPixels(), EGray256)); + + CFbsBitmapDevice* maskDevice = CFbsBitmapDevice::NewL(mask); + CleanupStack::PushL(maskDevice); + CFbsBitGc* maskGc; + User::LeaveIfError(maskDevice->CreateContext(maskGc)); + CleanupStack::PushL(maskGc); + maskGc->SetBrushStyle(CGraphicsContext::ESolidBrush); + maskGc->SetDrawMode(CGraphicsContext::EDrawModePEN); + maskGc->SetBrushColor(KRgbBlack); + maskGc->Clear(); + maskGc->SetBrushColor(KRgbWhite); + maskGc->DrawRect(TRect(TPoint(), aBitmap->SizeInPixels())); + CleanupStack::PopAndDestroy(maskGc); + CleanupStack::PopAndDestroy(maskDevice); + CleanupStack::Pop(mask); + return mask; +} +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT + + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT (Icon can be created only from SIM) +/*! + Get icon from entry. + \param entry const reference to CaEntry. + \retval icon. + */ +LOCAL_C HbIcon getSatIconL() +{ + HbIcon icon; + QPixmap pixmap; + CFbsBitmap* bitmap(NULL); + CFbsBitmap* mask(NULL); + bitmap = getSatBitmapL(); + if(bitmap) + { + mask = getSatMaskL(bitmap); + fromBitmapAndMaskToPixmap(bitmap, mask, pixmap); + icon = HbIcon(QIcon(pixmap)); + } + + + delete mask; + delete bitmap; + return icon; + +} +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT + + /*! Get icon. \param entry const reference to CaEntry. \param sie const reference to icon size. \retval icon. */ -HbIcon CaMenuIconUtility::getEntryIcon(const CaEntry& entry, - const QSizeF &size) +HbIcon CaMenuIconUtility::getEntryIcon(const CaEntry& entry, const QSizeF &size) { HbIcon icon; + icon = getIconFromEntry(entry, size); - + + if ((icon.isNull() || !(icon.size().isValid())) && + entry.attribute(appUidAttributeName).toInt() == KSatUid.iUid) { + TRAP_IGNORE(icon = getSatIconL()); + } + if (icon.isNull() || !(icon.size().isValid())) { QString uidString(entry.attribute(appUidAttributeName)); bool uidOk(false); @@ -239,16 +415,18 @@ TRAP_IGNORE(icon = getIconFromApparcL(uidValue, size)); } } - + if (icon.isNull() || !(icon.size().isValid())) { icon = getDefaultIcon(entry); } - + if (entry.entryTypeName() == XQConversions::s60DescToQString( - KCaTypeWidget)) { + KCaTypeWidget)) { icon.addProportionalBadge(Qt::AlignBottom | Qt::AlignRight, - HbIcon("qtg_small_homescreen"), QSizeF(0.5, 0.5)); + HbIcon("qtg_small_homescreen"), QSizeF(0.5, 0.5)); } return icon; } + +