[KPhotoAlbum] Improvements to delete
Robert L Krawitz
rlk at alum.mit.edu
Sat Feb 11 20:44:35 GMT 2006
From: "Jesper K. Pedersen" <blackie at blackie.dk>
Date: Sat, 11 Feb 2006 12:25:02 -0500
Thanks for the analysis. For your pleasure and information, I chose
a sligtly different approach to solve the problem than you.
The real problem lay in the fact that we do lookup for all the
images in a list, which gives us complexity O(n^2). I exchanged the
list with a set (see set.h), and that gives us complexity O(n).
As long as the set operations are fast, that's a sensible approach.
On Thursday 09 February 2006 22:16, Robert L Krawitz wrote:
| This speeds up delete dramatically (particularly if you cancel out of
| the delete!)
|
| --- mainview.cpp~ 2006-01-28 23:38:52.000000000 -0500
| +++ mainview.cpp 2006-02-09 22:08:10.000000000 -0500
| @@ -369,19 +369,21 @@
|
| void MainView::slotDeleteSelected()
| {
| + QStringList selectedList = selected();
| if ( ! _deleteDialog )
| _deleteDialog = new DeleteDialog( this );
| - if ( _deleteDialog->exec( selected() ) == QDialog::Accepted )
| + if ( _deleteDialog->exec( selected() ) == QDialog::Accepted &&
| + selectedList.count() > 0) {
| setDirty( true );
|
| - QStringList images = _thumbnailView->imageList();
| - QStringList allImages = ImageDB::instance()->images();
| - QStringList newSet;
| - for( QStringList::Iterator it = images.begin(); it != images.end();
| ++it ) { - if ( allImages.contains( *it ) )
| - newSet.append(*it);
| + QStringList images = _thumbnailView->imageList();
| + QStringList newSet;
| + for( QStringList::Iterator it = images.begin(); it != images.end();
| ++it ) { + if ( ! selectedList.contains( *it ) )
| + newSet.append(*it);
| + }
| + showThumbNails( newSet );
| }
| - showThumbNails( newSet );
| }
|
|
| This gets rid of the silly warning if you try to delete a file that
| doesn't exist (there's no good reason for warning in that case -- if
| the file does already exist and the delete fails, the user certainly
| should be warned!)
|
| --- deletedialog.cpp~ 2006-01-28 23:38:52.000000000 -0500
| +++ deletedialog.cpp 2006-02-09 22:12:44.000000000 -0500
| @@ -65,7 +65,7 @@
| for( QStringList::ConstIterator it = _list.begin(); it !=
| _list.end(); ++it ) { Util::removeThumbNail( *it );
| if ( ImageDB::instance()->info(*it)->imageOnDisk() ) { //
| PENDING(blackie) we don't need imageinfo for this - bool ok
| = QFile( *it ).remove();
| + bool ok = !(QFile( *it ).exists()) || QFile( *it
| ).remove(); if ( !ok ) {
| KMessageBox::error( this, i18n("Unable to delete file
| '%1'.").arg(*it), i18n("Error Deleting Files") );
|
| _______________________________________________
| 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