hgcacheproxymodel/tsrc/fute/HgCacheProxyModelTestApp/src/mydataprovider.cpp
changeset 1 e48454f237ca
child 2 49c70dcc3f17
equal deleted inserted replaced
0:89c329efa980 1:e48454f237ca
       
     1 /*
       
     2 * Copyright (c) 2009 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:
       
    15 *
       
    16 *  Version     : %version: 1 %
       
    17 */
       
    18 #include <QList>
       
    19 #include "hglogger.h"
       
    20 #include <hbicon.h>
       
    21 #include "mydataprovider.h"
       
    22 
       
    23 //#include "x:\sf\mw\qt\src\openvg\qpixmapdata_vg_p.h"
       
    24 //typedef VGImage (*pfnVgCreateEGLImageTargetKHR)(VGeglImageKHR);
       
    25 
       
    26 const int KItemIdRole = Qt::UserRole+1;
       
    27 
       
    28 const int KThumbnailsPriority = EPriorityLess; //standard priority
       
    29 
       
    30 
       
    31 MyDataProvider::MyDataProvider(QObject *parent) :
       
    32 HgDataProviderModel(parent),
       
    33 mDefaultIcon(new HbIcon(QIcon(QPixmap(":/icons/default.png")))),
       
    34 mScheduler(new CActiveSchedulerWait()),
       
    35 mWrapper( new ThumbnailManager() ),
       
    36 mThumbnailRequestPending(false),
       
    37 mThumbnailRequestIndex(-1),
       
    38 mThumbnailRequestID(-1),
       
    39 mThumbnailsize(ThumbnailManager::ThumbnailMedium),
       
    40 mMDSLoadInProgress(false)
       
    41 {
       
    42 //    TX_ENTRY
       
    43     Q_UNUSED(parent);
       
    44     mWrapper->setThumbnailSize( mThumbnailsize );
       
    45     mWrapper->setQualityPreference( ThumbnailManager::OptimizeForPerformance );
       
    46 
       
    47     QObject::connect( mWrapper, SIGNAL(thumbnailReady( QPixmap , void* , int, int ) ),
       
    48                       this, SLOT( thumbnailReady( QPixmap , void* , int , int )));
       
    49     
       
    50     doResetModel(); //will read mds data
       
    51 }
       
    52 
       
    53 MyDataProvider::~MyDataProvider()
       
    54 {
       
    55 //    TX_ENTRY
       
    56     delete mDefaultIcon;
       
    57     delete mWrapper;
       
    58     delete mScheduler;
       
    59 //    TX_EXIT
       
    60 }
       
    61 
       
    62 void MyDataProvider::changeIconSize(ThumbnailManager::ThumbnailSize aThumbnailsize)
       
    63 {
       
    64 //    TX_ENTRY
       
    65 //	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.
       
    66 	mThumbnailsize = aThumbnailsize;
       
    67 	mWrapper->setThumbnailSize( mThumbnailsize );
       
    68 //    TX_EXIT
       
    69 }
       
    70 
       
    71 void MyDataProvider::doRequestData(QList<int> list, bool silent)
       
    72 {
       
    73     TX_ENTRY
       
    74 	Q_UNUSED(silent);
       
    75     QString items = "Requested items:";
       
    76     int i = 0;
       
    77 	for (int idx=0; idx<list.count(); idx++){
       
    78         i = list[idx];
       
    79 		if (containsRole(i, KItemIdRole) && !containsRole(i, Qt::DecorationRole)) {//if there is icon, don't request new one
       
    80             items += QString("%0 ").arg(i);
       
    81 			mWaitingThumbnails.append(i);
       
    82 		}
       
    83 	}
       
    84 	TX_LOG_ARGS(items);
       
    85     getNextThumbnail();
       
    86     TX_EXIT
       
    87 }
       
    88 
       
    89 void MyDataProvider::getNextThumbnail()
       
    90 {
       
    91 //    TX_ENTRY
       
    92     if ( !mThumbnailRequestPending && mWaitingThumbnails.count()){
       
    93             int i = mWaitingThumbnails.takeFirst();
       
    94             if (i >=0 && i < count() && containsRole(i, KItemIdRole)) {
       
    95                 int id = (data(i, KItemIdRole)).toInt();
       
    96                 unsigned long int uId = (unsigned long int)id;
       
    97 //                TX_LOG_ARGS(QString("getThumbnail for index:%0 uID:%1").arg(i).arg(uId));
       
    98                 void *clientData = reinterpret_cast<void *>(i);
       
    99                 mThumbnailRequestID = mWrapper->getThumbnail(uId, clientData, KThumbnailsPriority);
       
   100                 mThumbnailRequestIndex = i;
       
   101                 mThumbnailRequestPending = true;            
       
   102         }
       
   103     }
       
   104 //    TX_EXIT    
       
   105 }
       
   106 
       
   107 void MyDataProvider::readMDSData()
       
   108 {
       
   109     mMDSLoadInProgress = true;
       
   110 }
       
   111 
       
   112 void MyDataProvider::thumbnailReady( QPixmap pixmap, void* data, int id, int error )
       
   113 {
       
   114 //    TX_ENTRY    
       
   115     Q_UNUSED(id);
       
   116     if (!error && pixmap.rect().height()>0  && pixmap.rect().width()>0 ){
       
   117         int idx = reinterpret_cast<int>(data);
       
   118 //        TX_LOG_ARGS(QString("thumbnailReady idx = %0").arg(idx));
       
   119         updateIcon(idx, createIcon(idx, pixmap));
       
   120 	} else {
       
   121         TX_LOG_ARGS(QString("error:%0 id:%0").arg(error).arg(id));
       
   122 	}
       
   123     mThumbnailRequestIndex = -1;
       
   124     mThumbnailRequestID = -1;
       
   125     mThumbnailRequestPending = false;            
       
   126     getNextThumbnail();
       
   127 //    TX_EXIT
       
   128 }
       
   129 
       
   130 void MyDataProvider::doReleaseData(QList<int> list, bool silent)
       
   131 {
       
   132 //    TX_ENTRY    
       
   133     Q_UNUSED(silent);
       
   134     int i = 0;
       
   135     QString items = "Released items:";
       
   136     for (int idx=0;idx<list.count(); idx++){
       
   137         i = list[idx];
       
   138         if (mThumbnailRequestPending && mThumbnailRequestIndex==i ){
       
   139             TX_LOG_ARGS( QString("Cancel also thumbnail request for item %0").arg(i));
       
   140             mWrapper->cancelRequest(mThumbnailRequestID);
       
   141             mThumbnailRequestIndex = -1;
       
   142             mThumbnailRequestID = -1;
       
   143             mThumbnailRequestPending = false;
       
   144         }
       
   145         items += QString("%0 ").arg(i);
       
   146         mWaitingThumbnails.removeAll(i);
       
   147         releasePixmap(i);
       
   148     }
       
   149     TX_LOG_ARGS(items);
       
   150 
       
   151     getNextThumbnail();
       
   152 //    TX_EXIT        
       
   153 }
       
   154 
       
   155 QVariant MyDataProvider::defaultIcon() const
       
   156 {
       
   157     return *mDefaultIcon;
       
   158 }
       
   159 
       
   160 void MyDataProvider::HandleSessionOpened(CMdESession& aSession, TInt aError)
       
   161 {
       
   162     Q_UNUSED(aSession);
       
   163     Q_UNUSED(aError);	
       
   164     mScheduler->AsyncStop();
       
   165 }
       
   166 
       
   167 // ----------------------------------------------------------------------------
       
   168 // HandleQueryCompleted
       
   169 // ----------------------------------------------------------------------------
       
   170 //
       
   171 void MyDataProvider::HandleQueryCompleted(CMdEQuery& aQuery, TInt aError)
       
   172 {
       
   173     Q_UNUSED(aError);	
       
   174     clearCache();
       
   175     mMDSLoadInProgress = false;
       
   176     int size = aQuery.ResultIds().Count();
       
   177     
       
   178     for(int i = 0; i < size ; i++){
       
   179         QList< QPair< QVariant, int > > list;
       
   180         unsigned long int id = aQuery.ResultId(i);
       
   181         QVariant v;
       
   182         v.setValue(id);
       
   183         list.append( QPair< QVariant, int >(v, KItemIdRole) );
       
   184         int a = count();
       
   185         int b = -count();
       
   186 		int c = a/4 + b/10 + i%30 + i/2;
       
   187 		QString s = QString("ITEM%1 %2 %3").arg(c).arg(a).arg(b);
       
   188 		if (i%2){
       
   189             s = s.toLower();
       
   190 		}
       
   191         list.append( QPair< QVariant, int >(s, Qt::DisplayRole) );
       
   192         list.append( QPair< QVariant, int >(QVariant(a), Qt::UserRole+2) );
       
   193         list.append( QPair< QVariant, int >(QVariant(b), Qt::UserRole+3) );
       
   194         list.append( QPair< QVariant, int >(QVariant(c), Qt::UserRole+4) );
       
   195         
       
   196         newItem(&list);
       
   197     }
       
   198     
       
   199     TX_LOG_ARGS( QString("size=%1").arg(count()) );
       
   200     
       
   201     mScheduler->AsyncStop();
       
   202 }
       
   203 
       
   204 void MyDataProvider::doResetModel()
       
   205 {
       
   206 
       
   207     if (mThumbnailRequestPending && mThumbnailRequestID!=-1){
       
   208         mWrapper->cancelRequest(mThumbnailRequestID);
       
   209     }
       
   210     mThumbnailRequestIndex = -1;
       
   211     mThumbnailRequestID = -1;
       
   212     mThumbnailRequestPending = false;
       
   213     mWaitingThumbnails.clear();
       
   214     
       
   215     //read MDS data once again
       
   216     TRAP_IGNORE(
       
   217         CMdESession* session = CMdESession::NewL( *this ); 
       
   218         mScheduler->Start();
       
   219         
       
   220         CMdENamespaceDef& namespaceDef = session->GetDefaultNamespaceDefL();
       
   221                 
       
   222         CMdEObjectDef& objectDef = namespaceDef.GetObjectDefL(_L("Image"));
       
   223     
       
   224         CMdEObjectQuery* imageQuery = session->NewObjectQueryL( namespaceDef, objectDef, this );
       
   225         CleanupStack::PushL( imageQuery );
       
   226         imageQuery->SetResultMode( EQueryResultModeId );
       
   227         imageQuery->FindL( );
       
   228         mScheduler->Start();
       
   229         CleanupStack::PopAndDestroy( 1 );
       
   230         delete session;        
       
   231     );    
       
   232     
       
   233     
       
   234 //    TX_EXIT    
       
   235 }
       
   236