From ff73f566925f8d0c4d81e3878dd412acabc70c79 Mon Sep 17 00:00:00 2001
From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Tue, 11 May 2010 15:57:40 +0000
Subject: [PATCH] New SequenceViewer, improved copy behavior

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2244 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/gui/src/sequence/sequence_viewer.cc | 33 ++++++++++++++++-----
 1 file changed, 25 insertions(+), 8 deletions(-)

diff --git a/modules/gui/src/sequence/sequence_viewer.cc b/modules/gui/src/sequence/sequence_viewer.cc
index 4164bbeec..b4e4a8cc3 100644
--- a/modules/gui/src/sequence/sequence_viewer.cc
+++ b/modules/gui/src/sequence/sequence_viewer.cc
@@ -186,18 +186,35 @@ void SequenceViewerV2::MouseWheelEvent(QWheelEvent* event)
 
 void SequenceViewerV2::CopyEvent(QKeyEvent* event)
 {
-  const QModelIndexList& list = seq_table_view_->selectionModel()->selectedIndexes();
+  QItemSelectionModel* model = seq_table_view_->selectionModel();
+  const QModelIndexList& list = model->selectedIndexes();
   if(list.size()>0){
     QString clipboard_string;
-
-    QVarLengthArray<QString> clipboard_array(model_->rowCount());
+    QSet<int> rows;
+    int min_col=0;
+    int max_col=0;
     for(int i = 0; i < list.size(); i++){
-      const QModelIndex& index = list[i];
-      clipboard_array[index.row()].append(model_->data(index,Qt::DisplayRole).toString());
+      if(list[i].column()>max_col){
+        max_col = list[i].column();
+      }
+      if(list[i].column()<min_col){
+        min_col = list[i].column();
+      }
+      rows.insert(list[i].row());
     }
-    for(int i = 0; i < clipboard_array.size(); i++){
-      if(clipboard_array[i].size()>0){
-        clipboard_string.append(clipboard_array[i]+"\n");
+
+    for(int i = 0; i < model_->rowCount(); i++){
+      if(rows.contains(i)){
+        for(int j=min_col; j<=max_col; j++){
+          const QModelIndex& index = model_->index(i,j);
+          if(model->isSelected(index)){
+            clipboard_string.append(model_->data(index,Qt::DisplayRole).toString());
+          }
+          else{
+            clipboard_string.append('-');
+          }
+        }
+        clipboard_string.append("\n");
       }
     }
     QApplication::clipboard()->setText(clipboard_string);
-- 
GitLab