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