From 0ebf9b4ac9d7ba59515ba1d7e85565175a4ca6b4 Mon Sep 17 00:00:00 2001
From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Wed, 2 Jun 2010 11:51:57 +0000
Subject: [PATCH] New SequenceViewer, export some convenience methods

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2315 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/gui/pymod/export_sequence_viewerV2.cc | 58 +++++++++++++++++++
 modules/gui/src/sequence/sequence_model.cc    | 42 +++++++++++++-
 modules/gui/src/sequence/sequence_model.hh    |  8 ++-
 modules/gui/src/sequence/sequence_viewer.cc   | 26 +++++++++
 modules/gui/src/sequence/sequence_viewer.hh   |  8 +++
 5 files changed, 138 insertions(+), 4 deletions(-)

diff --git a/modules/gui/pymod/export_sequence_viewerV2.cc b/modules/gui/pymod/export_sequence_viewerV2.cc
index 4731c1cac..67eebd8ee 100644
--- a/modules/gui/pymod/export_sequence_viewerV2.cc
+++ b/modules/gui/pymod/export_sequence_viewerV2.cc
@@ -16,7 +16,10 @@
 // along with this library; if not, write to the Free Software Foundation, Inc.,
 // 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 //------------------------------------------------------------------------------
+#include <vector>
+
 #include <boost/python.hpp>
+#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
 
 #include <ost/gui/sequence/sequence_viewer.hh>
 
@@ -43,6 +46,51 @@ 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)
+{
+  seq_viewer->GetCurrentDisplayMode();
+}
+
+void get_current_display_mode_b(SequenceViewerV2* seq_viewer, const gfx::EntityP& entity)
+{
+  seq_viewer->GetCurrentDisplayMode(entity);
+}
+
+void get_current_display_mode_c(SequenceViewerV2* seq_viewer, const seq::AlignmentHandle& alignment)
+{
+  seq_viewer->GetCurrentDisplayMode(alignment);
+}
+
+std::vector<QString> get_display_modes_a(SequenceViewerV2* seq_viewer)
+{
+  std::vector<QString> modes;
+  const QStringList& list = seq_viewer->GetDisplayModes();
+  for (int i=0; i<list.size(); i++){
+    modes.push_back(list.at(i));
+  }
+  return modes;
+}
+
+std::vector<QString> get_display_modes_b(SequenceViewerV2* seq_viewer, const gfx::EntityP& entity)
+{
+  std::vector<QString> modes;
+  const QStringList& list = seq_viewer->GetDisplayModes(entity);
+  for (int i=0; i<list.size(); i++){
+    modes.push_back(list.at(i));
+  }
+  return modes;
+}
+
+std::vector<QString> get_display_modes_c(SequenceViewerV2* seq_viewer, const seq::AlignmentHandle& alignment)
+{
+  std::vector<QString> modes;
+  const QStringList& list = seq_viewer->GetDisplayModes(alignment);
+  for (int i=0; i<list.size(); i++){
+    modes.push_back(list.at(i));
+  }
+  return modes;
+}
+
 }
 
 
@@ -53,11 +101,21 @@ void export_SequenceViewerV2()
     .def("Hide", &SequenceViewerV2::hide)
     .def("AddAlignment", &SequenceViewerV2::AddAlignment)
     .def("RemoveAlignment", &SequenceViewerV2::RemoveAlignment)
+    .def("GetDisplayModes", &get_display_modes_a)
+    .def("GetDisplayModes", &get_display_modes_b)
+    .def("GetDisplayModes", &get_display_modes_c)
+    .def("GetCurrentDisplayMode", &get_current_display_mode_a)
+    .def("GetCurrentDisplayMode", &get_current_display_mode_b)
+    .def("GetCurrentDisplayMode", &get_current_display_mode_c)
     .def("ChangeDisplayMode",&change_display_mode_a)
     .def("ChangeDisplayMode",&change_display_mode_b)
     .def("ChangeDisplayMode",&change_display_mode_c)
     .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 f5eb3fe14..1191e7ac5 100644
--- a/modules/gui/src/sequence/sequence_model.cc
+++ b/modules/gui/src/sequence/sequence_model.cc
@@ -294,7 +294,29 @@ void SequenceModel::DoubleClicked(const QModelIndex& index)
   }
 }
 
-const QStringList& SequenceModel::GetDisplayModes(gfx::EntityP& entity)
+const QStringList& SequenceModel::GetDisplayModes()
+{
+  display_modes_.clear();
+  bool removed = false;
+  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));
+      }
+      else if (!display_modes_.contains(list.at(i))){
+        display_modes_.removeAll(list.at(i));
+        removed = true;
+      }
+    }
+  }
+  if(removed){
+    display_modes_.insert(0," ");
+  }
+  return display_modes_;
+}
+
+const QStringList& SequenceModel::GetDisplayModes(const gfx::EntityP& entity)
 {
   BaseViewObject* item = this->GetItem(entity);
   if(item){
@@ -316,7 +338,23 @@ const QStringList& SequenceModel::GetDisplayModes(const seq::AlignmentHandle& al
   }
 }
 
-const QString& SequenceModel::GetCurrentDisplayMode(gfx::EntityP& entity)
+const QString& SequenceModel::GetCurrentDisplayMode()
+{
+  current_display_mode_.clear();
+  for (int i = 0; i<objects_.size(); i++){
+    const QString& mode = objects_[i]->GetCurrentDisplayMode();
+    if(current_display_mode_.isEmpty()){
+      current_display_mode_ = mode;
+    }
+    else if(current_display_mode_ != mode){
+      current_display_mode_ = " ";
+      break;
+    }
+  }
+  return current_display_mode_;
+}
+
+const QString& SequenceModel::GetCurrentDisplayMode(const gfx::EntityP& entity)
 {
   BaseViewObject* item = this->GetItem(entity);
   if(item){
diff --git a/modules/gui/src/sequence/sequence_model.hh b/modules/gui/src/sequence/sequence_model.hh
index 1cd719ba7..d0afbbc4d 100644
--- a/modules/gui/src/sequence/sequence_model.hh
+++ b/modules/gui/src/sequence/sequence_model.hh
@@ -61,9 +61,11 @@ public:
   int GetGlobalRow(BaseViewObject* obj, int row) const;
 
 
-  const QStringList& GetDisplayModes(gfx::EntityP& entity);
+  const QStringList& GetDisplayModes();
+  const QStringList& GetDisplayModes(const gfx::EntityP& entity);
   const QStringList& GetDisplayModes(const seq::AlignmentHandle& alignment);
-  const QString& GetCurrentDisplayMode(gfx::EntityP& entity);
+  const QString& GetCurrentDisplayMode();
+  const QString& GetCurrentDisplayMode(const gfx::EntityP& entity);
   const QString& GetCurrentDisplayMode(const seq::AlignmentHandle& alignment);
   void SetDisplayMode(const QString& mode);
   void SetDisplayMode(const gfx::EntityP& entity, const QString& mode);
@@ -101,6 +103,8 @@ private:
   PainterList empty_painter_list_;
   QString empty_string_;
   QStringList empty_string_list_;
+  QStringList display_modes_;
+  QString current_display_mode_;
 };
 
 
diff --git a/modules/gui/src/sequence/sequence_viewer.cc b/modules/gui/src/sequence/sequence_viewer.cc
index 3eafc093f..19f6613d8 100644
--- a/modules/gui/src/sequence/sequence_viewer.cc
+++ b/modules/gui/src/sequence/sequence_viewer.cc
@@ -284,6 +284,32 @@ void SequenceViewerV2::SelectList(const QModelIndexList& list)
   }
 }
 
+const QStringList& SequenceViewerV2::GetDisplayModes()
+{
+  return model_->GetDisplayModes();
+}
+const QStringList& SequenceViewerV2::GetDisplayModes(const seq::AlignmentHandle& alignment)
+{
+  return model_->GetDisplayModes(alignment);
+}
+const QStringList& SequenceViewerV2::GetDisplayModes(const gfx::EntityP& entity)
+{
+  return model_->GetDisplayModes(entity);
+}
+
+const QString& SequenceViewerV2::GetCurrentDisplayMode()
+{
+  return model_->GetCurrentDisplayMode();
+}
+const QString& SequenceViewerV2::GetCurrentDisplayMode(const seq::AlignmentHandle& alignment)
+{
+  return model_->GetCurrentDisplayMode(alignment);
+}
+const QString& SequenceViewerV2::GetCurrentDisplayMode(const gfx::EntityP& entity)
+{
+  return model_->GetCurrentDisplayMode(entity);
+}
+
 void SequenceViewerV2::ChangeDisplayMode(const QString& string)
 {
   model_->SetDisplayMode(string);
diff --git a/modules/gui/src/sequence/sequence_viewer.hh b/modules/gui/src/sequence/sequence_viewer.hh
index 1137697e4..d5684fa5b 100644
--- a/modules/gui/src/sequence/sequence_viewer.hh
+++ b/modules/gui/src/sequence/sequence_viewer.hh
@@ -57,6 +57,14 @@ public:
   virtual bool Restore(const QString&){return true;};
   virtual bool Save(const QString&){return true;};
 
+  virtual const QStringList& GetDisplayModes();
+  virtual const QStringList& GetDisplayModes(const seq::AlignmentHandle& alignment);
+  virtual const QStringList& GetDisplayModes(const gfx::EntityP& entity);
+
+  virtual const QString& GetCurrentDisplayMode();
+  virtual const QString& GetCurrentDisplayMode(const seq::AlignmentHandle& alignment);
+  virtual const QString& GetCurrentDisplayMode(const gfx::EntityP& entity);
+
 public slots:
   void ChangeDisplayMode(const QString&);
   void ChangeDisplayMode(const seq::AlignmentHandle&, const QString&);
-- 
GitLab