diff -r f62f87b200ec -r 8e5041d13c84 contentstorage/caclient/s60/src/caobjectadapter.cpp --- a/contentstorage/caclient/s60/src/caobjectadapter.cpp Fri Mar 19 09:35:23 2010 +0200 +++ b/contentstorage/caclient/s60/src/caobjectadapter.cpp Fri Apr 16 15:16:09 2010 +0300 @@ -26,6 +26,7 @@ #include #include #include +#include #include "cadef.h" #include "caobjectadapter.h" @@ -36,6 +37,7 @@ #include "camenuiconutility.h" #include "canotifierfilter.h" #include "cainnernotifierfilter.h" +#include "caclient_defines.h" static QImage::Format TDisplayMode2Format(TDisplayMode mode) { @@ -81,28 +83,34 @@ TDisplayMode displayMode = aBitmap->DisplayMode(); // QImage format must match to bitmap format - QImage image(data, size.iWidth, size.iHeight, TDisplayMode2Format(displayMode)); + QImage image(data, size.iWidth, size.iHeight, TDisplayMode2Format( + displayMode)); aBitmap->EndDataAccess(); - // No data copying happens because image format matches native OpenVG format. + // No data copying happens because + // image format matches native OpenVG format. // So QPixmap actually points to CFbsBitmap data. return QPixmap::fromImage(image); } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- void CaObjectAdapter::convertL(const CaEntry &fromEntry, CCaInnerEntry &toEntry) { toEntry.SetId(fromEntry.id()); - toEntry.SetTextL(convertToDescriptor(fromEntry.text())); + toEntry.SetTextL( + XQConversions::qStringToS60Desc(fromEntry.text())->Des()); - toEntry.SetDescriptionL(convertToDescriptor(fromEntry.description())); + toEntry.SetDescriptionL( + XQConversions::qStringToS60Desc(fromEntry.description())->Des()); + toEntry.SetDescriptionL( + XQConversions::qStringToS60Desc(fromEntry.description())->Des()); toEntry.SetEntryTypeNameL( - convertToDescriptor(fromEntry.entryTypeName())); + XQConversions::qStringToS60Desc(fromEntry.entryTypeName())->Des()); toEntry.SetFlags(static_cast(fromEntry.flags())); @@ -112,22 +120,24 @@ fromEntry.iconDescription(); toEntry.SetIconDataL( - static_cast(fromIconDescription.bitmapId()), - static_cast(fromIconDescription.maskId()), - static_cast(fromIconDescription.skinMajorId()), - static_cast(fromIconDescription.skinMinorId()), - convertToDescriptor(fromIconDescription.filename())); + XQConversions::qStringToS60Desc( + fromIconDescription.filename())->Des(), + XQConversions::qStringToS60Desc( + fromIconDescription.skinId())->Des(), + XQConversions::qStringToS60Desc( + fromIconDescription.applicationId())->Des()); const QMap attributesMap = fromEntry.attributes(); foreach(QString key, attributesMap.keys()) { - if (key == applicationUidAttributeName()) { + if (key == APPLICATION_UID_ATTRIBUTE_NAME) { const TInt32 uid = attributesMap.value(key).toInt(); toEntry.SetUid(uid); } else { toEntry.AddAttributeL( - convertToDescriptor(key), - convertToDescriptor(attributesMap.value(key))); + XQConversions::qStringToS60Desc(key)->Des(), + XQConversions::qStringToS60Desc( + attributesMap.value(key))->Des()); } } } @@ -155,7 +165,7 @@ CleanupStack::PushL(sourceList); foreach(const QString str, list) { - sourceList->AppendL(convertToDescriptor(str)); + sourceList->AppendL(XQConversions::qStringToS60Desc(str)->Des()); } toQuery.SetEntryTypeNames(sourceList); @@ -167,20 +177,31 @@ Qt::SortOrder sortOrder; fromQuery.getSort(sortAttr, sortOrder); toQuery.SetSort(CaObjectAdapter::getSortCode(sortAttr, sortOrder)); + + const QMap attributesMap = fromQuery.attributes(); + + foreach(QString key, attributesMap.keys()) { + toQuery.AddAttributeL( + XQConversions::qStringToS60Desc(key)->Des(), + XQConversions::qStringToS60Desc( + attributesMap.value(key))->Des()); + } } //---------------------------------------------------------------------------- // //---------------------------------------------------------------------------- -void CaObjectAdapter::convert(const CCaInnerEntry &fromEntry, - CaEntry &toEntry) +void CaObjectAdapter::convert( + const CCaInnerEntry &fromEntry, CaEntry &toEntry) { toEntry.setId(fromEntry.GetId()); - toEntry.setText(convertToString(fromEntry.GetText())); + toEntry.setText(XQConversions::s60DescToQString(fromEntry.GetText())); - toEntry.setDescription(convertToString(fromEntry.GetDescription())); - toEntry.setEntryTypeName(convertToString(fromEntry.GetEntryTypeName())); + toEntry.setDescription( + XQConversions::s60DescToQString(fromEntry.GetDescription())); + toEntry.setEntryTypeName( + XQConversions::s60DescToQString(fromEntry.GetEntryTypeName())); toEntry.setFlags(static_cast(fromEntry.GetFlags())); @@ -189,50 +210,34 @@ CaIconDescription iconDescription; iconDescription.setId(icon.iId); - iconDescription.setBitmapId(icon.iBitmapId); - iconDescription.setMaskId(icon.iMaskId); - iconDescription.setSkinMajorId(icon.iSkinMajorId); - iconDescription.setSkinMinorId(icon.iSkinMinorId); - iconDescription.setFilename(convertToString(icon.iFileName)); + iconDescription.setFilename( + XQConversions::s60DescToQString(icon.iFileName)); + iconDescription.setSkinId( + XQConversions::s60DescToQString(icon.iSkinId)); + iconDescription.setApplicationId( + XQConversions::s60DescToQString(icon.iApplicationId)); toEntry.setIconDescription(iconDescription); const RCaEntryAttrArray &attributesArray = fromEntry.GetAttributes(); - if (toEntry.entryTypeName() == applicationEntryName() - || toEntry.entryTypeName() == widgetEntryName()) { - toEntry.setAttribute(applicationUidAttributeName(), - QString::number(fromEntry.GetUid())); + if (toEntry.entryTypeName() == APPLICATION_ENTRY_TYPE_NAME + || toEntry.entryTypeName() == WIDGET_ENTRY_TYPE_NAME) { + toEntry.setAttribute(APPLICATION_UID_ATTRIBUTE_NAME, + QString::number(fromEntry.GetUid())); } const int attributesArrayCount = attributesArray.Count(); for (int i = 0; i < attributesArrayCount; ++i) { const CCaEntryAttribute *const attribute = attributesArray[i]; - toEntry.setAttribute(convertToString(attribute->Name()), - convertToString(attribute->Value())); + toEntry.setAttribute( + XQConversions::s60DescToQString(attribute->Name()), + XQConversions::s60DescToQString(attribute->Value())); } } //---------------------------------------------------------------------------- -// !!! Warning: returns wrapper to internal QString representation which may -// get invalid before returned TPtrC object gets out of scope -//---------------------------------------------------------------------------- -const TPtrC CaObjectAdapter::convertToDescriptor(const QString &string) -{ - const TPtrC result(reinterpret_cast(string.utf16())); - return result; -} - -//---------------------------------------------------------------------------- -// -//---------------------------------------------------------------------------- -QString CaObjectAdapter::convertToString(const TDesC &des) -{ - return QString::fromUtf16(des.Ptr(), des.Length()); -} - -//---------------------------------------------------------------------------- // //---------------------------------------------------------------------------- void CaObjectAdapter::convertL(const CaNotifierFilter ¬ifierFilter, @@ -265,13 +270,12 @@ const QStringList stringList = notifierFilter.getTypeNames(); foreach(QString str, stringList) { - typeNames->AppendL(convertToDescriptor(str)); + typeNames->AppendL(XQConversions::qStringToS60Desc(str)->Des()); } source.SetTypeNames(typeNames); CleanupStack::Pop(typeNames); - } //---------------------------------------------------------------------------- // @@ -353,32 +357,6 @@ return error; } -//---------------------------------------------------------------------------- -// -//---------------------------------------------------------------------------- -const QString &CaObjectAdapter::applicationUidAttributeName() -{ - const static QString name("application:uid"); - return name; -} - -//---------------------------------------------------------------------------- -// -//---------------------------------------------------------------------------- -const QString &CaObjectAdapter::applicationEntryName() -{ - const static QString name("application"); - return name; -} - -//---------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -const QString &CaObjectAdapter::widgetEntryName() -{ - const static QString name("widget"); - return name; -} // ----------------------------------------------------------------------------- // copying compressed bitmap @@ -405,14 +383,33 @@ HbIcon CaObjectAdapter::makeIconL(const CaEntry &entry, const QSize &size) { HbIcon icon; - CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); - CaObjectAdapter::convertL(entry, *innerEntry); - QString filename(entry.iconDescription().filename()); - if (!filename.isEmpty()) { - icon = HbIcon(filename); + QString skinId(entry.iconDescription().skinId()); + if (!skinId.isEmpty()) { + icon = HbIcon(skinId); } + if (icon.isNull() || !(icon.size().isValid())) { + QString filename(entry.iconDescription().filename()); + if (!filename.isEmpty()) { + + // TODO: + // work-around for HbIcon::size() method locking files if returns + // default size, error id: ou1cimx1#279208 Case: mcl06HsDo07 - + // "Cannot delete file" when trying to uninstall sisx file + + if (entry.entryTypeName() == XQConversions::s60DescToQString(KCaTypeWidget)) { + icon = QIcon(filename); + qWarning("Widget icon created by QIcon, as work-around for HbIcon::size"); + } else { + icon = HbIcon(filename); + } + } + } + //try to load symbian icon from multi-bitmap (mbm, mbg) if (icon.isNull() || !(icon.size().isValid())) { + CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); + CaObjectAdapter::convertL(entry, *innerEntry); + CAknIcon *aknIcon = CaMenuIconUtility::GetItemIcon(*innerEntry); QPixmap pixmap; if (aknIcon) { @@ -420,13 +417,13 @@ //need to disable compression to properly convert the bitmap AknIconUtils::DisableCompression(aknIcon->Bitmap()); - AknIconUtils::SetSize(aknIcon->Bitmap(), TSize(size.width(), - size.height()), EAspectRatioPreservedAndUnusedSpaceRemoved); + AknIconUtils::SetSize( + aknIcon->Bitmap(), TSize(size.width(), size.height()), + EAspectRatioPreservedAndUnusedSpaceRemoved); if (aknIcon->Bitmap()->Header().iCompression == ENoBitmapCompression) { pixmap = fromSymbianCFbsBitmap(aknIcon->Bitmap()); - QPixmap mask = fromSymbianCFbsBitmap( - aknIcon->Mask()); + QPixmap mask = fromSymbianCFbsBitmap(aknIcon->Mask()); pixmap.setAlphaChannel(mask); } else { // we need special handling for icons in 9.2 (NGA) // let's hope that in future it will be in QT code @@ -443,8 +440,8 @@ CleanupStack::PopAndDestroy(aknIcon); icon = HbIcon(QIcon(pixmap)); } + CleanupStack::PopAndDestroy(innerEntry); } - CleanupStack::PopAndDestroy(innerEntry); return icon; }