--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hgcacheproxymodel/tsrc/fute/HgCacheProxyModelTestApp/src/mydataprovider.cpp Mon May 03 13:32:54 2010 +0300
@@ -0,0 +1,236 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+* Version : %version: 1 %
+*/
+#include <QList>
+#include "hglogger.h"
+#include <hbicon.h>
+#include "mydataprovider.h"
+
+//#include "x:\sf\mw\qt\src\openvg\qpixmapdata_vg_p.h"
+//typedef VGImage (*pfnVgCreateEGLImageTargetKHR)(VGeglImageKHR);
+
+const int KItemIdRole = Qt::UserRole+1;
+
+const int KThumbnailsPriority = EPriorityLess; //standard priority
+
+
+MyDataProvider::MyDataProvider(QObject *parent) :
+HgDataProviderModel(parent),
+mDefaultIcon(new HbIcon(QIcon(QPixmap(":/icons/default.png")))),
+mScheduler(new CActiveSchedulerWait()),
+mWrapper( new ThumbnailManager() ),
+mThumbnailRequestPending(false),
+mThumbnailRequestIndex(-1),
+mThumbnailRequestID(-1),
+mThumbnailsize(ThumbnailManager::ThumbnailMedium),
+mMDSLoadInProgress(false)
+{
+// TX_ENTRY
+ Q_UNUSED(parent);
+ mWrapper->setThumbnailSize( mThumbnailsize );
+ mWrapper->setQualityPreference( ThumbnailManager::OptimizeForPerformance );
+
+ QObject::connect( mWrapper, SIGNAL(thumbnailReady( QPixmap , void* , int, int ) ),
+ this, SLOT( thumbnailReady( QPixmap , void* , int , int )));
+
+ doResetModel(); //will read mds data
+}
+
+MyDataProvider::~MyDataProvider()
+{
+// TX_ENTRY
+ delete mDefaultIcon;
+ delete mWrapper;
+ delete mScheduler;
+// TX_EXIT
+}
+
+void MyDataProvider::changeIconSize(ThumbnailManager::ThumbnailSize aThumbnailsize)
+{
+// TX_ENTRY
+// we could remove all iconsfrom cache and put default ones, but probably that would be waste of time, and it's better just to load new icons with correct sizes.
+ mThumbnailsize = aThumbnailsize;
+ mWrapper->setThumbnailSize( mThumbnailsize );
+// TX_EXIT
+}
+
+void MyDataProvider::doRequestData(QList<int> list, bool silent)
+{
+ TX_ENTRY
+ Q_UNUSED(silent);
+ QString items = "Requested items:";
+ int i = 0;
+ for (int idx=0; idx<list.count(); idx++){
+ i = list[idx];
+ if (containsRole(i, KItemIdRole) && !containsRole(i, Qt::DecorationRole)) {//if there is icon, don't request new one
+ items += QString("%0 ").arg(i);
+ mWaitingThumbnails.append(i);
+ }
+ }
+ TX_LOG_ARGS(items);
+ getNextThumbnail();
+ TX_EXIT
+}
+
+void MyDataProvider::getNextThumbnail()
+{
+// TX_ENTRY
+ if ( !mThumbnailRequestPending && mWaitingThumbnails.count()){
+ int i = mWaitingThumbnails.takeFirst();
+ if (i >=0 && i < count() && containsRole(i, KItemIdRole)) {
+ int id = (data(i, KItemIdRole)).toInt();
+ unsigned long int uId = (unsigned long int)id;
+// TX_LOG_ARGS(QString("getThumbnail for index:%0 uID:%1").arg(i).arg(uId));
+ void *clientData = reinterpret_cast<void *>(i);
+ mThumbnailRequestID = mWrapper->getThumbnail(uId, clientData, KThumbnailsPriority);
+ mThumbnailRequestIndex = i;
+ mThumbnailRequestPending = true;
+ }
+ }
+// TX_EXIT
+}
+
+void MyDataProvider::readMDSData()
+{
+ mMDSLoadInProgress = true;
+}
+
+void MyDataProvider::thumbnailReady( QPixmap pixmap, void* data, int id, int error )
+{
+// TX_ENTRY
+ Q_UNUSED(id);
+ if (!error && pixmap.rect().height()>0 && pixmap.rect().width()>0 ){
+ int idx = reinterpret_cast<int>(data);
+// TX_LOG_ARGS(QString("thumbnailReady idx = %0").arg(idx));
+ updateIcon(idx, createIcon(idx, pixmap));
+ } else {
+ TX_LOG_ARGS(QString("error:%0 id:%0").arg(error).arg(id));
+ }
+ mThumbnailRequestIndex = -1;
+ mThumbnailRequestID = -1;
+ mThumbnailRequestPending = false;
+ getNextThumbnail();
+// TX_EXIT
+}
+
+void MyDataProvider::doReleaseData(QList<int> list, bool silent)
+{
+// TX_ENTRY
+ Q_UNUSED(silent);
+ int i = 0;
+ QString items = "Released items:";
+ for (int idx=0;idx<list.count(); idx++){
+ i = list[idx];
+ if (mThumbnailRequestPending && mThumbnailRequestIndex==i ){
+ TX_LOG_ARGS( QString("Cancel also thumbnail request for item %0").arg(i));
+ mWrapper->cancelRequest(mThumbnailRequestID);
+ mThumbnailRequestIndex = -1;
+ mThumbnailRequestID = -1;
+ mThumbnailRequestPending = false;
+ }
+ items += QString("%0 ").arg(i);
+ mWaitingThumbnails.removeAll(i);
+ releasePixmap(i);
+ }
+ TX_LOG_ARGS(items);
+
+ getNextThumbnail();
+// TX_EXIT
+}
+
+QVariant MyDataProvider::defaultIcon() const
+{
+ return *mDefaultIcon;
+}
+
+void MyDataProvider::HandleSessionOpened(CMdESession& aSession, TInt aError)
+{
+ Q_UNUSED(aSession);
+ Q_UNUSED(aError);
+ mScheduler->AsyncStop();
+}
+
+// ----------------------------------------------------------------------------
+// HandleQueryCompleted
+// ----------------------------------------------------------------------------
+//
+void MyDataProvider::HandleQueryCompleted(CMdEQuery& aQuery, TInt aError)
+{
+ Q_UNUSED(aError);
+ clearCache();
+ mMDSLoadInProgress = false;
+ int size = aQuery.ResultIds().Count();
+
+ for(int i = 0; i < size ; i++){
+ QList< QPair< QVariant, int > > list;
+ unsigned long int id = aQuery.ResultId(i);
+ QVariant v;
+ v.setValue(id);
+ list.append( QPair< QVariant, int >(v, KItemIdRole) );
+ int a = count();
+ int b = -count();
+ int c = a/4 + b/10 + i%30 + i/2;
+ QString s = QString("ITEM%1 %2 %3").arg(c).arg(a).arg(b);
+ if (i%2){
+ s = s.toLower();
+ }
+ list.append( QPair< QVariant, int >(s, Qt::DisplayRole) );
+ list.append( QPair< QVariant, int >(QVariant(a), Qt::UserRole+2) );
+ list.append( QPair< QVariant, int >(QVariant(b), Qt::UserRole+3) );
+ list.append( QPair< QVariant, int >(QVariant(c), Qt::UserRole+4) );
+
+ newItem(&list);
+ }
+
+ TX_LOG_ARGS( QString("size=%1").arg(count()) );
+
+ mScheduler->AsyncStop();
+}
+
+void MyDataProvider::doResetModel()
+{
+
+ if (mThumbnailRequestPending && mThumbnailRequestID!=-1){
+ mWrapper->cancelRequest(mThumbnailRequestID);
+ }
+ mThumbnailRequestIndex = -1;
+ mThumbnailRequestID = -1;
+ mThumbnailRequestPending = false;
+ mWaitingThumbnails.clear();
+
+ //read MDS data once again
+ TRAP_IGNORE(
+ CMdESession* session = CMdESession::NewL( *this );
+ mScheduler->Start();
+
+ CMdENamespaceDef& namespaceDef = session->GetDefaultNamespaceDefL();
+
+ CMdEObjectDef& objectDef = namespaceDef.GetObjectDefL(_L("Image"));
+
+ CMdEObjectQuery* imageQuery = session->NewObjectQueryL( namespaceDef, objectDef, this );
+ CleanupStack::PushL( imageQuery );
+ imageQuery->SetResultMode( EQueryResultModeId );
+ imageQuery->FindL( );
+ mScheduler->Start();
+ CleanupStack::PopAndDestroy( 1 );
+ delete session;
+ );
+
+
+// TX_EXIT
+}
+