From 9b33e127959db6520744030a8e1a81c86db58fb8 Mon Sep 17 00:00:00 2001
From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Mon, 3 May 2010 10:53:08 +0000
Subject: [PATCH] New SequenceViewer, use sequencedelegate to render

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2161 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/gui/src/sequence/row.cc                 |  5 +++++
 modules/gui/src/sequence/row.hh                 |  2 ++
 modules/gui/src/sequence/sequence_delegate.cc   | 17 +++++------------
 modules/gui/src/sequence/sequence_delegate.hh   |  1 -
 modules/gui/src/sequence/sequence_model.cc      |  7 ++++++-
 modules/gui/src/sequence/sequence_model.hh      |  1 +
 modules/gui/src/sequence/sequence_table_view.cc |  6 +++++-
 modules/gui/src/sequence/sequence_table_view.hh |  5 ++++-
 modules/gui/src/sequence/sequence_viewer.cc     |  3 +--
 modules/gui/src/sequence/view_object.cc         | 15 +++++++++++++++
 modules/gui/src/sequence/view_object.hh         |  5 +++++
 11 files changed, 49 insertions(+), 18 deletions(-)

diff --git a/modules/gui/src/sequence/row.cc b/modules/gui/src/sequence/row.cc
index 8846f1913..a109fe98c 100644
--- a/modules/gui/src/sequence/row.cc
+++ b/modules/gui/src/sequence/row.cc
@@ -67,4 +67,9 @@ bool Row::IsPosValid(int pos)
   return false;
 }
 
+const PainterList& Row::GetPainters() const
+{
+  return painter_;
+}
+
 }}
diff --git a/modules/gui/src/sequence/row.hh b/modules/gui/src/sequence/row.hh
index 161e251a6..794a48db9 100644
--- a/modules/gui/src/sequence/row.hh
+++ b/modules/gui/src/sequence/row.hh
@@ -44,6 +44,8 @@ public:
   Painter* GetPainter(int pos);
   int GetPainterCount();
 
+  const PainterList& GetPainters() const;
+
 private:
   bool IsPosValid(int pos);
   PainterList painter_;
diff --git a/modules/gui/src/sequence/sequence_delegate.cc b/modules/gui/src/sequence/sequence_delegate.cc
index a152298e7..827aef65f 100644
--- a/modules/gui/src/sequence/sequence_delegate.cc
+++ b/modules/gui/src/sequence/sequence_delegate.cc
@@ -29,22 +29,15 @@ namespace ost { namespace gui {
 
 SequenceDelegate::SequenceDelegate(SequenceModel* seq_model, QObject *parent)
     : QItemDelegate(parent), seq_model_(seq_model)
-{
-  QFontMetrics metrics = QFontMetrics(QFont("Courier",10));
-  default_size = QSize(metrics.width(QString("_"))+2,metrics.height()+2);
-}
+{}
 
 void SequenceDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                          const QModelIndex &index) const
 {
-/*  Row* row = seq_model_->GetRow(index);
-  for(int i=0; i < row->GetPainterCount(); i++){
-    row->GetPainter(i)->Paint(painter, option, index);
-  }*/
-}
-
-QSize& SequenceDelegate::GetDefaultSize(){
-  return default_size;
+  const PainterList& painters = seq_model_->GetPainters(index);
+  for(int i=0; i < painters.size(); i++){
+    painters[i]->Paint(painter, option, index);
+  }
 }
 
 }}
diff --git a/modules/gui/src/sequence/sequence_delegate.hh b/modules/gui/src/sequence/sequence_delegate.hh
index 5629a355b..3c74fcf54 100644
--- a/modules/gui/src/sequence/sequence_delegate.hh
+++ b/modules/gui/src/sequence/sequence_delegate.hh
@@ -26,7 +26,6 @@
 #include <QItemDelegate>
 #include <QModelIndex>
 
-#include "sequence_table_view.hh"
 #include "sequence_model.hh"
 
 namespace ost { namespace gui {
diff --git a/modules/gui/src/sequence/sequence_model.cc b/modules/gui/src/sequence/sequence_model.cc
index 1fdf5730d..06199fbf4 100644
--- a/modules/gui/src/sequence/sequence_model.cc
+++ b/modules/gui/src/sequence/sequence_model.cc
@@ -35,7 +35,7 @@ SequenceModel::SequenceModel(QObject *parent)
 
 void SequenceModel::InsertSequence(QString& name, seq::SequenceHandle& seq){
   int cols = this->columnCount();
-  int new_cols = cols + seq.GetLength();
+  int new_cols = seq.GetLength();
   this->beginInsertRows(QModelIndex(),this->rowCount(),this->rowCount());
   objects_.append(new ViewObject(seq, name, this));
   if(new_cols > cols){
@@ -70,6 +70,11 @@ ViewObject* SequenceModel::GetObject(QString& name){
   return NULL;
 }
 
+const PainterList& SequenceModel::GetPainters(const QModelIndex& index) const{
+  QPair<int, ViewObject*> pair = this->GetItem(index);
+  return pair.second->GetRow(pair.first)->GetPainters();
+}
+
 QPair<int, ViewObject*> SequenceModel::GetItem(const QModelIndex& index) const{
   if(!objects_.isEmpty()){
     int ind_row = index.row();
diff --git a/modules/gui/src/sequence/sequence_model.hh b/modules/gui/src/sequence/sequence_model.hh
index e025b0dda..234cebc7b 100644
--- a/modules/gui/src/sequence/sequence_model.hh
+++ b/modules/gui/src/sequence/sequence_model.hh
@@ -45,6 +45,7 @@ public:
   void RemoveSequence(QString& name);
 
   ViewObject* GetObject(QString& name);
+  const PainterList& GetPainters(const QModelIndex& index) const;
 
   QPair<int, ViewObject*> GetItem(const QModelIndex& index) const;
 
diff --git a/modules/gui/src/sequence/sequence_table_view.cc b/modules/gui/src/sequence/sequence_table_view.cc
index 10e16a597..e9e4ab84c 100644
--- a/modules/gui/src/sequence/sequence_table_view.cc
+++ b/modules/gui/src/sequence/sequence_table_view.cc
@@ -27,6 +27,7 @@
 
 #include <iostream>
 #include "sequence_table_view.hh"
+#include "sequence_model.hh"
 
 namespace ost { namespace gui {
 
@@ -112,6 +113,8 @@ SequenceTableView::SequenceTableView(QAbstractItemModel * model)
 
   connect(column_not_move_->verticalScrollBar(), SIGNAL(valueChanged(int)), this->verticalScrollBar(), SLOT(setValue(int)));
   connect(verticalScrollBar(), SIGNAL(valueChanged(int)), column_not_move_->verticalScrollBar(), SLOT(setValue(int)));
+
+  delegate_ = new SequenceDelegate(qobject_cast<SequenceModel*>(this->model()),this);
  }
 
 void SequenceTableView::ResizeWidth(int index, int, int size)
@@ -163,8 +166,9 @@ void SequenceTableView::updateNotMoveColumn()
 void SequenceTableView::columnCountChanged(const QModelIndex& index, int old_count, int new_count){
   if(old_count >= 0 && old_count <= new_count){
     if(old_count == 0)old_count = 1;
-    for(int col=old_count; col<new_count; col++){
+    for(int col=old_count; col<=new_count; col++){
       column_not_move_->setColumnHidden(col, true);
+      this->setItemDelegateForColumn(col, delegate_);
     }
   }
 }
diff --git a/modules/gui/src/sequence/sequence_table_view.hh b/modules/gui/src/sequence/sequence_table_view.hh
index 9b873c40a..b846982fa 100644
--- a/modules/gui/src/sequence/sequence_table_view.hh
+++ b/modules/gui/src/sequence/sequence_table_view.hh
@@ -27,6 +27,8 @@
 
 #include <ost/gui/module_config.hh>
 
+#include "sequence_delegate.hh"
+
 namespace ost { namespace gui {
 
 /// \brief QTableView with first column not moving
@@ -50,7 +52,8 @@ private slots:
   void ResizeHeight(int index, int, int size);
 
 private:
-  QTableView *column_not_move_;
+  QTableView* column_not_move_;
+  SequenceDelegate* delegate_;
   void updateNotMoveColumn();
 };
 
diff --git a/modules/gui/src/sequence/sequence_viewer.cc b/modules/gui/src/sequence/sequence_viewer.cc
index 378c6f181..4fa20eac3 100644
--- a/modules/gui/src/sequence/sequence_viewer.cc
+++ b/modules/gui/src/sequence/sequence_viewer.cc
@@ -54,10 +54,9 @@ SequenceViewerV2::SequenceViewerV2(QWidget* parent): Widget(NULL,parent)
   layout->addWidget(seq_table_view_);
   this->setLayout(layout);
   connect(model_,SIGNAL(columnsInserted(const QModelIndex&, int, int)),seq_table_view_,SLOT(columnCountChanged(const QModelIndex&, int, int)));
-  /*
+
   seq_table_view_->horizontalHeader()->setMinimumSectionSize(2);
   seq_table_view_->verticalHeader()->setMinimumSectionSize(2);
-  */
 }
 
 void SequenceViewerV2::NodeAdded(const gfx::GfxNodeP& n)
diff --git a/modules/gui/src/sequence/view_object.cc b/modules/gui/src/sequence/view_object.cc
index bff516edc..c3bd14e0c 100644
--- a/modules/gui/src/sequence/view_object.cc
+++ b/modules/gui/src/sequence/view_object.cc
@@ -37,11 +37,20 @@ ViewObject::ViewObject(seq::SequenceList& sequences, const QString& name, QObjec
     seq::SequenceHandle seq = sequences[i];
     this->AddSequence(seq);
   }
+  this->Init();
 }
 
 ViewObject::ViewObject(seq::SequenceHandle& sequence, const QString& name, QObject *parent): QObject(parent), name_(name)
 {
   this->AddSequence(sequence);
+  this->Init();
+}
+
+void ViewObject::Init()
+{
+  font_ = QFont("Courier",10);
+  QFontMetrics metrics = QFontMetrics(font_);
+  default_size_ = QSize(metrics.width(QString("_"))+2,metrics.height()+2);
 }
 
 void ViewObject::InsertRow(int pos, Row* row)
@@ -103,6 +112,12 @@ QVariant ViewObject::GetData(int row, int column, int role)
     if (role==Qt::DisplayRole) {
       return QVariant(QString(rows_[row].second.GetOneLetterCode(column - 1)));
     }
+    if (role==Qt::FontRole){
+      return QVariant(font_);
+    }
+    if (role==Qt::SizeHintRole){
+      return QVariant(default_size_);
+    }
   }
   return QVariant();
 }
diff --git a/modules/gui/src/sequence/view_object.hh b/modules/gui/src/sequence/view_object.hh
index e3d4dcc5a..d8ae32802 100644
--- a/modules/gui/src/sequence/view_object.hh
+++ b/modules/gui/src/sequence/view_object.hh
@@ -26,6 +26,8 @@
 #include <QObject>
 #include <QPair>
 #include <QList>
+#include <QFont>
+#include <QSize>
 
 #include <ost/seq/sequence_list.hh>
 
@@ -62,8 +64,11 @@ public:
 
 
 private:
+  void Init();
   QString name_;
   QList<QPair<Row*, seq::SequenceHandle> > rows_;
+  QFont font_;
+  QSize default_size_;
 };
 
 
-- 
GitLab