From a1db833943f1c77fc8db4afb02a2bc758586dbf2 Mon Sep 17 00:00:00 2001
From: Stefan Bienert <stefan.bienert@unibas.ch>
Date: Wed, 22 Jun 2011 17:08:59 +0200
Subject: [PATCH] Doing commit 0ab389cb4aeaa0be38649c94961c6fe7820c443a the
 proper way: Instead of commenting out SelectionChanged, fixed the culprid in
 SequenceViewer::SelectionChanged (SequenceViewer::SelectList, using
 QItemSelection now)

---
 modules/gfx/src/entity.cc                     |  6 +----
 .../src/sequence_viewer/sequence_viewer.cc    | 24 +++++++++++++++++--
 2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/modules/gfx/src/entity.cc b/modules/gfx/src/entity.cc
index 1c2927359..959c0312c 100644
--- a/modules/gfx/src/entity.cc
+++ b/modules/gfx/src/entity.cc
@@ -768,11 +768,7 @@ void Entity::SetSelection(const mol::EntityView& view)
   }
   this->UpdateSelection();
   this->FlagRebuild();
-  // SB: The following function was found do to nothing.
-  // It just makes selecting entities in dng window slow.
-  // If at some point, selecting requires a certain action to be carried out on
-  // each observer, comment in again.
-  //Scene::Instance().SelectionChanged(GetName(), view);
+  Scene::Instance().SelectionChanged(GetName(), view);
   Scene::Instance().RequestRedraw();
 }
 
diff --git a/modules/gui/src/sequence_viewer/sequence_viewer.cc b/modules/gui/src/sequence_viewer/sequence_viewer.cc
index f1a7c5675..024355c1b 100644
--- a/modules/gui/src/sequence_viewer/sequence_viewer.cc
+++ b/modules/gui/src/sequence_viewer/sequence_viewer.cc
@@ -387,8 +387,28 @@ void SequenceViewer::SelectList(const QModelIndexList& list)
       rows_visited.insert(row);
     }
   }
-  for(int i = 0; i<list.size(); i++){
-    model->select(list[i],QItemSelectionModel::Select);
+  if (list.size() > 0) {
+    int last_row = 0;
+    int last_col = 0;
+    QModelIndex topleft_idx;
+    QItemSelection *selection = new QItemSelection();
+    int i = 1;
+    topleft_idx = list[0];
+    last_row = list[0].row();
+    last_col = list[0].column();
+    for (i = 1; i < list.size(); i++) {
+      // store block on discontinued row or unequal column
+      if (((last_col + 1) != list[i].column()) || (last_row != list[i].row())) {
+        selection->select(topleft_idx, list[i-1]);
+        model->select(*selection, QItemSelectionModel::Select);
+        topleft_idx = list[i];
+      }
+      last_row = list[i].row();
+      last_col = list[i].column();
+    }
+    // store last block
+    selection->select(topleft_idx, list[i-1]);
+    model->select(*selection, QItemSelectionModel::Select);
   }
 }
 
-- 
GitLab