245 } |
245 } |
246 return return_value; |
246 return return_value; |
247 }; |
247 }; |
248 |
248 |
249 /*! |
249 /*! |
250 \class CHbSymbianVariant |
250 \class CHbSymbianVariant |
251 \brief CHbSymbianVariant implements QVariant for Symbian. |
251 \brief CHbSymbianVariant is a QVariant like union for Symbian data types. |
252 |
252 |
253 It supports part of the data types supported in QVariant: |
253 <b>This class is Symbian only. Not available on other platforms.</b> |
254 QString (TDesC) |
254 |
255 QChar (TChar) |
255 CHbSymbianVariant holds a single value of a single type at a time. CHbSymbianVariant::TType |
256 QPoint(TPoint) |
256 specifies supported data types. |
257 QRect(TRect) |
257 |
258 QSize(TSize) |
258 The class is used to pass parameters to device dialog and indicator plugins. Device dialog |
259 QByteArray(TDesC8) |
259 and indicator frameworks perform conversion between Qt and Symbian data types. Below list |
260 QStringList (MDesCArray) |
260 contains a partial list of Symbian data types and corresponding Qt types supported by |
261 |
261 the class. |
262 The data passed to the constructor is copied to the CHbSymbianVariant. |
262 |
263 |
263 <table> |
264 \sa CHbSymbianVariantMap, CHbDeviceDialog |
264 <caption> Symbian/Qt data type analogy</caption> |
265 \stable |
265 <tr><th>Symbian type</th><th>Qt type</th></tr> |
266 |
266 <tr><td>TDesC</td><td>QString</td></tr> |
267 \hbcore |
267 <tr><td>TChar</td><td>QChar</td></tr> |
268 |
268 <tr><td>TPoint</td><td>QPoint</td></tr> |
|
269 <tr><td>TRect</td><td>QRect</td></tr> |
|
270 <tr><td>TSize</td><td>QSize</td></tr> |
|
271 <tr><td>TDesC8</td><td>QByteArray</td></tr> |
|
272 <tr><td>MDesCArray</td><td>QStringList</td></tr> |
|
273 <tr><td>CHbSymbianVariantMap</td><td>QVariantMap</td></tr> |
|
274 </table> |
|
275 |
|
276 \sa CHbSymbianVariantMap, CHbDeviceDialogSymbian, CHbIndicatorSymbian |
|
277 |
|
278 \stable |
|
279 \hbcore |
269 */ |
280 */ |
270 |
281 |
271 /*! |
282 /*! |
272 \enum CHbSymbianVariant::TType |
283 \enum CHbSymbianVariant::TType |
273 Data types the CHbSymbianVariant can contain |
284 Data types CHbSymbianVariant supports. |
274 */ |
285 */ |
275 /*! |
286 /*! |
276 \var CHbSymbianVariant::EInt |
287 \var CHbSymbianVariant::TType CHbSymbianVariant::EInt |
277 a TInt |
288 Data type TInt. |
278 */ |
289 */ |
279 /*! |
290 /*! |
280 \var CHbSymbianVariant::EBool |
291 \var CHbSymbianVariant::TType CHbSymbianVariant::EBool |
281 a TBool |
292 Data type TBool. |
282 */ |
293 */ |
283 /*! |
294 /*! |
284 \var CHbSymbianVariant::EUint |
295 \var CHbSymbianVariant::TType CHbSymbianVariant::EUint |
285 a TUint |
296 Data type TUint. |
286 */ |
297 */ |
287 /*! |
298 /*! |
288 \var CHbSymbianVariant::EReal |
299 \var CHbSymbianVariant::TType CHbSymbianVariant::EReal |
289 a TReal |
300 Data type TReal. |
290 */ |
301 */ |
291 /*! |
302 /*! |
292 \var CHbSymbianVariant::ERect |
303 \var CHbSymbianVariant::TType CHbSymbianVariant::ERect |
293 a TRect |
304 Data type TRect. |
294 */ |
305 */ |
295 /*! |
306 /*! |
296 \var CHbSymbianVariant::EPoint |
307 \var CHbSymbianVariant::TType CHbSymbianVariant::EPoint |
297 a TPoint |
308 Data type TPoint. |
298 */ |
309 */ |
299 /*! |
310 /*! |
300 \var CHbSymbianVariant::ESize |
311 \var CHbSymbianVariant::TType CHbSymbianVariant::ESize |
301 a TSize |
312 Data type TSize. |
302 */ |
313 */ |
303 /*! |
314 /*! |
304 \var CHbSymbianVariant::EChar |
315 \var CHbSymbianVariant::TType CHbSymbianVariant::EChar |
305 a TChar |
316 Data type TChar. |
306 */ |
317 */ |
307 /*! |
318 /*! |
308 \var CHbSymbianVariant::EDes |
319 \var CHbSymbianVariant::TType CHbSymbianVariant::EDes |
309 a TDesC |
320 Data type TDesC. |
310 */ |
321 */ |
311 /*! |
322 /*! |
312 \var CHbSymbianVariant::EBinary |
323 \var CHbSymbianVariant::TType CHbSymbianVariant::EBinary |
313 a TDesC8 |
324 Data type TDesC8. |
314 */ |
325 */ |
315 /*! |
326 /*! |
316 \var CHbSymbianVariant::EDesArray |
327 \var CHbSymbianVariant::TType CHbSymbianVariant::EDesArray |
317 a MDesCArray |
328 Data type MDesCArray. |
318 */ |
329 */ |
319 /*! |
330 /*! |
320 \var CHbSymbianVariant::EVariantMap |
331 \var CHbSymbianVariant::TType CHbSymbianVariant::EVariantMap |
321 a symbian variant map |
332 Data type CHbSymbianVariantMap. |
322 */ |
333 */ |
323 |
334 |
324 /*! |
335 /*! |
325 \fn T * CHbSymbianVariant::Value() |
336 \fn T* CHbSymbianVariant::Value() const |
326 |
337 |
327 Template class to get variants value casted to the correct pointer type. See the |
338 Template fuction to get variant's value casted to a correct pointer type. See |
328 CHbSymbianVariant::TType for the supported classes. |
339 TType for the supported types. |
329 |
340 |
330 \sa CHbSymbianVariant::TType |
341 \sa TType |
331 */ |
342 */ |
332 |
343 |
333 /*! |
344 /*! |
334 Creates a new CHbSymbianVariant. Note that if CHbSymbianVariant::EDesArray |
345 Creates a new CHbSymbianVariant. Data passed to the constructor is copied to the |
335 is used the \aData must be casted to MDesCArray pointer when passed to the method. |
346 CHbSymbianVariant. |
336 */ |
347 |
337 |
348 \param aData Data to copy into the variant. Note: If EDesArray is used, data pointer must be casted to MDesCArray. |
|
349 \param aDataType Type of data. |
|
350 */ |
338 EXPORT_C CHbSymbianVariant* CHbSymbianVariant::NewL(const TAny* aData, TType aDataType) |
351 EXPORT_C CHbSymbianVariant* CHbSymbianVariant::NewL(const TAny* aData, TType aDataType) |
339 { |
352 { |
340 CHbSymbianVariant* variant = new (ELeave) CHbSymbianVariant(aData, aDataType); |
353 CHbSymbianVariant* variant = new (ELeave) CHbSymbianVariant(aData, aDataType); |
341 CleanupStack::PushL(variant); |
354 CleanupStack::PushL(variant); |
342 variant->ConstructL(aData, aDataType); |
355 variant->ConstructL(aData, aDataType); |
343 CleanupStack::Pop(variant); //variant |
356 CleanupStack::Pop(variant); //variant |
344 return variant; |
357 return variant; |
345 } |
358 } |
346 |
359 |
347 |
360 /*! |
348 /*! |
361 Returns type of data stored in CHbSymbianVariant. |
349 Returns the data type stored in CHbSymbianVariant |
362 |
350 |
363 \sa TType |
351 \sa CHbSymbianVariant::TType |
|
352 */ |
364 */ |
353 EXPORT_C CHbSymbianVariant::TType CHbSymbianVariant::Type() const |
365 EXPORT_C CHbSymbianVariant::TType CHbSymbianVariant::Type() const |
354 { |
366 { |
355 return d->iType; |
367 return d->iType; |
356 } |
368 } |
357 |
369 |
358 /*! |
370 /*! |
359 Get TAny pointer to the CHbSymbianVariant data. |
371 Returns pointer to data stored by CHbSymbianVariant. Ownership does not changed. |
360 The CHbSymbianVariant::Value() should be used instead of this method. |
372 Value() should be used instead of this method. |
361 |
|
362 Ownership is not changed. |
|
363 */ |
373 */ |
364 EXPORT_C TAny* CHbSymbianVariant::Data() const |
374 EXPORT_C TAny* CHbSymbianVariant::Data() const |
365 { |
375 { |
366 return d->Data(); |
376 return d->Data(); |
367 } |
377 } |
368 |
378 |
369 /*! |
379 /*! |
370 Set new data to CHbSymbianVariant. Old data is deleted. |
380 Copies new data to CHbSymbianVariant. Old data is deleted. |
371 |
381 Ownership does not changed. |
372 Ownership is not changed. |
382 |
|
383 \param aData Data to copy into the variant. Note: If EDesArray is used, data pointer must be casted to MDesCArray. |
|
384 \param aDataType Type of data. |
373 */ |
385 */ |
374 EXPORT_C void CHbSymbianVariant::SetData(TAny* aData, TType aDataType) |
386 EXPORT_C void CHbSymbianVariant::SetData(TAny* aData, TType aDataType) |
375 { |
387 { |
376 if(d) { |
388 if(d) { |
377 d->ResetData(); |
389 d->ResetData(); |
378 d->InitializeDataL(aData, aDataType); |
390 d->InitializeDataL(aData, aDataType); |
379 } |
391 } |
380 } |
392 } |
381 /*! |
393 /*! |
382 Is the the data in CHbSymbianVariant valid. data is valid if the variant |
394 Returns true if CHbSymbianVariant holds valid data. |
383 is created with valid data and data type |
|
384 */ |
395 */ |
385 EXPORT_C TBool CHbSymbianVariant::IsValid() const |
396 EXPORT_C TBool CHbSymbianVariant::IsValid() const |
386 { |
397 { |
387 if(d && !(d->iNull)) |
398 if(d && !(d->iNull)) |
388 return ETrue; |
399 return ETrue; |
423 CDesC16Array* iKeyArray; |
434 CDesC16Array* iKeyArray; |
424 RPointerArray<CHbSymbianVariant> iVariantArray; |
435 RPointerArray<CHbSymbianVariant> iVariantArray; |
425 }; |
436 }; |
426 |
437 |
427 /*! |
438 /*! |
428 \class CHbSymbianVariantMap |
439 \class CHbSymbianVariantMap |
429 \brief CHbSymbianVariantMap is a container for CHbSymbianVariant objects. |
440 \brief CHbSymbianVariantMap is QVariantMap style container for CHbSymbianVariant objects. |
430 |
441 |
431 It replicates QVariantMap functionality to Symbian native programming side. |
442 <b>This class is Symbian only. Not available on other platforms.</b> |
432 |
443 |
433 \sa CHbSymbianVariant, CHbDeviceDialog |
444 This class is used to pass parameters to/from device dialogs. |
434 \stable |
445 |
435 */ |
446 \sa CHbSymbianVariant, CHbDeviceDialogSymbian |
436 |
447 \stable |
437 /*! |
448 */ |
438 Create a new CHbSymbianVariantMap. Map is empty after creation and |
449 |
439 ready for use. |
450 /*! |
|
451 Creates an empty CHbSymbianVariantMap. |
440 */ |
452 */ |
441 EXPORT_C CHbSymbianVariantMap* CHbSymbianVariantMap::NewL() |
453 EXPORT_C CHbSymbianVariantMap* CHbSymbianVariantMap::NewL() |
442 { |
454 { |
443 CHbSymbianVariantMap* map = new (ELeave) CHbSymbianVariantMap(); |
455 CHbSymbianVariantMap* map = new (ELeave) CHbSymbianVariantMap(); |
444 CleanupStack::PushL(map); |
456 CleanupStack::PushL(map); |
452 delete d; |
464 delete d; |
453 d = 0; |
465 d = 0; |
454 } |
466 } |
455 |
467 |
456 /*! |
468 /*! |
457 Adds a key-value pairing to the map. Takes ownership of the variant, |
469 Adds a key-value pair into the container. Takes ownership of the variant, |
458 key is copied. If key is already in the map, the value connected to the key |
470 key is copied. If key is already in the map, the value connected to the key |
459 is replaced with the new value. the old value is deleted. |
471 is replaced with the new value and the old value is deleted. |
|
472 |
|
473 \param aKey Key for the value. |
|
474 \param aVariant Value to add. |
|
475 |
|
476 \return Returns Symbian error code. On error ownership of \p aKey is returned to caller. |
460 */ |
477 */ |
461 EXPORT_C TInt CHbSymbianVariantMap::Add(const TDesC& aKey, CHbSymbianVariant* aVariant) |
478 EXPORT_C TInt CHbSymbianVariantMap::Add(const TDesC& aKey, CHbSymbianVariant* aVariant) |
462 { |
479 { |
463 TInt pos = KErrNotFound; |
480 TInt pos = KErrNotFound; |
464 TInt result = d->iKeyArray->Find(aKey, pos,ECmpNormal); |
481 TInt result = d->iKeyArray->Find(aKey, pos, ECmpNormal); |
465 |
482 |
466 // there is already a key-value pairing in the map |
483 // There is already a key-value pairing in the map |
467 if((result == KErrNone) && (pos >= 0)) { |
484 if ((result == KErrNone) && (pos >= 0)) { |
468 |
485 |
469 // for some reason directly deleting the pointer and |
486 // for some reason directly deleting the pointer and |
470 // assigning a new one to position does not work |
487 // assigning a new one to position does not work |
471 CHbSymbianVariant* remove = d->iVariantArray[pos]; |
488 CHbSymbianVariant* remove = d->iVariantArray[pos]; |
472 d->iVariantArray.Remove(pos); |
489 d->iVariantArray.Remove(pos); |