34 #include "cainnerquery.h" |
34 #include "cainnerquery.h" |
35 #include "caquery.h" |
35 #include "caquery.h" |
36 #include "camenuiconutility.h" |
36 #include "camenuiconutility.h" |
37 #include "canotifierfilter.h" |
37 #include "canotifierfilter.h" |
38 #include "cainnernotifierfilter.h" |
38 #include "cainnernotifierfilter.h" |
|
39 |
39 static QImage::Format TDisplayMode2Format(TDisplayMode mode) |
40 static QImage::Format TDisplayMode2Format(TDisplayMode mode) |
40 { |
41 { |
41 QImage::Format format; |
42 QImage::Format format; |
42 switch(mode) { |
43 switch (mode) { |
43 case EGray2: |
44 case EGray2: |
44 format = QImage::Format_MonoLSB; |
45 format = QImage::Format_MonoLSB; |
45 break; |
46 break; |
46 case EColor256: |
47 case EColor256: |
47 case EGray256: |
48 case EGray256: |
70 break; |
71 break; |
71 } |
72 } |
72 return format; |
73 return format; |
73 } |
74 } |
74 |
75 |
75 QPixmap fromSymbianCFbsBitmap(CFbsBitmap* aBitmap) |
76 QPixmap fromSymbianCFbsBitmap(CFbsBitmap *aBitmap) |
76 { |
77 { |
77 aBitmap->BeginDataAccess(); |
78 aBitmap->BeginDataAccess(); |
78 uchar *data = (uchar*)aBitmap->DataAddress(); |
79 uchar *data = (uchar *)aBitmap->DataAddress(); |
79 TSize size = aBitmap->SizeInPixels(); |
80 TSize size = aBitmap->SizeInPixels(); |
80 TDisplayMode displayMode = aBitmap->DisplayMode(); |
81 TDisplayMode displayMode = aBitmap->DisplayMode(); |
81 |
82 |
82 // QImage format must match to bitmap format |
83 // QImage format must match to bitmap format |
83 QImage image(data, size.iWidth, size.iHeight, TDisplayMode2Format(displayMode)); |
84 QImage image(data, size.iWidth, size.iHeight, TDisplayMode2Format(displayMode)); |
84 aBitmap->EndDataAccess(); |
85 aBitmap->EndDataAccess(); |
85 |
86 |
86 // No data copying happens because image format matches native OpenVG format. |
87 // No data copying happens because image format matches native OpenVG format. |
87 // So QPixmap actually points to CFbsBitmap data. |
88 // So QPixmap actually points to CFbsBitmap data. |
88 return QPixmap::fromImage(image); |
89 return QPixmap::fromImage(image); |
89 } |
90 } |
90 |
91 |
91 // ----------------------------------------------------------------------------- |
92 // ----------------------------------------------------------------------------- |
92 // |
93 // |
93 // ----------------------------------------------------------------------------- |
94 // ----------------------------------------------------------------------------- |
94 void CaObjectAdapter::convertL(const CaEntry &fromEntry, |
95 void CaObjectAdapter::convertL(const CaEntry &fromEntry, |
95 CCaInnerEntry &toEntry) |
96 CCaInnerEntry &toEntry) |
96 { |
97 { |
97 toEntry.SetId(fromEntry.id()); |
98 toEntry.SetId(fromEntry.id()); |
98 |
99 |
99 toEntry.SetTextL(convertToDescriptor(fromEntry.text())); |
100 toEntry.SetTextL(convertToDescriptor(fromEntry.text())); |
100 |
101 |
101 toEntry.SetDescriptionL(convertToDescriptor(fromEntry.description())); |
102 toEntry.SetDescriptionL(convertToDescriptor(fromEntry.description())); |
102 |
103 |
103 toEntry.SetEntryTypeNameL( |
104 toEntry.SetEntryTypeNameL( |
104 convertToDescriptor(fromEntry.entryTypeName())); |
105 convertToDescriptor(fromEntry.entryTypeName())); |
105 |
106 |
106 toEntry.SetFlags(static_cast<TUint> (fromEntry.flags())); |
107 toEntry.SetFlags(static_cast<TUint>(fromEntry.flags())); |
107 |
108 |
108 toEntry.SetRole(static_cast<TUint> (fromEntry.role())); |
109 toEntry.SetRole(static_cast<TUint>(fromEntry.role())); |
109 |
110 |
110 const CaIconDescription fromIconDescription = |
111 const CaIconDescription fromIconDescription = |
111 fromEntry.iconDescription(); |
112 fromEntry.iconDescription(); |
112 |
113 |
113 toEntry.SetIconDataL( |
114 toEntry.SetIconDataL( |
117 static_cast<TInt>(fromIconDescription.skinMinorId()), |
118 static_cast<TInt>(fromIconDescription.skinMinorId()), |
118 convertToDescriptor(fromIconDescription.filename())); |
119 convertToDescriptor(fromIconDescription.filename())); |
119 |
120 |
120 const QMap<QString, QString> attributesMap = fromEntry.attributes(); |
121 const QMap<QString, QString> attributesMap = fromEntry.attributes(); |
121 |
122 |
122 foreach (QString key, attributesMap.keys()) { |
123 foreach(QString key, attributesMap.keys()) { |
123 if (key == applicationUidAttributeName()) { |
124 if (key == applicationUidAttributeName()) { |
124 const TInt32 uid = attributesMap.value(key).toInt(); |
125 const TInt32 uid = attributesMap.value(key).toInt(); |
125 toEntry.SetUid(uid); |
126 toEntry.SetUid(uid); |
126 } |
127 } else { |
127 else { |
|
128 toEntry.AddAttributeL( |
128 toEntry.AddAttributeL( |
129 convertToDescriptor(key), |
129 convertToDescriptor(key), |
130 convertToDescriptor(attributesMap.value(key))); |
130 convertToDescriptor(attributesMap.value(key))); |
131 } |
131 } |
132 } |
132 } |
134 |
134 |
135 //---------------------------------------------------------------------------- |
135 //---------------------------------------------------------------------------- |
136 // |
136 // |
137 //---------------------------------------------------------------------------- |
137 //---------------------------------------------------------------------------- |
138 void CaObjectAdapter::convertL(const CaQuery &fromQuery, |
138 void CaObjectAdapter::convertL(const CaQuery &fromQuery, |
139 CCaInnerQuery &toQuery) |
139 CCaInnerQuery &toQuery) |
140 { |
140 { |
141 toQuery.SetParentId(fromQuery.parentId()); |
141 toQuery.SetParentId(fromQuery.parentId()); |
142 |
142 |
143 toQuery.SetFlagsOn(static_cast<TUint>(fromQuery.flagsOn())); |
143 toQuery.SetFlagsOn(static_cast<TUint>(fromQuery.flagsOn())); |
144 |
144 |
149 toQuery.SetCount(fromQuery.count()); |
149 toQuery.SetCount(fromQuery.count()); |
150 |
150 |
151 const QStringList list = fromQuery.entryTypeNames(); |
151 const QStringList list = fromQuery.entryTypeNames(); |
152 |
152 |
153 CDesC16ArrayFlat *sourceList = |
153 CDesC16ArrayFlat *sourceList = |
154 new (ELeave)CDesC16ArrayFlat(KDefaultGranularity); |
154 new(ELeave)CDesC16ArrayFlat(KDefaultGranularity); |
155 CleanupStack::PushL(sourceList); |
155 CleanupStack::PushL(sourceList); |
156 |
156 |
157 foreach (const QString str, list) { |
157 foreach(const QString str, list) { |
158 sourceList->AppendL(convertToDescriptor(str)); |
158 sourceList->AppendL(convertToDescriptor(str)); |
159 } |
159 } |
160 |
160 |
161 toQuery.SetEntryTypeNames(sourceList); |
161 toQuery.SetEntryTypeNames(sourceList); |
162 |
162 |
171 |
171 |
172 //---------------------------------------------------------------------------- |
172 //---------------------------------------------------------------------------- |
173 // |
173 // |
174 //---------------------------------------------------------------------------- |
174 //---------------------------------------------------------------------------- |
175 void CaObjectAdapter::convert(const CCaInnerEntry &fromEntry, |
175 void CaObjectAdapter::convert(const CCaInnerEntry &fromEntry, |
176 CaEntry &toEntry) |
176 CaEntry &toEntry) |
177 { |
177 { |
178 toEntry.setId(fromEntry.GetId()); |
178 toEntry.setId(fromEntry.GetId()); |
179 |
179 |
180 toEntry.setText(convertToString(fromEntry.GetText())); |
180 toEntry.setText(convertToString(fromEntry.GetText())); |
181 |
181 |
198 toEntry.setIconDescription(iconDescription); |
198 toEntry.setIconDescription(iconDescription); |
199 |
199 |
200 const RCaEntryAttrArray &attributesArray = fromEntry.GetAttributes(); |
200 const RCaEntryAttrArray &attributesArray = fromEntry.GetAttributes(); |
201 |
201 |
202 if (toEntry.entryTypeName() == applicationEntryName() |
202 if (toEntry.entryTypeName() == applicationEntryName() |
203 || toEntry.entryTypeName() == widgetEntryName()) { |
203 || toEntry.entryTypeName() == widgetEntryName()) { |
204 toEntry.setAttribute(applicationUidAttributeName(), |
204 toEntry.setAttribute(applicationUidAttributeName(), |
205 QString::number(fromEntry.GetUid())); |
205 QString::number(fromEntry.GetUid())); |
206 } |
206 } |
207 |
207 |
208 const int attributesArrayCount = attributesArray.Count(); |
208 const int attributesArrayCount = attributesArray.Count(); |
209 |
209 |
210 for (int i = 0; i < attributesArrayCount; ++i) { |
210 for (int i = 0; i < attributesArrayCount; ++i) { |
211 const CCaEntryAttribute *const attribute = attributesArray[i]; |
211 const CCaEntryAttribute *const attribute = attributesArray[i]; |
212 toEntry.setAttribute(convertToString(attribute->Name()), |
212 toEntry.setAttribute(convertToString(attribute->Name()), |
213 convertToString(attribute->Value())); |
213 convertToString(attribute->Value())); |
214 } |
214 } |
215 } |
215 } |
216 |
216 |
217 //---------------------------------------------------------------------------- |
217 //---------------------------------------------------------------------------- |
218 // !!! Warning: returns wrapper to internal QString representation which may |
218 // !!! Warning: returns wrapper to internal QString representation which may |
219 // get invalid before returned TPtrC object gets out of scope |
219 // get invalid before returned TPtrC object gets out of scope |
220 //---------------------------------------------------------------------------- |
220 //---------------------------------------------------------------------------- |
221 const TPtrC CaObjectAdapter::convertToDescriptor(const QString &string) |
221 const TPtrC CaObjectAdapter::convertToDescriptor(const QString &string) |
222 { |
222 { |
223 const TPtrC result(reinterpret_cast<const TUint16*> (string.utf16())); |
223 const TPtrC result(reinterpret_cast<const TUint16 *>(string.utf16())); |
224 return result; |
224 return result; |
225 } |
225 } |
226 |
226 |
227 //---------------------------------------------------------------------------- |
227 //---------------------------------------------------------------------------- |
228 // |
228 // |
234 |
234 |
235 //---------------------------------------------------------------------------- |
235 //---------------------------------------------------------------------------- |
236 // |
236 // |
237 //---------------------------------------------------------------------------- |
237 //---------------------------------------------------------------------------- |
238 void CaObjectAdapter::convertL(const CaNotifierFilter ¬ifierFilter, |
238 void CaObjectAdapter::convertL(const CaNotifierFilter ¬ifierFilter, |
239 CCaInnerNotifierFilter &source) |
239 CCaInnerNotifierFilter &source) |
240 { |
240 { |
241 source.SetParentId(static_cast<TInt>(notifierFilter.getParentId())); |
241 source.SetParentId(static_cast<TInt>(notifierFilter.getParentId())); |
242 |
242 |
243 RArray<TInt> idsList; |
243 RArray<TInt> idsList; |
244 CleanupClosePushL(idsList); |
244 CleanupClosePushL(idsList); |
276 //---------------------------------------------------------------------------- |
276 //---------------------------------------------------------------------------- |
277 // |
277 // |
278 //---------------------------------------------------------------------------- |
278 //---------------------------------------------------------------------------- |
279 void CaObjectAdapter::convertL( |
279 void CaObjectAdapter::convertL( |
280 const RPointerArray<CCaInnerEntry> &fromEntriesArray, |
280 const RPointerArray<CCaInnerEntry> &fromEntriesArray, |
281 QList<CaEntry*> &toEntryList) |
281 QList<CaEntry *> &toEntryList) |
282 { |
282 { |
283 for (int i = 0; i < fromEntriesArray.Count(); ++i) { |
283 for (int i = 0; i < fromEntriesArray.Count(); ++i) { |
284 CaEntry *const toEntry = new CaEntry( |
284 CaEntry *const toEntry = new CaEntry( |
285 static_cast<EntryRole>(fromEntriesArray[i]->GetRole())); |
285 static_cast<EntryRole>(fromEntriesArray[i]->GetRole())); |
286 |
286 |
292 |
292 |
293 //---------------------------------------------------------------------------- |
293 //---------------------------------------------------------------------------- |
294 // |
294 // |
295 //---------------------------------------------------------------------------- |
295 //---------------------------------------------------------------------------- |
296 void CaObjectAdapter::convertL(const QList<int> &entryIdList, |
296 void CaObjectAdapter::convertL(const QList<int> &entryIdList, |
297 RArray<TInt> &source) |
297 RArray<TInt> &source) |
298 { |
298 { |
299 foreach(int id, entryIdList) |
299 foreach(int id, entryIdList) { |
300 { |
300 source.AppendL(static_cast<TInt>(id)); |
301 source.AppendL(static_cast<TInt>(id)); |
301 } |
302 } |
|
303 } |
302 } |
304 |
303 |
305 //---------------------------------------------------------------------------- |
304 //---------------------------------------------------------------------------- |
306 // |
305 // |
307 //---------------------------------------------------------------------------- |
306 //---------------------------------------------------------------------------- |
308 void CaObjectAdapter::convertL(const RArray<TInt> &innerEntryIdList, |
307 void CaObjectAdapter::convertL(const RArray<TInt> &innerEntryIdList, |
309 QList<int> &idList) |
308 QList<int> &idList) |
310 { |
309 { |
311 for (TInt i = 0; i < innerEntryIdList.Count(); ++i) { |
310 for (TInt i = 0; i < innerEntryIdList.Count(); ++i) { |
312 idList.append(innerEntryIdList[i]); |
311 idList.append(innerEntryIdList[i]); |
313 } |
312 } |
314 } |
313 } |
316 //---------------------------------------------------------------------------- |
315 //---------------------------------------------------------------------------- |
317 // |
316 // |
318 //---------------------------------------------------------------------------- |
317 //---------------------------------------------------------------------------- |
319 HbIcon CaObjectAdapter::makeIcon(const CaEntry &entry, const QSize &size) |
318 HbIcon CaObjectAdapter::makeIcon(const CaEntry &entry, const QSize &size) |
320 { |
319 { |
|
320 |
321 HbIcon icon; |
321 HbIcon icon; |
322 TRAPD(leaveCode, icon = makeIconL(entry, size)); |
322 TRAPD(leaveCode, icon = makeIconL(entry, size)); |
323 |
323 |
324 USE_QDEBUG_IF(leaveCode) << "CaObjectAdapter::makeIcon leaveCode:" |
324 USE_QDEBUG_IF(leaveCode) << "CaObjectAdapter::makeIcon leaveCode:" |
325 << leaveCode; |
325 << leaveCode; |
326 |
326 |
327 return icon; |
327 return icon; |
328 } |
328 } |
329 |
329 |
330 //---------------------------------------------------------------------------- |
330 //---------------------------------------------------------------------------- |
383 // ----------------------------------------------------------------------------- |
383 // ----------------------------------------------------------------------------- |
384 // copying compressed bitmap |
384 // copying compressed bitmap |
385 //---------------------------------------------------------------------------- |
385 //---------------------------------------------------------------------------- |
386 CFbsBitmap *CaObjectAdapter::copyBitmapLC(CFbsBitmap *input) |
386 CFbsBitmap *CaObjectAdapter::copyBitmapLC(CFbsBitmap *input) |
387 { |
387 { |
388 CFbsBitmap *bmp = new (ELeave) CFbsBitmap(); |
388 CFbsBitmap *bmp = new(ELeave) CFbsBitmap(); |
389 CleanupStack::PushL(bmp); |
389 CleanupStack::PushL(bmp); |
390 bmp->Create(input->SizeInPixels(), input->DisplayMode()); |
390 bmp->Create(input->SizeInPixels(), input->DisplayMode()); |
391 |
391 |
392 CFbsBitmapDevice *bitmapDevice = CFbsBitmapDevice::NewL(bmp); |
392 CFbsBitmapDevice *bitmapDevice = CFbsBitmapDevice::NewL(bmp); |
393 CleanupStack::PushL(bitmapDevice); |
393 CleanupStack::PushL(bitmapDevice); |
419 CleanupStack::PushL(aknIcon); |
419 CleanupStack::PushL(aknIcon); |
420 |
420 |
421 //need to disable compression to properly convert the bitmap |
421 //need to disable compression to properly convert the bitmap |
422 AknIconUtils::DisableCompression(aknIcon->Bitmap()); |
422 AknIconUtils::DisableCompression(aknIcon->Bitmap()); |
423 AknIconUtils::SetSize(aknIcon->Bitmap(), TSize(size.width(), |
423 AknIconUtils::SetSize(aknIcon->Bitmap(), TSize(size.width(), |
424 size.height()), EAspectRatioPreservedAndUnusedSpaceRemoved); |
424 size.height()), EAspectRatioPreservedAndUnusedSpaceRemoved); |
425 if (aknIcon->Bitmap()->Header().iCompression |
425 if (aknIcon->Bitmap()->Header().iCompression |
426 == ENoBitmapCompression) { |
426 == ENoBitmapCompression) { |
427 pixmap = fromSymbianCFbsBitmap(aknIcon->Bitmap()); |
427 pixmap = fromSymbianCFbsBitmap(aknIcon->Bitmap()); |
428 QPixmap mask = fromSymbianCFbsBitmap( |
428 QPixmap mask = fromSymbianCFbsBitmap( |
429 aknIcon->Mask()); |
429 aknIcon->Mask()); |
430 pixmap.setAlphaChannel(mask); |
430 pixmap.setAlphaChannel(mask); |
431 } |
431 } else { // we need special handling for icons in 9.2 (NGA) |
432 else // we need special handling for icons in 9.2 (NGA) |
432 // let's hope that in future it will be in QT code |
433 { // let's hope that in future it will be in QT code |
|
434 CFbsBitmap *temp(NULL); |
433 CFbsBitmap *temp(NULL); |
435 temp = copyBitmapLC(aknIcon->Bitmap()); |
434 temp = copyBitmapLC(aknIcon->Bitmap()); |
436 pixmap = fromSymbianCFbsBitmap(temp); |
435 pixmap = fromSymbianCFbsBitmap(temp); |
437 CleanupStack::PopAndDestroy(); |
436 CleanupStack::PopAndDestroy(); |
438 temp = copyBitmapLC(aknIcon->Mask()); |
437 temp = copyBitmapLC(aknIcon->Mask()); |
454 //---------------------------------------------------------------------------- |
453 //---------------------------------------------------------------------------- |
455 void CaObjectAdapter::convert( |
454 void CaObjectAdapter::convert( |
456 CaNotifierPrivate::NotifierType src, |
455 CaNotifierPrivate::NotifierType src, |
457 CCaInnerNotifierFilter::TNotifierType &dest) |
456 CCaInnerNotifierFilter::TNotifierType &dest) |
458 { |
457 { |
459 switch(src){ |
458 switch (src) { |
460 case CaNotifierPrivate::EntryChangedWithIdNotifierType: |
459 case CaNotifierPrivate::EntryChangedWithIdNotifierType: |
461 dest = CCaInnerNotifierFilter::EEntryChangedWithId; |
460 dest = CCaInnerNotifierFilter::EEntryChangedWithId; |
462 break; |
461 break; |
463 case CaNotifierPrivate::EntryChangedWithEntryNotifierType: |
462 case CaNotifierPrivate::EntryChangedWithEntryNotifierType: |
464 dest = CCaInnerNotifierFilter::EEntryChangedWithEntry; |
463 dest = CCaInnerNotifierFilter::EEntryChangedWithEntry; |
476 // |
475 // |
477 //---------------------------------------------------------------------------- |
476 //---------------------------------------------------------------------------- |
478 void CaObjectAdapter::convert( |
477 void CaObjectAdapter::convert( |
479 TChangeType src, ChangeType &dest) |
478 TChangeType src, ChangeType &dest) |
480 { |
479 { |
481 switch(src){ |
480 switch (src) { |
482 case EAddChangeType: |
481 case EAddChangeType: |
483 dest = AddChangeType; |
482 dest = AddChangeType; |
484 break; |
483 break; |
485 case ERemoveChangeType: |
484 case ERemoveChangeType: |
486 dest = RemoveChangeType; |
485 dest = RemoveChangeType; |
495 SortAttribute sortAttribute, Qt::SortOrder sortOrder) |
494 SortAttribute sortAttribute, Qt::SortOrder sortOrder) |
496 { |
495 { |
497 CCaInnerQuery::TSortAttribute sortCode(CCaInnerQuery::Default); |
496 CCaInnerQuery::TSortAttribute sortCode(CCaInnerQuery::Default); |
498 |
497 |
499 switch (sortAttribute) { |
498 switch (sortAttribute) { |
500 case NameSortAttribute: |
499 case NameSortAttribute: { |
501 { |
|
502 sortCode = (sortOrder == Qt::AscendingOrder) ? CCaInnerQuery::Name |
500 sortCode = (sortOrder == Qt::AscendingOrder) ? CCaInnerQuery::Name |
503 : CCaInnerQuery::NameDesc; |
501 : CCaInnerQuery::NameDesc; |
504 break; |
502 break; |
505 } |
503 } |
506 case CreatedTimestampSortAttribute: |
504 case CreatedTimestampSortAttribute: { |
507 { |
|
508 sortCode = (sortOrder == Qt::AscendingOrder) |
505 sortCode = (sortOrder == Qt::AscendingOrder) |
509 ? CCaInnerQuery::CreatedTimestamp |
506 ? CCaInnerQuery::CreatedTimestamp |
510 : CCaInnerQuery::CreatedTimestampDesc; |
507 : CCaInnerQuery::CreatedTimestampDesc; |
511 break; |
508 break; |
512 } |
509 } |
513 case MostUsedSortAttribute: |
510 case MostUsedSortAttribute: { |
514 { |
|
515 sortCode = (sortOrder == Qt::AscendingOrder) |
511 sortCode = (sortOrder == Qt::AscendingOrder) |
516 ? CCaInnerQuery::MostUsed : CCaInnerQuery::MostUsedDesc; |
512 ? CCaInnerQuery::MostUsed : CCaInnerQuery::MostUsedDesc; |
517 break; |
513 break; |
518 } |
514 } |
519 case LastUsedSortAttribute: |
515 case LastUsedSortAttribute: { |
520 { |
|
521 sortCode = (sortOrder == Qt::AscendingOrder) |
516 sortCode = (sortOrder == Qt::AscendingOrder) |
522 ? CCaInnerQuery::LastUsed : CCaInnerQuery::LastUsedDesc; |
517 ? CCaInnerQuery::LastUsed : CCaInnerQuery::LastUsedDesc; |
523 break; |
518 break; |
524 } |
519 } |
525 case DefaultSortAttribute: |
520 case DefaultSortAttribute: { |
526 { |
|
527 sortCode = (sortOrder == Qt::AscendingOrder) |
521 sortCode = (sortOrder == Qt::AscendingOrder) |
528 ? CCaInnerQuery::Default : CCaInnerQuery::DefaultDesc; |
522 ? CCaInnerQuery::Default : CCaInnerQuery::DefaultDesc; |
529 break; |
523 break; |
530 } |
524 } |
531 } |
525 } |
532 |
526 |
533 return sortCode; |
527 return sortCode; |