85
|
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: ?Description
|
|
15 |
*
|
|
16 |
*/
|
|
17 |
|
|
18 |
#include <e32std.h>
|
|
19 |
#include <exception>
|
|
20 |
#include <e32base.h>
|
86
|
21 |
#include <badesca.h>
|
85
|
22 |
#include <AknIconUtils.h>
|
|
23 |
#include <fbs.h>
|
86
|
24 |
#include <bitdev.h>
|
85
|
25 |
#include <QPixmap>
|
86
|
26 |
#include <HbIcon>
|
85
|
27 |
#include <QBitmap>
|
|
28 |
#include <QDebug>
|
89
|
29 |
#include <XQConversions>
|
85
|
30 |
|
|
31 |
#include "cadef.h"
|
|
32 |
#include "caobjectadapter.h"
|
|
33 |
#include "cainnerentry.h"
|
|
34 |
#include "caentry_p.h"
|
|
35 |
#include "cainnerquery.h"
|
|
36 |
#include "caquery.h"
|
92
|
37 |
|
85
|
38 |
#include "canotifierfilter.h"
|
|
39 |
#include "cainnernotifierfilter.h"
|
89
|
40 |
#include "caclient_defines.h"
|
87
|
41 |
|
89
|
42 |
// ---------------------------------------------------------------------------
|
85
|
43 |
//
|
89
|
44 |
// ---------------------------------------------------------------------------
|
85
|
45 |
void CaObjectAdapter::convertL(const CaEntry &fromEntry,
|
87
|
46 |
CCaInnerEntry &toEntry)
|
85
|
47 |
{
|
|
48 |
toEntry.SetId(fromEntry.id());
|
|
49 |
|
89
|
50 |
toEntry.SetTextL(
|
98
|
51 |
XQConversions::qStringToS60Desc(fromEntry.text())->Des(),
|
|
52 |
fromEntry.isLocalized(NameLocalized));
|
85
|
53 |
|
89
|
54 |
toEntry.SetDescriptionL(
|
98
|
55 |
XQConversions::qStringToS60Desc(fromEntry.description())->Des(),
|
|
56 |
fromEntry.isLocalized(DescriptionLocalized));
|
85
|
57 |
|
|
58 |
toEntry.SetEntryTypeNameL(
|
89
|
59 |
XQConversions::qStringToS60Desc(fromEntry.entryTypeName())->Des());
|
85
|
60 |
|
87
|
61 |
toEntry.SetFlags(static_cast<TUint>(fromEntry.flags()));
|
85
|
62 |
|
87
|
63 |
toEntry.SetRole(static_cast<TUint>(fromEntry.role()));
|
85
|
64 |
|
|
65 |
const CaIconDescription fromIconDescription =
|
|
66 |
fromEntry.iconDescription();
|
|
67 |
|
|
68 |
toEntry.SetIconDataL(
|
89
|
69 |
XQConversions::qStringToS60Desc(
|
|
70 |
fromIconDescription.filename())->Des(),
|
|
71 |
XQConversions::qStringToS60Desc(
|
|
72 |
fromIconDescription.skinId())->Des(),
|
|
73 |
XQConversions::qStringToS60Desc(
|
|
74 |
fromIconDescription.applicationId())->Des());
|
85
|
75 |
|
|
76 |
const QMap<QString, QString> attributesMap = fromEntry.attributes();
|
|
77 |
|
87
|
78 |
foreach(QString key, attributesMap.keys()) {
|
89
|
79 |
if (key == APPLICATION_UID_ATTRIBUTE_NAME) {
|
85
|
80 |
const TInt32 uid = attributesMap.value(key).toInt();
|
|
81 |
toEntry.SetUid(uid);
|
87
|
82 |
} else {
|
85
|
83 |
toEntry.AddAttributeL(
|
89
|
84 |
XQConversions::qStringToS60Desc(key)->Des(),
|
|
85 |
XQConversions::qStringToS60Desc(
|
|
86 |
attributesMap.value(key))->Des());
|
85
|
87 |
}
|
|
88 |
}
|
127
|
89 |
QList<int> parentIds = fromEntry.parentIds();
|
|
90 |
RArray<TInt> s60ParentIds;
|
|
91 |
for (int i(0); i < parentIds.count(); ++i ) {
|
|
92 |
s60ParentIds.AppendL(parentIds[i]);
|
|
93 |
}
|
|
94 |
toEntry.SetParentIdsL(s60ParentIds);
|
85
|
95 |
}
|
|
96 |
|
|
97 |
//----------------------------------------------------------------------------
|
|
98 |
//
|
|
99 |
//----------------------------------------------------------------------------
|
|
100 |
void CaObjectAdapter::convertL(const CaQuery &fromQuery,
|
87
|
101 |
CCaInnerQuery &toQuery)
|
85
|
102 |
{
|
|
103 |
toQuery.SetParentId(fromQuery.parentId());
|
99
|
104 |
|
|
105 |
toQuery.SetChildId(fromQuery.childId());
|
85
|
106 |
|
|
107 |
toQuery.SetFlagsOn(static_cast<TUint>(fromQuery.flagsOn()));
|
|
108 |
|
|
109 |
toQuery.SetFlagsOff(static_cast<TUint>(fromQuery.flagsOff()));
|
|
110 |
|
|
111 |
toQuery.SetRole(static_cast<TInt>(fromQuery.entryRoles()));
|
|
112 |
|
|
113 |
toQuery.SetCount(fromQuery.count());
|
|
114 |
|
|
115 |
const QStringList list = fromQuery.entryTypeNames();
|
|
116 |
|
|
117 |
CDesC16ArrayFlat *sourceList =
|
87
|
118 |
new(ELeave)CDesC16ArrayFlat(KDefaultGranularity);
|
85
|
119 |
CleanupStack::PushL(sourceList);
|
|
120 |
|
87
|
121 |
foreach(const QString str, list) {
|
89
|
122 |
sourceList->AppendL(XQConversions::qStringToS60Desc(str)->Des());
|
85
|
123 |
}
|
|
124 |
|
|
125 |
toQuery.SetEntryTypeNames(sourceList);
|
|
126 |
|
|
127 |
CleanupStack::Pop(sourceList);
|
|
128 |
|
|
129 |
// mapping sort enums
|
|
130 |
SortAttribute sortAttr;
|
|
131 |
Qt::SortOrder sortOrder;
|
|
132 |
fromQuery.getSort(sortAttr, sortOrder);
|
|
133 |
toQuery.SetSort(CaObjectAdapter::getSortCode(sortAttr, sortOrder));
|
89
|
134 |
|
88
|
135 |
const QMap<QString, QString> attributesMap = fromQuery.attributes();
|
|
136 |
|
|
137 |
foreach(QString key, attributesMap.keys()) {
|
92
|
138 |
if (key == APPLICATION_UID_ATTRIBUTE_NAME) {
|
|
139 |
const TInt32 uid = attributesMap.value(key).toInt();
|
|
140 |
toQuery.SetUid(uid);
|
|
141 |
}
|
|
142 |
else {
|
|
143 |
toQuery.AddAttributeL(
|
|
144 |
XQConversions::qStringToS60Desc(key)->Des(),
|
|
145 |
XQConversions::qStringToS60Desc(
|
|
146 |
attributesMap.value(key))->Des());
|
|
147 |
}
|
88
|
148 |
}
|
85
|
149 |
}
|
|
150 |
|
|
151 |
//----------------------------------------------------------------------------
|
|
152 |
//
|
|
153 |
//----------------------------------------------------------------------------
|
89
|
154 |
void CaObjectAdapter::convert(
|
|
155 |
const CCaInnerEntry &fromEntry, CaEntry &toEntry)
|
85
|
156 |
{
|
|
157 |
toEntry.setId(fromEntry.GetId());
|
|
158 |
|
98
|
159 |
toEntry.setText(XQConversions::s60DescToQString(fromEntry.GetText()),
|
|
160 |
fromEntry.isLocalized(CCaInnerEntry::ENameLocalized));
|
85
|
161 |
|
89
|
162 |
toEntry.setDescription(
|
98
|
163 |
XQConversions::s60DescToQString(fromEntry.GetDescription()),
|
|
164 |
fromEntry.isLocalized(CCaInnerEntry::EDescriptionLocalized));
|
89
|
165 |
toEntry.setEntryTypeName(
|
|
166 |
XQConversions::s60DescToQString(fromEntry.GetEntryTypeName()));
|
85
|
167 |
|
|
168 |
toEntry.setFlags(static_cast<EntryFlag>(fromEntry.GetFlags()));
|
|
169 |
|
|
170 |
// take care of converting icon attributes
|
92
|
171 |
const CCaInnerIconDescription* innerIcon = fromEntry.Icon();
|
|
172 |
CaIconDescription iconDescription;
|
85
|
173 |
|
92
|
174 |
iconDescription.setId(innerIcon->Id());
|
89
|
175 |
iconDescription.setFilename(
|
92
|
176 |
XQConversions::s60DescToQString(innerIcon->FileName()));
|
89
|
177 |
iconDescription.setSkinId(
|
92
|
178 |
XQConversions::s60DescToQString(innerIcon->SkinId()));
|
89
|
179 |
iconDescription.setApplicationId(
|
92
|
180 |
XQConversions::s60DescToQString(innerIcon->ApplicationId()));
|
85
|
181 |
|
|
182 |
toEntry.setIconDescription(iconDescription);
|
|
183 |
|
|
184 |
const RCaEntryAttrArray &attributesArray = fromEntry.GetAttributes();
|
|
185 |
|
89
|
186 |
if (toEntry.entryTypeName() == APPLICATION_ENTRY_TYPE_NAME
|
|
187 |
|| toEntry.entryTypeName() == WIDGET_ENTRY_TYPE_NAME) {
|
|
188 |
toEntry.setAttribute(APPLICATION_UID_ATTRIBUTE_NAME,
|
|
189 |
QString::number(fromEntry.GetUid()));
|
85
|
190 |
}
|
|
191 |
|
|
192 |
const int attributesArrayCount = attributesArray.Count();
|
|
193 |
|
|
194 |
for (int i = 0; i < attributesArrayCount; ++i) {
|
|
195 |
const CCaEntryAttribute *const attribute = attributesArray[i];
|
89
|
196 |
toEntry.setAttribute(
|
|
197 |
XQConversions::s60DescToQString(attribute->Name()),
|
|
198 |
XQConversions::s60DescToQString(attribute->Value()));
|
85
|
199 |
}
|
127
|
200 |
QList<int> parentIds;
|
|
201 |
RArray<TInt> s60ParentIds = fromEntry.GetParentIds();
|
|
202 |
for (int i(0); i < s60ParentIds.Count(); ++i ) {
|
|
203 |
parentIds.append((int)s60ParentIds[i]);
|
|
204 |
}
|
|
205 |
toEntry.setParentIds(parentIds);
|
85
|
206 |
}
|
|
207 |
|
|
208 |
//----------------------------------------------------------------------------
|
|
209 |
//
|
|
210 |
//----------------------------------------------------------------------------
|
|
211 |
void CaObjectAdapter::convertL(const CaNotifierFilter ¬ifierFilter,
|
87
|
212 |
CCaInnerNotifierFilter &source)
|
85
|
213 |
{
|
|
214 |
source.SetParentId(static_cast<TInt>(notifierFilter.getParentId()));
|
|
215 |
|
|
216 |
RArray<TInt> idsList;
|
|
217 |
CleanupClosePushL(idsList);
|
|
218 |
CaObjectAdapter::convertL(notifierFilter.getIds(), idsList);
|
|
219 |
source.SetIdsL(idsList);
|
|
220 |
|
|
221 |
CleanupStack::PopAndDestroy(&idsList);
|
|
222 |
|
|
223 |
switch (notifierFilter.getEntryRole()) {
|
|
224 |
case static_cast<TUint>(ItemEntryRole):
|
|
225 |
source.SetEntryRole(EItemEntryRole);
|
|
226 |
break;
|
|
227 |
case static_cast<TUint>(GroupEntryRole):
|
|
228 |
source.SetEntryRole(EGroupEntryRole);
|
|
229 |
break;
|
|
230 |
default:
|
|
231 |
source.SetEntryRole(ENoneEntryRole);
|
|
232 |
break;
|
|
233 |
}
|
87
|
234 |
CDesC16ArrayFlat *typeNames = new(ELeave) CDesC16ArrayFlat(
|
85
|
235 |
KDefaultGranularity);
|
|
236 |
CleanupStack::PushL(typeNames);
|
|
237 |
|
|
238 |
const QStringList stringList = notifierFilter.getTypeNames();
|
|
239 |
|
|
240 |
foreach(QString str, stringList) {
|
89
|
241 |
typeNames->AppendL(XQConversions::qStringToS60Desc(str)->Des());
|
85
|
242 |
}
|
|
243 |
|
|
244 |
source.SetTypeNames(typeNames);
|
|
245 |
|
|
246 |
CleanupStack::Pop(typeNames);
|
|
247 |
}
|
|
248 |
//----------------------------------------------------------------------------
|
|
249 |
//
|
|
250 |
//----------------------------------------------------------------------------
|
|
251 |
void CaObjectAdapter::convertL(
|
|
252 |
const RPointerArray<CCaInnerEntry> &fromEntriesArray,
|
92
|
253 |
QList< QSharedPointer<CaEntry> > &toEntryList)
|
85
|
254 |
{
|
|
255 |
for (int i = 0; i < fromEntriesArray.Count(); ++i) {
|
92
|
256 |
const QSharedPointer<CaEntry> toEntry (new CaEntry(
|
|
257 |
static_cast<EntryRole>(fromEntriesArray[i]->GetRole())));
|
85
|
258 |
|
|
259 |
CaObjectAdapter::convert(*fromEntriesArray[i], *toEntry);
|
|
260 |
|
|
261 |
toEntryList << toEntry;
|
|
262 |
}
|
|
263 |
}
|
|
264 |
|
|
265 |
//----------------------------------------------------------------------------
|
|
266 |
//
|
|
267 |
//----------------------------------------------------------------------------
|
|
268 |
void CaObjectAdapter::convertL(const QList<int> &entryIdList,
|
87
|
269 |
RArray<TInt> &source)
|
85
|
270 |
{
|
87
|
271 |
foreach(int id, entryIdList) {
|
|
272 |
source.AppendL(static_cast<TInt>(id));
|
|
273 |
}
|
85
|
274 |
}
|
|
275 |
|
|
276 |
//----------------------------------------------------------------------------
|
|
277 |
//
|
|
278 |
//----------------------------------------------------------------------------
|
|
279 |
void CaObjectAdapter::convertL(const RArray<TInt> &innerEntryIdList,
|
87
|
280 |
QList<int> &idList)
|
85
|
281 |
{
|
|
282 |
for (TInt i = 0; i < innerEntryIdList.Count(); ++i) {
|
|
283 |
idList.append(innerEntryIdList[i]);
|
|
284 |
}
|
|
285 |
}
|
|
286 |
|
|
287 |
//----------------------------------------------------------------------------
|
|
288 |
//
|
|
289 |
//----------------------------------------------------------------------------
|
|
290 |
ErrorCode CaObjectAdapter::convertErrorCode(int internalErrorCode)
|
|
291 |
{
|
|
292 |
ErrorCode error(NoErrorCode);
|
|
293 |
switch (internalErrorCode) {
|
|
294 |
case KErrNone:
|
|
295 |
error = NoErrorCode;
|
|
296 |
break;
|
|
297 |
case KErrNotFound:
|
|
298 |
error = NotFoundErrorCode;
|
|
299 |
break;
|
|
300 |
case KErrNoMemory:
|
|
301 |
error = OutOfMemoryErrorCode;
|
|
302 |
break;
|
|
303 |
case KErrArgument:
|
|
304 |
error = BadArgumentErrorCode;
|
|
305 |
break;
|
93
|
306 |
case KErrServerTerminated:
|
|
307 |
error = ServerTerminated;
|
|
308 |
break;
|
85
|
309 |
default:
|
|
310 |
error = UnknownErrorCode;
|
|
311 |
break;
|
|
312 |
}
|
|
313 |
return error;
|
|
314 |
}
|
|
315 |
|
|
316 |
//----------------------------------------------------------------------------
|
|
317 |
//
|
|
318 |
//----------------------------------------------------------------------------
|
|
319 |
void CaObjectAdapter::convert(
|
|
320 |
CaNotifierPrivate::NotifierType src,
|
|
321 |
CCaInnerNotifierFilter::TNotifierType &dest)
|
|
322 |
{
|
87
|
323 |
switch (src) {
|
85
|
324 |
case CaNotifierPrivate::EntryChangedWithIdNotifierType:
|
|
325 |
dest = CCaInnerNotifierFilter::EEntryChangedWithId;
|
|
326 |
break;
|
|
327 |
case CaNotifierPrivate::EntryChangedWithEntryNotifierType:
|
|
328 |
dest = CCaInnerNotifierFilter::EEntryChangedWithEntry;
|
|
329 |
break;
|
|
330 |
case CaNotifierPrivate::EntryTouchedNotifierType:
|
|
331 |
dest = CCaInnerNotifierFilter::EEntryTouched;
|
|
332 |
break;
|
|
333 |
case CaNotifierPrivate::GroupContentChangedNotifierType:
|
|
334 |
dest = CCaInnerNotifierFilter::EGroupContentChanged;
|
|
335 |
break;
|
|
336 |
}
|
|
337 |
}
|
|
338 |
|
|
339 |
//----------------------------------------------------------------------------
|
|
340 |
//
|
|
341 |
//----------------------------------------------------------------------------
|
|
342 |
void CaObjectAdapter::convert(
|
|
343 |
TChangeType src, ChangeType &dest)
|
|
344 |
{
|
87
|
345 |
switch (src) {
|
85
|
346 |
case EAddChangeType:
|
|
347 |
dest = AddChangeType;
|
|
348 |
break;
|
|
349 |
case ERemoveChangeType:
|
|
350 |
dest = RemoveChangeType;
|
|
351 |
break;
|
|
352 |
case EUpdateChangeType:
|
|
353 |
dest = UpdateChangeType;
|
|
354 |
break;
|
|
355 |
}
|
|
356 |
}
|
|
357 |
|
|
358 |
CCaInnerQuery::TSortAttribute CaObjectAdapter::getSortCode(
|
|
359 |
SortAttribute sortAttribute, Qt::SortOrder sortOrder)
|
|
360 |
{
|
|
361 |
CCaInnerQuery::TSortAttribute sortCode(CCaInnerQuery::Default);
|
|
362 |
|
|
363 |
switch (sortAttribute) {
|
87
|
364 |
case NameSortAttribute: {
|
85
|
365 |
sortCode = (sortOrder == Qt::AscendingOrder) ? CCaInnerQuery::Name
|
87
|
366 |
: CCaInnerQuery::NameDesc;
|
85
|
367 |
break;
|
|
368 |
}
|
87
|
369 |
case CreatedTimestampSortAttribute: {
|
85
|
370 |
sortCode = (sortOrder == Qt::AscendingOrder)
|
87
|
371 |
? CCaInnerQuery::CreatedTimestamp
|
|
372 |
: CCaInnerQuery::CreatedTimestampDesc;
|
85
|
373 |
break;
|
|
374 |
}
|
87
|
375 |
case DefaultSortAttribute: {
|
85
|
376 |
sortCode = (sortOrder == Qt::AscendingOrder)
|
87
|
377 |
? CCaInnerQuery::Default : CCaInnerQuery::DefaultDesc;
|
85
|
378 |
break;
|
|
379 |
}
|
|
380 |
}
|
|
381 |
|
|
382 |
return sortCode;
|
|
383 |
}
|
|
384 |
|
|
385 |
//----------------------------------------------------------------------------
|
|
386 |
//
|
|
387 |
//----------------------------------------------------------------------------
|
|
388 |
void CaObjectAdapter::setId(CaEntry &entry,
|
87
|
389 |
int id)
|
85
|
390 |
{
|
|
391 |
entry.setId(id);
|
|
392 |
}
|