From 6b916af8238b81ab7b2a83735819a7e745ccc445 Mon Sep 17 00:00:00 2001
From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Wed, 2 Jun 2010 11:51:58 +0000
Subject: [PATCH] New SequenceViewer, export fixes, GetDisplayModes
 reimplemented

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2316 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/gui/pymod/export_sequence_viewerV2.cc | 34 ++++++++-----------
 modules/gui/src/sequence/sequence_model.cc    | 22 ++++++++----
 2 files changed, 31 insertions(+), 25 deletions(-)

diff --git a/modules/gui/pymod/export_sequence_viewerV2.cc b/modules/gui/pymod/export_sequence_viewerV2.cc
index 67eebd8ee..f53d957c7 100644
--- a/modules/gui/pymod/export_sequence_viewerV2.cc
+++ b/modules/gui/pymod/export_sequence_viewerV2.cc
@@ -46,47 +46,47 @@ void change_display_mode_c(SequenceViewerV2* seq_viewer, const seq::AlignmentHan
   seq_viewer->ChangeDisplayMode(alignment, mode);
 }
 
-void get_current_display_mode_a(SequenceViewerV2* seq_viewer)
+String get_current_display_mode_a(SequenceViewerV2* seq_viewer)
 {
-  seq_viewer->GetCurrentDisplayMode();
+  return seq_viewer->GetCurrentDisplayMode().toStdString();
 }
 
-void get_current_display_mode_b(SequenceViewerV2* seq_viewer, const gfx::EntityP& entity)
+String get_current_display_mode_b(SequenceViewerV2* seq_viewer, const gfx::EntityP& entity)
 {
-  seq_viewer->GetCurrentDisplayMode(entity);
+  return seq_viewer->GetCurrentDisplayMode(entity).toStdString();
 }
 
-void get_current_display_mode_c(SequenceViewerV2* seq_viewer, const seq::AlignmentHandle& alignment)
+String get_current_display_mode_c(SequenceViewerV2* seq_viewer, const seq::AlignmentHandle& alignment)
 {
-  seq_viewer->GetCurrentDisplayMode(alignment);
+  return seq_viewer->GetCurrentDisplayMode(alignment).toStdString();
 }
 
-std::vector<QString> get_display_modes_a(SequenceViewerV2* seq_viewer)
+std::vector<String> get_display_modes_a(SequenceViewerV2* seq_viewer)
 {
-  std::vector<QString> modes;
+  std::vector<String> modes;
   const QStringList& list = seq_viewer->GetDisplayModes();
   for (int i=0; i<list.size(); i++){
-    modes.push_back(list.at(i));
+    modes.push_back(list.at(i).toStdString());
   }
   return modes;
 }
 
-std::vector<QString> get_display_modes_b(SequenceViewerV2* seq_viewer, const gfx::EntityP& entity)
+std::vector<String> get_display_modes_b(SequenceViewerV2* seq_viewer, const gfx::EntityP& entity)
 {
-  std::vector<QString> modes;
+  std::vector<String> modes;
   const QStringList& list = seq_viewer->GetDisplayModes(entity);
   for (int i=0; i<list.size(); i++){
-    modes.push_back(list.at(i));
+    modes.push_back(list.at(i).toStdString());
   }
   return modes;
 }
 
-std::vector<QString> get_display_modes_c(SequenceViewerV2* seq_viewer, const seq::AlignmentHandle& alignment)
+std::vector<String> get_display_modes_c(SequenceViewerV2* seq_viewer, const seq::AlignmentHandle& alignment)
 {
-  std::vector<QString> modes;
+  std::vector<String> modes;
   const QStringList& list = seq_viewer->GetDisplayModes(alignment);
   for (int i=0; i<list.size(); i++){
-    modes.push_back(list.at(i));
+    modes.push_back(list.at(i).toStdString());
   }
   return modes;
 }
@@ -113,9 +113,5 @@ void export_SequenceViewerV2()
     .def("GetQObject",&get_py_qobject<SequenceViewerV2>)
     .add_property("qobject", &get_py_qobject<SequenceViewerV2>)
   ;
-
-  class_<std::vector<QString> >("QStringList", init<>())
-    .def(vector_indexing_suite<std::vector<QString>, true >())
-  ;
 }
 
diff --git a/modules/gui/src/sequence/sequence_model.cc b/modules/gui/src/sequence/sequence_model.cc
index 1191e7ac5..f4c8c65e1 100644
--- a/modules/gui/src/sequence/sequence_model.cc
+++ b/modules/gui/src/sequence/sequence_model.cc
@@ -297,19 +297,29 @@ void SequenceModel::DoubleClicked(const QModelIndex& index)
 const QStringList& SequenceModel::GetDisplayModes()
 {
   display_modes_.clear();
-  bool removed = false;
+  QMap<QString,int> string_map;
   for (int i = 0; i<objects_.size(); i++){
     const QStringList& list = objects_[i]->GetDisplayModes();
     for(int j=0; j<list.size(); j++){
-      if(i = 0){
-        display_modes_.append(list.at(i));
+      if(!string_map.contains(list.at(j))){
+        string_map.insert(list.at(j),1);
       }
-      else if (!display_modes_.contains(list.at(i))){
-        display_modes_.removeAll(list.at(i));
-        removed = true;
+      else {
+        string_map[list.at(j)] = string_map[list.at(j)] + 1;
       }
     }
   }
+  bool removed = false;
+  QMapIterator<QString, int> i(string_map);
+  while (i.hasNext()) {
+    i.next();
+    if(objects_.size()-1 <= i.value()){
+      display_modes_.append(i.key());
+    }
+    else{
+      removed = true;
+    }
+  }
   if(removed){
     display_modes_.insert(0," ");
   }
-- 
GitLab