[KPhotoAlbum] Speeding up thumbnail view even more

Jesper K. Pedersen blackie at blackie.dk
Fri Mar 3 20:06:18 CET 2006


Thanks very much, it has been applied.

Cheers
Jesper.

On Saturday 11 February 2006 21:19, Robert L Krawitz wrote:
| Here's a prototype of a further improvement to the thumbnail code --
| it's less aggressive about flushing the thumbnail cache whenever
| anything changes.  This is surely not the final form something like
| this will take.  It makes redrawing the thumbnail view much faster
| when looking at a new selection.
|
|
|
| Index: mainview.h
| ===================================================================
| --- mainview.h  (revision 508519)
| +++ mainview.h  (working copy)
| @@ -112,7 +112,8 @@
|      void slotConfigureKeyBindings();
|      void slotSetFileName( const QString& );
|      void slotThumbNailSelectionChanged();
| -    void reloadThumbnails();
| +    void reloadThumbnails(bool);
| +    void reloadThumbnailsHard();
|      void slotUpdateViewMenu( Category::ViewSize, Category::ViewType );
|      void slotShowNotOnDisk();
|      void markDirty();
| Index: mainview.cpp
| ===================================================================
| --- mainview.cpp        (revision 508519)
| +++ mainview.cpp        (working copy)
| @@ -282,7 +282,7 @@
|  {
|      if ( ! _optionsDialog ) {
|          _optionsDialog = new OptionsDialog( this );
| -        connect( _optionsDialog, SIGNAL( changed() ), this, SLOT(
| reloadThumbnails() ) ); +        connect( _optionsDialog, SIGNAL( changed()
| ), this, SLOT( reloadThumbnailsHard() ) ); connect( _optionsDialog, SIGNAL(
| changed() ), this, SLOT( startAutoSaveTimer() ) ); }
|      _optionsDialog->show();
| @@ -328,7 +328,7 @@
|      createImageConfig();
|      _imageConfigure->configure( list,  oneAtATime );
|      if ( _imageConfigure->thumbnailShouldReload() )
| -        reloadThumbnails();
| +        reloadThumbnails(true);
|  }
|
|
| @@ -671,7 +671,7 @@
|
|  void MainView::showThumbNails()
|  {
| -    reloadThumbnails();
| +    reloadThumbnails(false);
|      _stack->raiseWidget( _thumbnailView );
|      _thumbnailView->setFocus();
|      updateStates( true );
| @@ -956,12 +956,17 @@
|      _sortByDateAndTime->setEnabled(selection.count() > 1 );
|  }
|
| -void MainView::reloadThumbnails()
| +void MainView::reloadThumbnails(bool hard)
|  {
| -    _thumbnailView->reload();
| +    _thumbnailView->reload(hard);
|      slotThumbNailSelectionChanged();
|  }
|
| +void MainView::reloadThumbnailsHard()
| +{
| +    reloadThumbnails(true);
| +}
| +
|  void MainView::slotUpdateViewMenu( Category::ViewSize size,
| Category::ViewType type ) {
|      if ( size == Category::Small && type == Category::ListView )
| @@ -1177,7 +1182,7 @@
|      for( KURL::List::ConstIterator it = urls.begin(); it != urls.end();
| ++it ) { ImageLoader::removeThumbnail( (*it).path() );
|      }
| -    reloadThumbnails();
| +    reloadThumbnails(true);
|  }
|
|  ImageSearchInfo MainView::currentContext()
| @@ -1255,14 +1260,14 @@
|  {
|      ImageDB::instance()->setDateRange( range,
| _dateBar->includeFuzzyCounts() ); _browser->reload();
| -    reloadThumbnails();
| +    reloadThumbnails(false);
|  }
|
|  void MainView::clearDateRange()
|  {
|      ImageDB::instance()->clearDateRange();
|      _browser->reload();
| -    reloadThumbnails();
| +    reloadThumbnails(false);
|  }
|
|  void MainView::runSurvey()
| Index: ThumbnailView/ThumbnailView.cpp
| ===================================================================
| --- ThumbnailView/ThumbnailView.cpp     (revision 508519)
| +++ ThumbnailView/ThumbnailView.cpp     (working copy)
| @@ -270,6 +270,12 @@
|      updateCell( fileName );
|  }
|
| +void ThumbnailView::ThumbnailView::uncacheThumbnails( const QStringList&
| thumbnails ) +{
| +    for( QStringList::ConstIterator imageIt = thumbnails.begin(); imageIt
| != thumbnails.end(); ++imageIt ) +        pixmapCache().remove( *imageIt );
| +}
| +
|  /**
|   * Request a repaint of the cell showing filename
|   *
| @@ -734,9 +740,10 @@
|      repaintScreen();
|  }
|
| -void ThumbnailView::ThumbnailView::reload()
| +void ThumbnailView::ThumbnailView::reload(bool hard)
|  {
| -    pixmapCache().clear();
| +    if (hard)
| +        pixmapCache().clear();
|      _selectedFiles.clear();
|      updateCellSize();
|      repaintScreen();
| Index: ThumbnailView/ThumbnailView.h
| ===================================================================
| --- ThumbnailView/ThumbnailView.h       (revision 508519)
| +++ ThumbnailView/ThumbnailView.h       (working copy)
| @@ -37,12 +37,13 @@
|
|      enum Order { ViewOrder, SortedOrder };
|      QStringList imageList( Order ) const;
| -    void reload();
| +    void reload(bool hard=true);
|      QString fileNameUnderCursor() const;
|      QString currentItem() const;
|      static ThumbnailView* theThumbnailView();
|      void setCurrentItem( const QString& fileName );
|      void setSortDirection( SortDirection );
| +    void uncacheThumbnails(const QStringList &list);
|
|
|  public slots:
|
| _______________________________________________
| KPhotoAlbum mailing list
| KPhotoAlbum at mail.kdab.net
| http://mail.kdab.net/mailman/listinfo/kphotoalbum

-- 
Jesper K. Pedersen          |  Klarälvdalens Datakonsult
Senior Software Engineer    |  www.klaralvdalens-datakonsult.se
Prinsensgade 4a st.         |
9800 Hjørring               |  Platform-independent
Denmark                     |  software solutions



More information about the KPhotoAlbum mailing list