Speeding up annotation

Robert Krawitz <rlk-FrUbXkNCsVf2fBVCVOL8/[email protected]> Sun, 5 Jan 2020 14:23:50 -0500 (EST)
Newsgroups gmane.comp.kde.kimdaba
Message-ID <20200105192350.4C990423A75@localhost>
I found one easy fix in the selection code after the annotations are
changed.  It's still very slow and may be worse than linear, but at
least one real problem is cleaned up.

Given where we are in the release cycle, I want more review before
pushing it.

-- 
Robert Krawitz                                     <rlk-FrUbXkNCsVf2fBVCVOL8/[email protected]>

***  MIT Engineers   A Proud Tradition   http://mitathletics.com  ***
Member of the League for Programming Freedom  --  http://ProgFree.org
Project lead for Gutenprint   --    http://gimp-print.sourceforge.net

"Linux doesn't dictate how I work, I dictate how Linux works."
--Eric Crampton

_______________________________________________
KPhotoAlbum mailing list
[email protected]
https://mail.kdab.com/mailman/listinfo/kphotoalbum
patch-annotation-selection.patch (application/octet-stream, 1.5 KB)
diff --git a/ThumbnailView/ThumbnailWidget.cpp b/ThumbnailView/ThumbnailWidget.cpp
index 470d4da8..6ad0a696 100644
--- a/ThumbnailView/ThumbnailWidget.cpp
+++ b/ThumbnailView/ThumbnailWidget.cpp
@@ -34,6 +34,8 @@
 #include <KLocalizedString>
 #include <QScrollBar>
 #include <QTimer>
+#include <QItemSelection>
+#include <QItemSelectionRange>
 #include <math.h>
 #include <qcursor.h>
 #include <qfontmetrics.h>
@@ -410,8 +412,28 @@ void ThumbnailView::ThumbnailWidget::changeSingleSelection(const DB::FileName &f
 
 void ThumbnailView::ThumbnailWidget::select(const DB::FileNameList &items)
 {
-    Q_FOREACH (const DB::FileName &fileName, items)
-        selectionModel()->select(model()->fileNameToIndex(fileName), QItemSelectionModel::Select);
+    QItemSelection selection;
+    QModelIndex start;
+    QModelIndex end;
+    int count = 0;
+    Q_FOREACH (const DB::FileName &fileName, items) {
+        QModelIndex index = model()->fileNameToIndex(fileName);
+        if (count == 0) {
+            start = index;
+            end = index;
+        } else if (index.row() == end.row() + 1) {
+            end = index;
+        } else {
+            selection.merge(QItemSelection(start, end), QItemSelectionModel::Select);
+            start = index;
+            end = index;
+        }
+        count++;
+    }
+    if (count > 0) {
+        selection.merge(QItemSelection(start, end), QItemSelectionModel::Select);
+    }
+    selectionModel()->select(selection, QItemSelectionModel::Select);
 }
 
 bool ThumbnailView::ThumbnailWidget::isItemUnderCursorSelected() const