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"
|
|
37 |
#include "camenuiconutility.h"
|
|
38 |
#include "canotifierfilter.h"
|
|
39 |
#include "cainnernotifierfilter.h"
|
89
|
40 |
#include "caclient_defines.h"
|
87
|
41 |
|
85
|
42 |
static QImage::Format TDisplayMode2Format(TDisplayMode mode)
|
|
43 |
{
|
|
44 |
QImage::Format format;
|
87
|
45 |
switch (mode) {
|
85
|
46 |
case EGray2:
|
|
47 |
format = QImage::Format_MonoLSB;
|
|
48 |
break;
|
|
49 |
case EColor256:
|
|
50 |
case EGray256:
|
|
51 |
format = QImage::Format_Indexed8;
|
|
52 |
break;
|
|
53 |
case EColor4K:
|
|
54 |
format = QImage::Format_RGB444;
|
|
55 |
break;
|
|
56 |
case EColor64K:
|
|
57 |
format = QImage::Format_RGB16;
|
|
58 |
break;
|
|
59 |
case EColor16M:
|
|
60 |
format = QImage::Format_RGB888;
|
|
61 |
break;
|
|
62 |
case EColor16MU:
|
|
63 |
format = QImage::Format_RGB32;
|
|
64 |
break;
|
|
65 |
case EColor16MA:
|
|
66 |
format = QImage::Format_ARGB32;
|
|
67 |
break;
|
|
68 |
case EColor16MAP:
|
|
69 |
format = QImage::Format_ARGB32_Premultiplied;
|
|
70 |
break;
|
|
71 |
default:
|
|
72 |
format = QImage::Format_Invalid;
|
|
73 |
break;
|
|
74 |
}
|
|
75 |
return format;
|
|
76 |
}
|
|
77 |
|
87
|
78 |
QPixmap fromSymbianCFbsBitmap(CFbsBitmap *aBitmap)
|
|
79 |
{
|
85
|
80 |
aBitmap->BeginDataAccess();
|
87
|
81 |
uchar *data = (uchar *)aBitmap->DataAddress();
|
85
|
82 |
TSize size = aBitmap->SizeInPixels();
|
87
|
83 |
TDisplayMode displayMode = aBitmap->DisplayMode();
|
|
84 |
|
85
|
85 |
// QImage format must match to bitmap format
|
89
|
86 |
QImage image(data, size.iWidth, size.iHeight, TDisplayMode2Format(
|
|
87 |
displayMode));
|
85
|
88 |
aBitmap->EndDataAccess();
|
87
|
89 |
|
89
|
90 |
// No data copying happens because
|
|
91 |
// image format matches native OpenVG format.
|
85
|
92 |
// So QPixmap actually points to CFbsBitmap data.
|
|
93 |
return QPixmap::fromImage(image);
|
87
|
94 |
}
|
85
|
95 |
|
89
|
96 |
// ---------------------------------------------------------------------------
|
85
|
97 |
//
|
89
|
98 |
// ---------------------------------------------------------------------------
|
85
|
99 |
void CaObjectAdapter::convertL(const CaEntry &fromEntry,
|
87
|
100 |
CCaInnerEntry &toEntry)
|
85
|
101 |
{
|
|
102 |
toEntry.SetId(fromEntry.id());
|
|
103 |
|
89
|
104 |
toEntry.SetTextL(
|
|
105 |
XQConversions::qStringToS60Desc(fromEntry.text())->Des());
|
85
|
106 |
|
89
|
107 |
toEntry.SetDescriptionL(
|
|
108 |
XQConversions::qStringToS60Desc(fromEntry.description())->Des());
|
|
109 |
toEntry.SetDescriptionL(
|
|
110 |
XQConversions::qStringToS60Desc(fromEntry.description())->Des());
|
85
|
111 |
|
|
112 |
toEntry.SetEntryTypeNameL(
|
89
|
113 |
XQConversions::qStringToS60Desc(fromEntry.entryTypeName())->Des());
|
85
|
114 |
|
87
|
115 |
toEntry.SetFlags(static_cast<TUint>(fromEntry.flags()));
|
85
|
116 |
|
87
|
117 |
toEntry.SetRole(static_cast<TUint>(fromEntry.role()));
|
85
|
118 |
|
|
119 |
const CaIconDescription fromIconDescription =
|
|
120 |
fromEntry.iconDescription();
|
|
121 |
|
|
122 |
toEntry.SetIconDataL(
|
89
|
123 |
XQConversions::qStringToS60Desc(
|
|
124 |
fromIconDescription.filename())->Des(),
|
|
125 |
XQConversions::qStringToS60Desc(
|
|
126 |
fromIconDescription.skinId())->Des(),
|
|
127 |
XQConversions::qStringToS60Desc(
|
|
128 |
fromIconDescription.applicationId())->Des());
|
85
|
129 |
|
|
130 |
const QMap<QString, QString> attributesMap = fromEntry.attributes();
|
|
131 |
|
87
|
132 |
foreach(QString key, attributesMap.keys()) {
|
89
|
133 |
if (key == APPLICATION_UID_ATTRIBUTE_NAME) {
|
85
|
134 |
const TInt32 uid = attributesMap.value(key).toInt();
|
|
135 |
toEntry.SetUid(uid);
|
87
|
136 |
} else {
|
85
|
137 |
toEntry.AddAttributeL(
|
89
|
138 |
XQConversions::qStringToS60Desc(key)->Des(),
|
|
139 |
XQConversions::qStringToS60Desc(
|
|
140 |
attributesMap.value(key))->Des());
|
85
|
141 |
}
|
|
142 |
}
|
|
143 |
}
|
|
144 |
|
|
145 |
//----------------------------------------------------------------------------
|
|
146 |
//
|
|
147 |
//----------------------------------------------------------------------------
|
|
148 |
void CaObjectAdapter::convertL(const CaQuery &fromQuery,
|
87
|
149 |
CCaInnerQuery &toQuery)
|
85
|
150 |
{
|
|
151 |
toQuery.SetParentId(fromQuery.parentId());
|
|
152 |
|
|
153 |
toQuery.SetFlagsOn(static_cast<TUint>(fromQuery.flagsOn()));
|
|
154 |
|
|
155 |
toQuery.SetFlagsOff(static_cast<TUint>(fromQuery.flagsOff()));
|
|
156 |
|
|
157 |
toQuery.SetRole(static_cast<TInt>(fromQuery.entryRoles()));
|
|
158 |
|
|
159 |
toQuery.SetCount(fromQuery.count());
|
|
160 |
|
|
161 |
const QStringList list = fromQuery.entryTypeNames();
|
|
162 |
|
|
163 |
CDesC16ArrayFlat *sourceList =
|
87
|
164 |
new(ELeave)CDesC16ArrayFlat(KDefaultGranularity);
|
85
|
165 |
CleanupStack::PushL(sourceList);
|
|
166 |
|
87
|
167 |
foreach(const QString str, list) {
|
89
|
168 |
sourceList->AppendL(XQConversions::qStringToS60Desc(str)->Des());
|
85
|
169 |
}
|
|
170 |
|
|
171 |
toQuery.SetEntryTypeNames(sourceList);
|
|
172 |
|
|
173 |
CleanupStack::Pop(sourceList);
|
|
174 |
|
|
175 |
// mapping sort enums
|
|
176 |
SortAttribute sortAttr;
|
|
177 |
Qt::SortOrder sortOrder;
|
|
178 |
fromQuery.getSort(sortAttr, sortOrder);
|
|
179 |
toQuery.SetSort(CaObjectAdapter::getSortCode(sortAttr, sortOrder));
|
89
|
180 |
|
88
|
181 |
const QMap<QString, QString> attributesMap = fromQuery.attributes();
|
|
182 |
|
|
183 |
foreach(QString key, attributesMap.keys()) {
|
89
|
184 |
toQuery.AddAttributeL(
|
|
185 |
XQConversions::qStringToS60Desc(key)->Des(),
|
|
186 |
XQConversions::qStringToS60Desc(
|
|
187 |
attributesMap.value(key))->Des());
|
88
|
188 |
}
|
85
|
189 |
}
|
|
190 |
|
|
191 |
//----------------------------------------------------------------------------
|
|
192 |
//
|
|
193 |
//----------------------------------------------------------------------------
|
89
|
194 |
void CaObjectAdapter::convert(
|
|
195 |
const CCaInnerEntry &fromEntry, CaEntry &toEntry)
|
85
|
196 |
{
|
|
197 |
toEntry.setId(fromEntry.GetId());
|
|
198 |
|
89
|
199 |
toEntry.setText(XQConversions::s60DescToQString(fromEntry.GetText()));
|
85
|
200 |
|
89
|
201 |
toEntry.setDescription(
|
|
202 |
XQConversions::s60DescToQString(fromEntry.GetDescription()));
|
|
203 |
toEntry.setEntryTypeName(
|
|
204 |
XQConversions::s60DescToQString(fromEntry.GetEntryTypeName()));
|
85
|
205 |
|
|
206 |
toEntry.setFlags(static_cast<EntryFlag>(fromEntry.GetFlags()));
|
|
207 |
|
|
208 |
// take care of converting icon attributes
|
|
209 |
const CCaInnerEntry::TIconAttributes &icon = fromEntry.GetIcon();
|
|
210 |
|
|
211 |
CaIconDescription iconDescription;
|
|
212 |
iconDescription.setId(icon.iId);
|
89
|
213 |
iconDescription.setFilename(
|
|
214 |
XQConversions::s60DescToQString(icon.iFileName));
|
|
215 |
iconDescription.setSkinId(
|
|
216 |
XQConversions::s60DescToQString(icon.iSkinId));
|
|
217 |
iconDescription.setApplicationId(
|
|
218 |
XQConversions::s60DescToQString(icon.iApplicationId));
|
85
|
219 |
|
|
220 |
toEntry.setIconDescription(iconDescription);
|
|
221 |
|
|
222 |
const RCaEntryAttrArray &attributesArray = fromEntry.GetAttributes();
|
|
223 |
|
89
|
224 |
if (toEntry.entryTypeName() == APPLICATION_ENTRY_TYPE_NAME
|
|
225 |
|| toEntry.entryTypeName() == WIDGET_ENTRY_TYPE_NAME) {
|
|
226 |
toEntry.setAttribute(APPLICATION_UID_ATTRIBUTE_NAME,
|
|
227 |
QString::number(fromEntry.GetUid()));
|
85
|
228 |
}
|
|
229 |
|
|
230 |
const int attributesArrayCount = attributesArray.Count();
|
|
231 |
|
|
232 |
for (int i = 0; i < attributesArrayCount; ++i) {
|
|
233 |
const CCaEntryAttribute *const attribute = attributesArray[i];
|
89
|
234 |
toEntry.setAttribute(
|
|
235 |
XQConversions::s60DescToQString(attribute->Name()),
|
|
236 |
XQConversions::s60DescToQString(attribute->Value()));
|
85
|
237 |
}
|
|
238 |
}
|
|
239 |
|
|
240 |
//----------------------------------------------------------------------------
|
|
241 |
//
|
|
242 |
//----------------------------------------------------------------------------
|
|
243 |
void CaObjectAdapter::convertL(const CaNotifierFilter ¬ifierFilter,
|
87
|
244 |
CCaInnerNotifierFilter &source)
|
85
|
245 |
{
|
|
246 |
source.SetParentId(static_cast<TInt>(notifierFilter.getParentId()));
|
|
247 |
|
|
248 |
RArray<TInt> idsList;
|
|
249 |
CleanupClosePushL(idsList);
|
|
250 |
CaObjectAdapter::convertL(notifierFilter.getIds(), idsList);
|
|
251 |
source.SetIdsL(idsList);
|
|
252 |
|
|
253 |
CleanupStack::PopAndDestroy(&idsList);
|
|
254 |
|
|
255 |
switch (notifierFilter.getEntryRole()) {
|
|
256 |
case static_cast<TUint>(ItemEntryRole):
|
|
257 |
source.SetEntryRole(EItemEntryRole);
|
|
258 |
break;
|
|
259 |
case static_cast<TUint>(GroupEntryRole):
|
|
260 |
source.SetEntryRole(EGroupEntryRole);
|
|
261 |
break;
|
|
262 |
default:
|
|
263 |
source.SetEntryRole(ENoneEntryRole);
|
|
264 |
break;
|
|
265 |
}
|
87
|
266 |
CDesC16ArrayFlat *typeNames = new(ELeave) CDesC16ArrayFlat(
|
85
|
267 |
KDefaultGranularity);
|
|
268 |
CleanupStack::PushL(typeNames);
|
|
269 |
|
|
270 |
const QStringList stringList = notifierFilter.getTypeNames();
|
|
271 |
|
|
272 |
foreach(QString str, stringList) {
|
89
|
273 |
typeNames->AppendL(XQConversions::qStringToS60Desc(str)->Des());
|
85
|
274 |
}
|
|
275 |
|
|
276 |
source.SetTypeNames(typeNames);
|
|
277 |
|
|
278 |
CleanupStack::Pop(typeNames);
|
|
279 |
}
|
|
280 |
//----------------------------------------------------------------------------
|
|
281 |
//
|
|
282 |
//----------------------------------------------------------------------------
|
|
283 |
void CaObjectAdapter::convertL(
|
|
284 |
const RPointerArray<CCaInnerEntry> &fromEntriesArray,
|
87
|
285 |
QList<CaEntry *> &toEntryList)
|
85
|
286 |
{
|
|
287 |
for (int i = 0; i < fromEntriesArray.Count(); ++i) {
|
|
288 |
CaEntry *const toEntry = new CaEntry(
|
|
289 |
static_cast<EntryRole>(fromEntriesArray[i]->GetRole()));
|
|
290 |
|
|
291 |
CaObjectAdapter::convert(*fromEntriesArray[i], *toEntry);
|
|
292 |
|
|
293 |
toEntryList << toEntry;
|
|
294 |
}
|
|
295 |
}
|
|
296 |
|
|
297 |
//----------------------------------------------------------------------------
|
|
298 |
//
|
|
299 |
//----------------------------------------------------------------------------
|
|
300 |
void CaObjectAdapter::convertL(const QList<int> &entryIdList,
|
87
|
301 |
RArray<TInt> &source)
|
85
|
302 |
{
|
87
|
303 |
foreach(int id, entryIdList) {
|
|
304 |
source.AppendL(static_cast<TInt>(id));
|
|
305 |
}
|
85
|
306 |
}
|
|
307 |
|
|
308 |
//----------------------------------------------------------------------------
|
|
309 |
//
|
|
310 |
//----------------------------------------------------------------------------
|
|
311 |
void CaObjectAdapter::convertL(const RArray<TInt> &innerEntryIdList,
|
87
|
312 |
QList<int> &idList)
|
85
|
313 |
{
|
|
314 |
for (TInt i = 0; i < innerEntryIdList.Count(); ++i) {
|
|
315 |
idList.append(innerEntryIdList[i]);
|
|
316 |
}
|
|
317 |
}
|
|
318 |
|
|
319 |
//----------------------------------------------------------------------------
|
|
320 |
//
|
|
321 |
//----------------------------------------------------------------------------
|
86
|
322 |
HbIcon CaObjectAdapter::makeIcon(const CaEntry &entry, const QSize &size)
|
85
|
323 |
{
|
87
|
324 |
|
86
|
325 |
HbIcon icon;
|
|
326 |
TRAPD(leaveCode, icon = makeIconL(entry, size));
|
85
|
327 |
|
|
328 |
USE_QDEBUG_IF(leaveCode) << "CaObjectAdapter::makeIcon leaveCode:"
|
87
|
329 |
<< leaveCode;
|
85
|
330 |
|
86
|
331 |
return icon;
|
85
|
332 |
}
|
|
333 |
|
|
334 |
//----------------------------------------------------------------------------
|
|
335 |
//
|
|
336 |
//----------------------------------------------------------------------------
|
|
337 |
ErrorCode CaObjectAdapter::convertErrorCode(int internalErrorCode)
|
|
338 |
{
|
|
339 |
ErrorCode error(NoErrorCode);
|
|
340 |
switch (internalErrorCode) {
|
|
341 |
case KErrNone:
|
|
342 |
error = NoErrorCode;
|
|
343 |
break;
|
|
344 |
case KErrNotFound:
|
|
345 |
error = NotFoundErrorCode;
|
|
346 |
break;
|
|
347 |
case KErrNoMemory:
|
|
348 |
error = OutOfMemoryErrorCode;
|
|
349 |
break;
|
|
350 |
case KErrArgument:
|
|
351 |
error = BadArgumentErrorCode;
|
|
352 |
break;
|
|
353 |
default:
|
|
354 |
error = UnknownErrorCode;
|
|
355 |
break;
|
|
356 |
}
|
|
357 |
return error;
|
|
358 |
}
|
|
359 |
|
|
360 |
|
|
361 |
// -----------------------------------------------------------------------------
|
|
362 |
// copying compressed bitmap
|
|
363 |
//----------------------------------------------------------------------------
|
|
364 |
CFbsBitmap *CaObjectAdapter::copyBitmapLC(CFbsBitmap *input)
|
|
365 |
{
|
87
|
366 |
CFbsBitmap *bmp = new(ELeave) CFbsBitmap();
|
85
|
367 |
CleanupStack::PushL(bmp);
|
|
368 |
bmp->Create(input->SizeInPixels(), input->DisplayMode());
|
|
369 |
|
|
370 |
CFbsBitmapDevice *bitmapDevice = CFbsBitmapDevice::NewL(bmp);
|
|
371 |
CleanupStack::PushL(bitmapDevice);
|
|
372 |
CFbsBitGc *bmpGc;
|
|
373 |
bitmapDevice->CreateContext(bmpGc);
|
|
374 |
bmpGc->BitBlt(TPoint(0,0), input);
|
|
375 |
delete bmpGc;
|
|
376 |
CleanupStack::PopAndDestroy(bitmapDevice);
|
|
377 |
return bmp;
|
|
378 |
}
|
|
379 |
|
|
380 |
//----------------------------------------------------------------------------
|
|
381 |
//
|
|
382 |
//----------------------------------------------------------------------------
|
86
|
383 |
HbIcon CaObjectAdapter::makeIconL(const CaEntry &entry, const QSize &size)
|
85
|
384 |
{
|
86
|
385 |
HbIcon icon;
|
88
|
386 |
QString skinId(entry.iconDescription().skinId());
|
|
387 |
if (!skinId.isEmpty()) {
|
|
388 |
icon = HbIcon(skinId);
|
|
389 |
}
|
|
390 |
if (icon.isNull() || !(icon.size().isValid())) {
|
|
391 |
QString filename(entry.iconDescription().filename());
|
|
392 |
if (!filename.isEmpty()) {
|
89
|
393 |
|
|
394 |
// TODO:
|
|
395 |
// work-around for HbIcon::size() method locking files if returns
|
|
396 |
// default size, error id: ou1cimx1#279208 Case: mcl06HsDo07 -
|
|
397 |
// "Cannot delete file" when trying to uninstall sisx file
|
|
398 |
|
|
399 |
if (entry.entryTypeName() == XQConversions::s60DescToQString(KCaTypeWidget)) {
|
|
400 |
icon = QIcon(filename);
|
|
401 |
qWarning("Widget icon created by QIcon, as work-around for HbIcon::size");
|
|
402 |
} else {
|
|
403 |
icon = HbIcon(filename);
|
|
404 |
}
|
88
|
405 |
}
|
89
|
406 |
}
|
|
407 |
|
85
|
408 |
//try to load symbian icon from multi-bitmap (mbm, mbg)
|
86
|
409 |
if (icon.isNull() || !(icon.size().isValid())) {
|
88
|
410 |
CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC();
|
|
411 |
CaObjectAdapter::convertL(entry, *innerEntry);
|
|
412 |
|
85
|
413 |
CAknIcon *aknIcon = CaMenuIconUtility::GetItemIcon(*innerEntry);
|
86
|
414 |
QPixmap pixmap;
|
85
|
415 |
if (aknIcon) {
|
|
416 |
CleanupStack::PushL(aknIcon);
|
|
417 |
|
|
418 |
//need to disable compression to properly convert the bitmap
|
|
419 |
AknIconUtils::DisableCompression(aknIcon->Bitmap());
|
89
|
420 |
AknIconUtils::SetSize(
|
|
421 |
aknIcon->Bitmap(), TSize(size.width(), size.height()),
|
|
422 |
EAspectRatioPreservedAndUnusedSpaceRemoved);
|
85
|
423 |
if (aknIcon->Bitmap()->Header().iCompression
|
87
|
424 |
== ENoBitmapCompression) {
|
85
|
425 |
pixmap = fromSymbianCFbsBitmap(aknIcon->Bitmap());
|
89
|
426 |
QPixmap mask = fromSymbianCFbsBitmap(aknIcon->Mask());
|
85
|
427 |
pixmap.setAlphaChannel(mask);
|
87
|
428 |
} else { // we need special handling for icons in 9.2 (NGA)
|
|
429 |
// let's hope that in future it will be in QT code
|
85
|
430 |
CFbsBitmap *temp(NULL);
|
|
431 |
temp = copyBitmapLC(aknIcon->Bitmap());
|
|
432 |
pixmap = fromSymbianCFbsBitmap(temp);
|
|
433 |
CleanupStack::PopAndDestroy();
|
|
434 |
temp = copyBitmapLC(aknIcon->Mask());
|
|
435 |
QPixmap mask = fromSymbianCFbsBitmap(temp);
|
|
436 |
CleanupStack::PopAndDestroy();
|
|
437 |
pixmap.setAlphaChannel(mask);
|
|
438 |
}
|
|
439 |
pixmap = pixmap.scaled(size, Qt::KeepAspectRatioByExpanding);
|
|
440 |
CleanupStack::PopAndDestroy(aknIcon);
|
86
|
441 |
icon = HbIcon(QIcon(pixmap));
|
85
|
442 |
}
|
88
|
443 |
CleanupStack::PopAndDestroy(innerEntry);
|
85
|
444 |
}
|
86
|
445 |
return icon;
|
85
|
446 |
}
|
|
447 |
|
|
448 |
//----------------------------------------------------------------------------
|
|
449 |
//
|
|
450 |
//----------------------------------------------------------------------------
|
|
451 |
void CaObjectAdapter::convert(
|
|
452 |
CaNotifierPrivate::NotifierType src,
|
|
453 |
CCaInnerNotifierFilter::TNotifierType &dest)
|
|
454 |
{
|
87
|
455 |
switch (src) {
|
85
|
456 |
case CaNotifierPrivate::EntryChangedWithIdNotifierType:
|
|
457 |
dest = CCaInnerNotifierFilter::EEntryChangedWithId;
|
|
458 |
break;
|
|
459 |
case CaNotifierPrivate::EntryChangedWithEntryNotifierType:
|
|
460 |
dest = CCaInnerNotifierFilter::EEntryChangedWithEntry;
|
|
461 |
break;
|
|
462 |
case CaNotifierPrivate::EntryTouchedNotifierType:
|
|
463 |
dest = CCaInnerNotifierFilter::EEntryTouched;
|
|
464 |
break;
|
|
465 |
case CaNotifierPrivate::GroupContentChangedNotifierType:
|
|
466 |
dest = CCaInnerNotifierFilter::EGroupContentChanged;
|
|
467 |
break;
|
|
468 |
}
|
|
469 |
}
|
|
470 |
|
|
471 |
//----------------------------------------------------------------------------
|
|
472 |
//
|
|
473 |
//----------------------------------------------------------------------------
|
|
474 |
void CaObjectAdapter::convert(
|
|
475 |
TChangeType src, ChangeType &dest)
|
|
476 |
{
|
87
|
477 |
switch (src) {
|
85
|
478 |
case EAddChangeType:
|
|
479 |
dest = AddChangeType;
|
|
480 |
break;
|
|
481 |
case ERemoveChangeType:
|
|
482 |
dest = RemoveChangeType;
|
|
483 |
break;
|
|
484 |
case EUpdateChangeType:
|
|
485 |
dest = UpdateChangeType;
|
|
486 |
break;
|
|
487 |
}
|
|
488 |
}
|
|
489 |
|
|
490 |
CCaInnerQuery::TSortAttribute CaObjectAdapter::getSortCode(
|
|
491 |
SortAttribute sortAttribute, Qt::SortOrder sortOrder)
|
|
492 |
{
|
|
493 |
CCaInnerQuery::TSortAttribute sortCode(CCaInnerQuery::Default);
|
|
494 |
|
|
495 |
switch (sortAttribute) {
|
87
|
496 |
case NameSortAttribute: {
|
85
|
497 |
sortCode = (sortOrder == Qt::AscendingOrder) ? CCaInnerQuery::Name
|
87
|
498 |
: CCaInnerQuery::NameDesc;
|
85
|
499 |
break;
|
|
500 |
}
|
87
|
501 |
case CreatedTimestampSortAttribute: {
|
85
|
502 |
sortCode = (sortOrder == Qt::AscendingOrder)
|
87
|
503 |
? CCaInnerQuery::CreatedTimestamp
|
|
504 |
: CCaInnerQuery::CreatedTimestampDesc;
|
85
|
505 |
break;
|
|
506 |
}
|
87
|
507 |
case MostUsedSortAttribute: {
|
85
|
508 |
sortCode = (sortOrder == Qt::AscendingOrder)
|
87
|
509 |
? CCaInnerQuery::MostUsed : CCaInnerQuery::MostUsedDesc;
|
85
|
510 |
break;
|
|
511 |
}
|
87
|
512 |
case LastUsedSortAttribute: {
|
85
|
513 |
sortCode = (sortOrder == Qt::AscendingOrder)
|
87
|
514 |
? CCaInnerQuery::LastUsed : CCaInnerQuery::LastUsedDesc;
|
85
|
515 |
break;
|
|
516 |
}
|
87
|
517 |
case DefaultSortAttribute: {
|
85
|
518 |
sortCode = (sortOrder == Qt::AscendingOrder)
|
87
|
519 |
? CCaInnerQuery::Default : CCaInnerQuery::DefaultDesc;
|
85
|
520 |
break;
|
|
521 |
}
|
|
522 |
}
|
|
523 |
|
|
524 |
return sortCode;
|
|
525 |
}
|
|
526 |
|
|
527 |
//----------------------------------------------------------------------------
|
|
528 |
//
|
|
529 |
//----------------------------------------------------------------------------
|
|
530 |
void CaObjectAdapter::setId(CaEntry &entry,
|
87
|
531 |
int id)
|
85
|
532 |
{
|
|
533 |
entry.setId(id);
|
|
534 |
}
|