From 8d1158e094213319bf04eaccaaab48b764a524e4 Mon Sep 17 00:00:00 2001
From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Wed, 2 Jun 2010 11:51:54 +0000
Subject: [PATCH] New SequenceViewer, methods to change display mode

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2312 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/gui/pymod/export_sequence_viewerV2.cc | 22 +++++
 .../gui/src/sequence/alignment_view_object.cc | 23 ++++-
 .../gui/src/sequence/alignment_view_object.hh |  6 ++
 modules/gui/src/sequence/base_view_object.cc  | 24 +++++
 modules/gui/src/sequence/base_view_object.hh  |  8 ++
 modules/gui/src/sequence/sequence_model.cc    | 99 +++++++++++++++++--
 modules/gui/src/sequence/sequence_model.hh    | 17 +++-
 .../gui/src/sequence/sequence_view_object.cc  | 88 ++++++++++++-----
 .../gui/src/sequence/sequence_view_object.hh  | 25 +++++
 modules/gui/src/sequence/sequence_viewer.cc   | 18 ++++
 modules/gui/src/sequence/sequence_viewer.hh   |  8 +-
 11 files changed, 299 insertions(+), 39 deletions(-)

diff --git a/modules/gui/pymod/export_sequence_viewerV2.cc b/modules/gui/pymod/export_sequence_viewerV2.cc
index 0a744dccc..4731c1cac 100644
--- a/modules/gui/pymod/export_sequence_viewerV2.cc
+++ b/modules/gui/pymod/export_sequence_viewerV2.cc
@@ -26,6 +26,25 @@ using namespace boost::python;
 using namespace ost;
 using namespace ost::gui;
 
+namespace {
+
+void change_display_mode_a(SequenceViewerV2* seq_viewer, const QString& mode)
+{
+  seq_viewer->ChangeDisplayMode(mode);
+}
+
+void change_display_mode_b(SequenceViewerV2* seq_viewer, const gfx::EntityP& entity, const QString& mode)
+{
+  seq_viewer->ChangeDisplayMode(entity, mode);
+}
+
+void change_display_mode_c(SequenceViewerV2* seq_viewer, const seq::AlignmentHandle& alignment, const QString& mode)
+{
+  seq_viewer->ChangeDisplayMode(alignment, mode);
+}
+
+}
+
 
 void export_SequenceViewerV2()
 {
@@ -34,6 +53,9 @@ void export_SequenceViewerV2()
     .def("Hide", &SequenceViewerV2::hide)
     .def("AddAlignment", &SequenceViewerV2::AddAlignment)
     .def("RemoveAlignment", &SequenceViewerV2::RemoveAlignment)
+    .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>)
   ;
diff --git a/modules/gui/src/sequence/alignment_view_object.cc b/modules/gui/src/sequence/alignment_view_object.cc
index 40003412f..3217085bf 100644
--- a/modules/gui/src/sequence/alignment_view_object.cc
+++ b/modules/gui/src/sequence/alignment_view_object.cc
@@ -86,6 +86,8 @@ QColor GetForeGroundColor(QColor background){
 
 QMap<QString,int> AlignmentViewObject::group_map_ = GetGroupMap();
 
+const QString AlignmentViewObject::conservation_mode = "Highlight conservation";
+
 AlignmentViewObject::AlignmentViewObject(const seq::AlignmentHandle& alignment, QObject* parent): SequenceViewObject(parent), alignment_(alignment)
 {
   for(int i=0; i<alignment.GetCount(); i++){
@@ -127,12 +129,13 @@ AlignmentViewObject::AlignmentViewObject(const seq::AlignmentHandle& alignment,
       conservation_[j] = Qt::transparent;
     }
   }
+  this->AddDisplayMode(conservation_mode);
 }
 
 
 QVariant AlignmentViewObject::GetData(int row, int column, int role)
 {
-  if(column > 0 && column <= alignment_.GetLength()){
+  if(column > 0 && column <= alignment_.GetLength() && this->GetCurrentDisplayMode() == conservation_mode){
     if(role == Qt::UserRole+3 ){
       if(column -1 < conservation_.size()){
         return QVariant(conservation_[column-1]);
@@ -152,4 +155,22 @@ QVariant AlignmentViewObject::GetData(int row, int column, int role)
   return BaseViewObject::GetData(row,column,role);
 }
 
+void AlignmentViewObject::SetDisplayMode(const QString& mode)
+{
+  if(this->display_modes_.contains(mode) && mode == conservation_mode){
+    for(int i=0 ; i<this->GetRowCount(); i++){
+      BaseRow* row = this->GetRow(i);
+      row->RemovePainter(seq_secondary_structure_painter);
+      row->RemovePainter(align_properties_painter);
+      row->InsertPainter(conservation_painter,1);
+    }
+  }
+  SequenceViewObject::SetDisplayMode(mode);
+}
+
+const seq::AlignmentHandle& AlignmentViewObject::GetAlignment()
+{
+  return alignment_;
+}
+
 }}
diff --git a/modules/gui/src/sequence/alignment_view_object.hh b/modules/gui/src/sequence/alignment_view_object.hh
index 71a9dc322..242e1efea 100644
--- a/modules/gui/src/sequence/alignment_view_object.hh
+++ b/modules/gui/src/sequence/alignment_view_object.hh
@@ -38,11 +38,17 @@ public:
 
   QVariant GetData(int row, int column, int role);
 
+  const seq::AlignmentHandle& GetAlignment();
+
+  void SetDisplayMode(const QString& mode);
+
 private:
   seq::AlignmentHandle alignment_;
   QMap<int, QColor> conservation_;
 
   static QMap<QString,int> group_map_;
+
+  static const QString conservation_mode;
 };
 
 
diff --git a/modules/gui/src/sequence/base_view_object.cc b/modules/gui/src/sequence/base_view_object.cc
index f6292d97b..72953aa3e 100644
--- a/modules/gui/src/sequence/base_view_object.cc
+++ b/modules/gui/src/sequence/base_view_object.cc
@@ -89,6 +89,30 @@ bool BaseViewObject::SetData(int row, int column, const QVariant& value, int rol
   return rows_[row]->SetData(column, value, role);
 }
 
+const QStringList& BaseViewObject::GetDisplayModes()
+{
+  return display_modes_;
+}
+
+const QString& BaseViewObject::GetCurrentDisplayMode()
+{
+  return current_display_mode_;
+}
+
+void BaseViewObject::SetDisplayMode(const QString& mode)
+{
+  if(display_modes_.contains(mode)){
+    this->current_display_mode_ = mode;
+  }
+}
+
+void BaseViewObject::AddDisplayMode(const QString& mode)
+{
+  if(!display_modes_.contains(mode)){
+    this->display_modes_.append(mode);
+  }
+}
+
 void BaseViewObject::DoubleClicked(int row, int column)
 {
   if(row>=0 || row < rows_.size()){
diff --git a/modules/gui/src/sequence/base_view_object.hh b/modules/gui/src/sequence/base_view_object.hh
index 6f227b9c9..90526bfa3 100644
--- a/modules/gui/src/sequence/base_view_object.hh
+++ b/modules/gui/src/sequence/base_view_object.hh
@@ -51,12 +51,20 @@ public:
   virtual bool SetData(int row, int column, const QVariant& value, int role);
   virtual Qt::ItemFlags Flags(int row, int column) const;
 
+  virtual const QStringList& GetDisplayModes();
+  virtual const QString& GetCurrentDisplayMode();
+  virtual void SetDisplayMode(const QString& mode);
+
   void DoubleClicked(int row, int column);
   void ZoomIn();
   void ZoomOut();
 
 protected:
+  virtual void AddDisplayMode(const QString& mode);
+
   QList<BaseRow*> rows_;
+  QString current_display_mode_;
+  QStringList display_modes_;
 };
 
 
diff --git a/modules/gui/src/sequence/sequence_model.cc b/modules/gui/src/sequence/sequence_model.cc
index e054a9046..f5eb3fe14 100644
--- a/modules/gui/src/sequence/sequence_model.cc
+++ b/modules/gui/src/sequence/sequence_model.cc
@@ -26,9 +26,6 @@
 
 #include <QtGui>
 
-#include "alignment_view_object.hh"
-#include "sequence_view_object.hh"
-
 #include "title_row.hh"
 
 #include "background_painter.hh"
@@ -131,7 +128,19 @@ void SequenceModel::RemoveGfxEntity(gfx::EntityP& entity){
 }
 
 void SequenceModel::RemoveAlignment(const seq::AlignmentHandle& alignment){
-
+  if(AlignmentViewObject* obj = this->GetItem(alignment)){
+    int index = this->GetGlobalRow(obj,0);
+    this->beginRemoveRows(QModelIndex(),index,index+obj->GetRowCount()-1);
+    int cols_before = this->columnCount();
+    objects_.removeOne(obj);
+    this->endRemoveRows();
+    int cols = this->GetColumnCount();
+    if(cols_before>cols){
+      this->max_columns = cols;
+      this->beginRemoveColumns(QModelIndex(), cols, cols_before);
+      this->endRemoveColumns();
+    }
+  }
 }
 
 int SequenceModel::GetColumnCount() const{
@@ -145,7 +154,7 @@ int SequenceModel::GetColumnCount() const{
   return cols;
 }
 
-SequenceViewObject* SequenceModel::GetItem(gfx::EntityP& entity){
+SequenceViewObject* SequenceModel::GetItem(const gfx::EntityP& entity){
   if(entity != NULL){
     for (int i = 0 ; i< objects_.size(); i++){
       if(SequenceViewObject* seq_view_object = qobject_cast<SequenceViewObject*>(objects_[i])){
@@ -158,12 +167,23 @@ SequenceViewObject* SequenceModel::GetItem(gfx::EntityP& entity){
   return NULL;
 }
 
+AlignmentViewObject* SequenceModel::GetItem(const seq::AlignmentHandle& alignment){
+  for (int i = 0 ; i< objects_.size(); i++){
+    if(AlignmentViewObject* alignment_object = qobject_cast<AlignmentViewObject*>(objects_[i])){
+      if(alignment == alignment_object->GetAlignment()){
+        return alignment_object;
+      }
+    }
+  }
+  return NULL;
+}
+
 const PainterList& SequenceModel::GetPainters(const QModelIndex& index) const{
   QPair<int, BaseViewObject*> pair = this->GetRowWithItem(index);
   if(pair.second){
     return pair.second->GetRow(pair.first)->GetPainters();
   }
-  return empty_list_;
+  return empty_painter_list_;
 }
 
 QPair<int, BaseViewObject*> SequenceModel::GetRowWithItem(int row) const{
@@ -274,6 +294,73 @@ void SequenceModel::DoubleClicked(const QModelIndex& index)
   }
 }
 
+const QStringList& SequenceModel::GetDisplayModes(gfx::EntityP& entity)
+{
+  BaseViewObject* item = this->GetItem(entity);
+  if(item){
+    return item->GetDisplayModes();
+  }
+  else{
+    return empty_string_list_;
+  }
+}
+
+const QStringList& SequenceModel::GetDisplayModes(const seq::AlignmentHandle& alignment)
+{
+  BaseViewObject* item = this->GetItem(alignment);
+  if(item){
+    return item->GetDisplayModes();
+  }
+  else{
+    return empty_string_list_;
+  }
+}
+
+const QString& SequenceModel::GetCurrentDisplayMode(gfx::EntityP& entity)
+{
+  BaseViewObject* item = this->GetItem(entity);
+  if(item){
+    return item->GetCurrentDisplayMode();
+  }
+  else{
+    return empty_string_;
+  }
+}
+
+const QString& SequenceModel::GetCurrentDisplayMode(const seq::AlignmentHandle& alignment)
+{
+  BaseViewObject* item = this->GetItem(alignment);
+  if(item){
+    return item->GetCurrentDisplayMode();
+  }
+  else{
+    return empty_string_;
+  }
+}
+
+void SequenceModel::SetDisplayMode(const QString& mode)
+{
+  for (int i = 0; i<objects_.size(); i++){
+    objects_[i]->SetDisplayMode(mode);
+  }
+}
+
+void SequenceModel::SetDisplayMode(const gfx::EntityP& entity, const QString& mode)
+{
+  BaseViewObject* item = this->GetItem(entity);
+  if(item){
+    return item->SetDisplayMode(mode);
+  }
+}
+
+void SequenceModel::SetDisplayMode(const seq::AlignmentHandle& alignment, const QString& mode)
+{
+  BaseViewObject* item = this->GetItem(alignment);
+  if(item){
+    return item->SetDisplayMode(mode);
+  }
+}
+
 int SequenceModel::rowCount(const QModelIndex& parent) const
 {
   int rows = 0;
diff --git a/modules/gui/src/sequence/sequence_model.hh b/modules/gui/src/sequence/sequence_model.hh
index 218dbb4c9..1cd719ba7 100644
--- a/modules/gui/src/sequence/sequence_model.hh
+++ b/modules/gui/src/sequence/sequence_model.hh
@@ -34,6 +34,7 @@
 #include <ost/gfx/entity.hh>
 
 #include "base_view_object.hh"
+#include "alignment_view_object.hh"
 #include "sequence_view_object.hh"
 
 namespace ost { namespace gui {
@@ -60,6 +61,14 @@ public:
   int GetGlobalRow(BaseViewObject* obj, int row) const;
 
 
+  const QStringList& GetDisplayModes(gfx::EntityP& entity);
+  const QStringList& GetDisplayModes(const seq::AlignmentHandle& alignment);
+  const QString& GetCurrentDisplayMode(gfx::EntityP& entity);
+  const QString& GetCurrentDisplayMode(const seq::AlignmentHandle& alignment);
+  void SetDisplayMode(const QString& mode);
+  void SetDisplayMode(const gfx::EntityP& entity, const QString& mode);
+  void SetDisplayMode(const seq::AlignmentHandle& alignment, const QString& mode);
+
   const PainterList& GetPainters(const QModelIndex& index) const;
 
   // abstract item model interface
@@ -79,17 +88,19 @@ public slots:
   void ZoomOut();
   void DoubleClicked(const QModelIndex& index);
   void SelectionChanged(const QItemSelection& sel, const QItemSelection& desel);
-
 private:
   int GetColumnCount() const;
-  SequenceViewObject* GetItem(gfx::EntityP& entity);
+  SequenceViewObject* GetItem(const gfx::EntityP& entity);
+  AlignmentViewObject* GetItem(const seq::AlignmentHandle& alignment);
   BaseViewObject* GetItem(const QModelIndex& index) const;
   QPair<int, BaseViewObject*> GetRowWithItem(int row) const;
   QPair<int, BaseViewObject*> GetRowWithItem(const QModelIndex& index) const;
 
   QList<BaseViewObject*> objects_;
   int max_columns;
-  PainterList empty_list_;
+  PainterList empty_painter_list_;
+  QString empty_string_;
+  QStringList empty_string_list_;
 };
 
 
diff --git a/modules/gui/src/sequence/sequence_view_object.cc b/modules/gui/src/sequence/sequence_view_object.cc
index 0ded72932..e7f0a8e0c 100644
--- a/modules/gui/src/sequence/sequence_view_object.cc
+++ b/modules/gui/src/sequence/sequence_view_object.cc
@@ -30,40 +30,49 @@
 #include "sequence_row.hh"
 #include "secstr_row.hh"
 
-#include "align_properties_painter.hh"
-#include "conservation_painter.hh"
-#include "painter.hh"
-#include "background_painter.hh"
-#include "seq_secstr_painter.hh"
-#include "seq_selection_painter.hh"
-#include "seq_text_painter.hh"
-
 #include "sequence_view_object.hh"
 
 namespace ost { namespace gui {
 
+const QString SequenceViewObject::properties_mode = "Highlight properties";
+const QString SequenceViewObject::secondary_structure_mode = "Secondary structure";
+
+AlignPropertiesPainter* SequenceViewObject::align_properties_painter = new AlignPropertiesPainter();
+ConservationPainter* SequenceViewObject::conservation_painter = new ConservationPainter();
+BackgroundPainter* SequenceViewObject::background_painter = new BackgroundPainter();
+SeqSecStrPainter* SequenceViewObject::seq_secondary_structure_painter = new SeqSecStrPainter();
+SeqSelectionPainter* SequenceViewObject::seq_selection_painter = new SeqSelectionPainter();
+SeqTextPainter* SequenceViewObject::seq_text_painter = new SeqTextPainter();
+
 SequenceViewObject::SequenceViewObject(seq::SequenceList& sequences, const QList<QString>& names, QObject *parent): BaseViewObject(parent), entity_(gfx::EntityP())
 {
+  this->Init();
   if(names.size() == sequences.GetCount()){
     for(int i=0; i<sequences.GetCount(); i++){
       seq::SequenceHandle seq = sequences[i];
       this->AddSequence(seq, names[i]);
     }
   }
+  this->SetDisplayMode(properties_mode);
 }
 
 SequenceViewObject::SequenceViewObject(seq::SequenceHandle& sequence, const QString& name, QObject *parent): BaseViewObject(parent), entity_(gfx::EntityP())
 {
+  this->Init();
   this->AddSequence(sequence, name);
+  this->SetDisplayMode(properties_mode);
 }
 
 SequenceViewObject::SequenceViewObject(mol::ChainView& chain, const QString& name, QObject *parent): BaseViewObject(parent), entity_(gfx::EntityP())
 {
+  this->Init();
   this->AddChain(chain, name);
+  this->SetDisplayMode(properties_mode);
 }
 
 SequenceViewObject::SequenceViewObject(gfx::EntityP& entity, QObject* parent): BaseViewObject(parent), entity_(entity)
 {
+  this->Init();
   mol::EntityView view =entity->GetView();
   for (mol::ChainViewList::const_iterator c=view.GetChainList().begin(),
        e1=view.GetChainList().end(); c!=e1; ++c) {
@@ -74,38 +83,40 @@ SequenceViewObject::SequenceViewObject(gfx::EntityP& entity, QObject* parent): B
     }
     this->AddChain(chain, name);
   }
+  this->SetDisplayMode(secondary_structure_mode);
 }
 
 SequenceViewObject::SequenceViewObject(QObject* parent): BaseViewObject(parent), entity_(gfx::EntityP())
-{ }
+{
+  this->Init();
+  this->SetDisplayMode(properties_mode);
+}
+
+void SequenceViewObject::Init()
+{
+  this->AddDisplayMode(properties_mode);
+  if(entity_){
+    this->AddDisplayMode(secondary_structure_mode);
+  }
+}
 
 void SequenceViewObject::AddSequence(seq::SequenceHandle& sequence, const QString& name)
 {
   SequenceRow* new_row = new SequenceRow(name, sequence, this);
-  Painter* p = new BackgroundPainter(this);
-  new_row->InsertPainter(p);
-  p = new AlignPropertiesPainter(this);
-  new_row->InsertPainter(p);
-  p = new ConservationPainter(this);
-  new_row->InsertPainter(p);
-  p = new SeqTextPainter(this);
-  new_row->InsertPainter(p);
-  p = new SeqSelectionPainter(this);
-  new_row->InsertPainter(p);
+  new_row->InsertPainter(background_painter);
+  new_row->InsertPainter(align_properties_painter);
+  new_row->InsertPainter(seq_text_painter);
+  new_row->InsertPainter(seq_selection_painter);
   rows_.append(new_row);
 }
 
 void SequenceViewObject::AddChain(mol::ChainView& chain, const QString& name)
 {
   SecStrRow* new_row = new SecStrRow(name, chain, this);
-  Painter* p = new BackgroundPainter(this);
-  new_row->InsertPainter(p);
-  p = new SeqSecStrPainter(this);
-  new_row->InsertPainter(p);
-  p = new SeqTextPainter(this);
-  new_row->InsertPainter(p);
-  p = new SeqSelectionPainter(this);
-  new_row->InsertPainter(p);
+  new_row->InsertPainter(background_painter);
+  new_row->InsertPainter(seq_secondary_structure_painter);
+  new_row->InsertPainter(seq_text_painter);
+  new_row->InsertPainter(seq_selection_painter);
   rows_.append(new_row);
 }
 
@@ -119,6 +130,29 @@ gfx::EntityP& SequenceViewObject::GetGfxObject()
   return entity_;
 }
 
+void SequenceViewObject::SetDisplayMode(const QString& mode)
+{
+  if(this->display_modes_.contains(mode)){
+    if(mode == properties_mode){
+      for(int i=0 ; i<this->GetRowCount(); i++){
+        BaseRow* row = this->GetRow(i);
+        row->RemovePainter(seq_secondary_structure_painter);
+        row->RemovePainter(conservation_painter);
+        row->InsertPainter(align_properties_painter,1);
+      }
+    }
+    else if(mode == secondary_structure_mode){
+      for(int i=0 ; i<this->GetRowCount(); i++){
+        BaseRow* row = this->GetRow(i);
+        row->RemovePainter(align_properties_painter);
+        row->RemovePainter(conservation_painter);
+        row->InsertPainter(seq_secondary_structure_painter,1);
+      }
+    }
+  }
+  BaseViewObject::SetDisplayMode(mode);
+}
+
 QMap<int, QList<int> > SequenceViewObject::GetIndexesForView(const mol::EntityView& view)
 {
   if(view.GetChainCount()==0){
diff --git a/modules/gui/src/sequence/sequence_view_object.hh b/modules/gui/src/sequence/sequence_view_object.hh
index 9c443095f..2ad390a95 100644
--- a/modules/gui/src/sequence/sequence_view_object.hh
+++ b/modules/gui/src/sequence/sequence_view_object.hh
@@ -30,8 +30,16 @@
 
 #include <ost/seq/sequence_list.hh>
 
+#include "align_properties_painter.hh"
+#include "conservation_painter.hh"
+#include "background_painter.hh"
+#include "seq_secstr_painter.hh"
+#include "seq_selection_painter.hh"
+#include "seq_text_painter.hh"
+
 #include "base_view_object.hh"
 
+
 namespace ost { namespace gui {
 
 class SequenceViewObject : public BaseViewObject
@@ -45,17 +53,34 @@ public:
   SequenceViewObject(gfx::EntityP& entity, QObject* parent = 0);
   SequenceViewObject(QObject* parent = 0);
 
+  void Init();
+
   void AddSequence(seq::SequenceHandle& sequence, const QString& name=QString());
   void AddChain(mol::ChainView& chain, const QString& name=QString());
 
   void AttachGfxObject(gfx::EntityP& ent);
   gfx::EntityP& GetGfxObject();
 
+  virtual void SetDisplayMode(const QString& mode);
+
   QMap<int, QList<int> > GetIndexesForView(const mol::EntityView& view);
   QMap<int, QList<int> > GetIndexesForSubject(const QString& subject, const QString& sequence_name=QString());
 
+protected:
+  static const QString properties_mode;
+  static const QString secondary_structure_mode;
+
+  static AlignPropertiesPainter* align_properties_painter;
+  static ConservationPainter* conservation_painter;
+  static BackgroundPainter* background_painter;
+  static SeqSecStrPainter* seq_secondary_structure_painter;
+  static SeqSelectionPainter* seq_selection_painter;
+  static SeqTextPainter* seq_text_painter;
+
 private:
   gfx::EntityP entity_;
+
+
 };
 
 
diff --git a/modules/gui/src/sequence/sequence_viewer.cc b/modules/gui/src/sequence/sequence_viewer.cc
index 392309d70..3eafc093f 100644
--- a/modules/gui/src/sequence/sequence_viewer.cc
+++ b/modules/gui/src/sequence/sequence_viewer.cc
@@ -284,6 +284,24 @@ void SequenceViewerV2::SelectList(const QModelIndexList& list)
   }
 }
 
+void SequenceViewerV2::ChangeDisplayMode(const QString& string)
+{
+  model_->SetDisplayMode(string);
+  seq_table_view_->viewport()->update();
+}
+
+void SequenceViewerV2::ChangeDisplayMode(const seq::AlignmentHandle& alignment, const QString& string)
+{
+  model_->SetDisplayMode(alignment, string);
+  seq_table_view_->viewport()->update();
+}
+
+void SequenceViewerV2::ChangeDisplayMode(const gfx::EntityP& entity, const QString& string)
+{
+  model_->SetDisplayMode(entity, string);
+  seq_table_view_->viewport()->update();
+}
+
 SequenceViewerV2::~SequenceViewerV2(){
   gfx::Scene::Instance().DetachObserver(this);
 }
diff --git a/modules/gui/src/sequence/sequence_viewer.hh b/modules/gui/src/sequence/sequence_viewer.hh
index 10af21bb3..1137697e4 100644
--- a/modules/gui/src/sequence/sequence_viewer.hh
+++ b/modules/gui/src/sequence/sequence_viewer.hh
@@ -58,8 +58,11 @@ public:
   virtual bool Save(const QString&){return true;};
 
 public slots:
-/// \internal
-void OnSearchBarUpdate(const QString&, bool, const QString&);
+  void ChangeDisplayMode(const QString&);
+  void ChangeDisplayMode(const seq::AlignmentHandle&, const QString&);
+  void ChangeDisplayMode(const gfx::EntityP&, const QString&);
+  //internal
+  void OnSearchBarUpdate(const QString&, bool, const QString&);
 
 private:
   void UpdateSearchBar();
@@ -75,6 +78,7 @@ private slots:
   void DoubleClicked(const QModelIndex& index);
   void MouseWheelEvent(QWheelEvent* event);
   void CopyEvent(QKeyEvent* event);
+
 };
 
 }}
-- 
GitLab