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