[QGIS Commit] r9596 - in branches/advanced_printing_branch2/src: app/composer ui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sat Nov 8 12:05:48 EST 2008


Author: mhugent
Date: 2008-11-08 12:05:48 -0500 (Sat, 08 Nov 2008)
New Revision: 9596

Modified:
   branches/advanced_printing_branch2/src/app/composer/qgscomposerpicturewidget.cpp
   branches/advanced_printing_branch2/src/ui/qgscomposerpicturewidgetbase.ui
Log:
Improved handling of large image files for composer picture preview

Modified: branches/advanced_printing_branch2/src/app/composer/qgscomposerpicturewidget.cpp
===================================================================
--- branches/advanced_printing_branch2/src/app/composer/qgscomposerpicturewidget.cpp	2008-11-08 15:07:53 UTC (rev 9595)
+++ branches/advanced_printing_branch2/src/app/composer/qgscomposerpicturewidget.cpp	2008-11-08 17:05:48 UTC (rev 9596)
@@ -24,6 +24,8 @@
 #include <QFileInfo>
 #include <QImageReader>
 #include <QMessageBox>
+#include <QPainter>
+#include <QProgressDialog>
 #include <QSvgRenderer>
 
 QgsComposerPictureWidget::QgsComposerPictureWidget( QgsComposerPicture* picture ): QWidget(), mPicture( picture )
@@ -39,6 +41,8 @@
 
   setGuiElementValues();
 
+  mPreviewListWidget->setIconSize(QSize(30, 30));
+
   //add preview icons
   addStandardDirectoriesToPreview();
 
@@ -228,22 +232,55 @@
 
   QFileInfoList fileList = directory.entryInfoList(QDir::Files);
   QFileInfoList::const_iterator fileIt = fileList.constBegin();
+
+  QProgressDialog progress("Adding Icons...", "Abort", 0, fileList.size() - 1, this);
+  progress.setWindowModality(Qt::WindowModal);
+
+  progress.show();
+
+  int counter = 0;
   for(; fileIt != fileList.constEnd(); ++fileIt)
   {
+    progress.setLabelText(tr("Creating icon for file ") + fileIt->fileName());
+    QCoreApplication::processEvents(); //for abort button
+    if(progress.wasCanceled())
+    {
+      break;
+    }
+    progress.setValue(counter);
     QString filePath = fileIt->absoluteFilePath();
 
     //exclude non-picture files
     if(!testPictureFile(filePath))
     {
-      return 2;
+      ++counter;
+      continue;
     }
 
-    QIcon icon(filePath);
     QListWidgetItem * listItem = new QListWidgetItem(mPreviewListWidget);
-    listItem->setIcon( icon );
+
+    if(filePath.endsWith(".svg")) //for svg files: create the icon directly
+    {
+      QIcon icon(filePath);
+      listItem->setIcon(icon);
+    }
+    else //for pixel formats: create icon from scaled pixmap
+    {
+      QPixmap iconPixmap(filePath);
+      if(iconPixmap.isNull())
+      {
+        continue; //unknown file format or other problem
+      }
+      //set pixmap hardcoded to 30/30, same as icon size for mPreviewListWidget
+      QPixmap scaledPixmap(iconPixmap.scaled(QSize(30, 30), Qt::KeepAspectRatio));
+      QIcon icon(scaledPixmap);
+      listItem->setIcon(icon);
+    }
+
     listItem->setText( "" );
-    //store the absolute icon file as user data
+    //store the absolute icon file path as user data
     listItem->setData( Qt::UserRole, fileIt->absoluteFilePath());
+    ++counter;
   }
 
   return 0;

Modified: branches/advanced_printing_branch2/src/ui/qgscomposerpicturewidgetbase.ui
===================================================================
--- branches/advanced_printing_branch2/src/ui/qgscomposerpicturewidgetbase.ui	2008-11-08 15:07:53 UTC (rev 9595)
+++ branches/advanced_printing_branch2/src/ui/qgscomposerpicturewidgetbase.ui	2008-11-08 17:05:48 UTC (rev 9596)
@@ -94,6 +94,18 @@
         <property name="isWrapping" stdset="0" >
          <bool>true</bool>
         </property>
+        <property name="gridSize" >
+         <size>
+          <width>30</width>
+          <height>30</height>
+         </size>
+        </property>
+        <property name="viewMode" >
+         <enum>QListView::IconMode</enum>
+        </property>
+        <property name="wordWrap" >
+         <bool>true</bool>
+        </property>
        </widget>
       </item>
      </layout>



More information about the QGIS-commit mailing list