ganeswidgets/tsrc/fute/HgWidgetTest/src/hgwidgettestdatamodel.cpp
changeset 2 49c70dcc3f17
parent 1 e48454f237ca
child 5 4fa04caf0f43
--- a/ganeswidgets/tsrc/fute/HgWidgetTest/src/hgwidgettestdatamodel.cpp	Mon May 03 13:32:54 2010 +0300
+++ b/ganeswidgets/tsrc/fute/HgWidgetTest/src/hgwidgettestdatamodel.cpp	Fri May 14 16:57:01 2010 +0300
@@ -55,13 +55,14 @@
     : QAbstractListModel(parent),
       mCachingInProgress(false),
       mImageType(ImageTypeNone),
-      mDefaultIcon((":/images/default.svg")),
+//      mDefaultIcon((":/images/default.svg")),
       mUseLowResImages(false),
       mWrapper( new ThumbnailManager() ),
       mThumbnailRequestPending(false),
       mThumbnailRequestIndex(-1),
       mThumbnailRequestID(-1),
-      mBufferManager(0)
+      mBufferManager(0),
+      mSilentDataFetch(false)
 {
     FUNC_LOG;
     mWrapper->setQualityPreference( ThumbnailManager::OptimizeForPerformance );
@@ -91,6 +92,31 @@
     mWrapper->setThumbnailSize(size);
 }
 
+void HgWidgetTestDataModel::timeOut()
+{
+    for (int i = 0; i < mFileInfoList.size(); ++i){
+        QFileInfo fileInfo = mFileInfoList.at(i);
+        if (fileInfo.isFile()){
+            QString s = fileInfo.filePath();
+            if (s.indexOf(QString(".jpg"),0,Qt::CaseInsensitive)>0){
+                mFiles.append(s);
+                mImages.append(QImage());
+                mVisibility.append(true);
+            }
+        }
+    }
+
+    if (mBufferManager) {
+        mBufferManager->resetBuffer(0,mFiles.count());
+    }            
+    
+    if (mFiles.count()>0) {
+        // photo's behaves this way so for testing purposes lets follow their practice.
+        beginInsertRows(QModelIndex(), 0, mFiles.count()-1);
+        endInsertRows();
+    }
+}
+
 void HgWidgetTestDataModel::init()
 {
     FUNC_LOG;
@@ -104,26 +130,17 @@
     dir.setPath(QString("f:/data/images"));
 #endif
 
-    QFileInfoList list = dir.entryInfoList();
-    for (int i = 0; i < list.size(); ++i){
-        QFileInfo fileInfo = list.at(i);
-        if (fileInfo.isFile()){
-            QString s = fileInfo.filePath();
-            if (s.indexOf(QString(".jpg"),0,Qt::CaseInsensitive)>0){
-                mFiles.append(s);
-                mImages.append(QImage());
-                mVisibility.append(true);
-            }
-        }
-    }
-
+    mFileInfoList = dir.entryInfoList();
     QPixmap pixmap(":/images/default.svg");
+    mDefaultPixmap = pixmap;
     if (!pixmap.isNull()){
         mQIcon = QIcon(pixmap);
         if (!mQIcon.isNull()){
             mHbIcon = HbIcon(mQIcon);
         }
     }
+    
+    QTimer::singleShot(0, this, SLOT(timeOut()));
 }
 
 /*!
@@ -141,6 +158,15 @@
     return mFiles.count();
 }
 
+
+QVariant HgWidgetTestDataModel::silentData(const QModelIndex &index, int role)
+{
+    mSilentDataFetch = true;
+    QVariant variant = data(index,role);
+    mSilentDataFetch = false;
+    return variant;
+}
+
 /*!
  Returns the data stored for the item referred to by the \a index.
 
@@ -159,7 +185,7 @@
         return returnValue;
     }
 
-    if( mBufferManager )
+    if( mBufferManager && !mSilentDataFetch)
         mBufferManager->setPosition( row );
 
     switch ( role )
@@ -182,45 +208,76 @@
             }
         case Qt::DecorationRole:
             {
-            // INFO("Requesting model item" << row << ", " << mFiles.at(row));
-            if (mFiles.at(row).isEmpty()) {
-                returnValue = mDefaultIcon;
-            }
-            else {
-                QImage icon = mImages.at(row);
-                if ( !icon.isNull() )
+                if (mFiles.at(row).isEmpty())
+                {
+                    
+                    switch (mImageType)
                     {
-                    if (mUseLowResImages) {
-                        QSize size = icon.size();
-                        icon = icon.scaled(QSize(size.width()/4, size.height()/4));
+                    case ImageTypeHbIcon:
+                        returnValue = mHbIcon;
+                        break;
+                    case ImageTypeQImage:
+                        returnValue = mDefaultIcon;
+                        break;
+                    case ImageTypeQIcon:
+                        returnValue = mQIcon;
+                        break;
+                    case ImageTypeQPixmap:
+                        returnValue = mDefaultPixmap;
+                        break;
                     }
-
-                    switch(mImageType)
+                
+                }
+                else
+                {
+                    switch (mImageType)
+                    {
+                    case ImageTypeQImage:
+                    {
+                        QImage image = mImages.at(row);
+                        if (image.isNull())
                         {
-                        case ImageTypeHbIcon:
+                            returnValue = mDefaultIcon;
+                        }
+                        else
+                        {
+                            if (mUseLowResImages)
                             {
-                            returnValue = mHbIcon;
-                            break;
+                                QSize size = image.size();
+                                image = image.scaled(QSize(size.width()/4, size.height()/4));
+                                returnValue = image;
                             }
-                        case ImageTypeQImage:
+                            else
                             {
-                            returnValue = icon;
-                            break;
-                            }
-                        case ImageTypeQIcon:
-                            {
-                            returnValue = mQIcon;
-                            break;
+                                returnValue = image;
                             }
-                        default:
-                            break;
                         }
-
                     }
-                else
+                    break;
+                    case ImageTypeQPixmap:
                     {
-                    returnValue = mDefaultIcon;
+                        QPixmap pixmap = mPixmaps.at(row);
+                        if (pixmap.isNull())
+                        {
+                            returnValue = mDefaultPixmap;
+                        }
+                        else
+                        {
+                            returnValue = pixmap;
+                        }
                     }
+                    break;
+                    case ImageTypeHbIcon:
+                    {
+                        returnValue = mHbIcon;
+                    }
+                    break;
+                    case ImageTypeQIcon:
+                    {
+                        returnValue = mQIcon;
+                    }
+                    break;
+                    }                    
                 }
             break;
             }
@@ -362,8 +419,13 @@
 void HgWidgetTestDataModel::reset()
 {
     emit beginResetModel();
-    mImages.removeAt(0);
     mFiles.removeAt(0);
+    if (mImageType == ImageTypeQPixmap)
+    {
+        mPixmaps.removeAt(0);
+    }
+    else
+        mImages.removeAt(0);
     emit endResetModel();
 }
 
@@ -447,8 +509,19 @@
     delete mBufferManager;
     mBufferManager = 0;
     mBufferManager = new BufferManager(this, buffer, treshhold, 0, mFiles.count());
-    for (int i = 0; i<mImages.count();i++) {
-        mImages.replace(i, QImage());
+    if (mImageType == ImageTypeQPixmap)
+    {
+        for (int i = 0; i<mPixmaps.count();i++) {
+            mPixmaps.replace(i, QPixmap());
+        }        
+
+    }
+    else
+    {
+        for (int i = 0; i<mImages.count();i++) {
+            mImages.replace(i, QImage());
+        }
+
     }
 }
 
@@ -470,7 +543,14 @@
             mWrapper->cancelRequest(mThumbnailRequestID);
             requestNew = true;
         }
-        mImages.replace(i,QImage());
+        if (mImageType == ImageTypeQPixmap)
+        {
+            mPixmaps.replace(i, QPixmap());
+        }
+        else
+        {
+            mImages.replace(i,QImage());
+        }
     }
 
     if (requestNew){
@@ -509,7 +589,13 @@
 {
     if (!error && !pixmap.isNull() ){
 //        int idx = reinterpret_cast<int>(data);
-        mImages.replace(mThumbnailRequestIndex,pixmap.toImage().convertToFormat(QImage::Format_RGB16));
+        if (mImageType == ImageTypeQPixmap)
+        {
+            mPixmaps.replace(mThumbnailRequestIndex, pixmap);
+        }
+        else {
+            mImages.replace(mThumbnailRequestIndex,pixmap.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied));//.convertToFormat(QImage::Format_RGB16));            
+        }
         QModelIndex modelIndex = QAbstractItemModel::createIndex(mThumbnailRequestIndex, 0);
         emit dataChanged(modelIndex, modelIndex);
     }