From 2ec635aba2d248f193254abe5fdf6f0b0e8731ba Mon Sep 17 00:00:00 2001 From: Marco Biasini <marco.biasini@unibas.ch> Date: Wed, 9 Feb 2011 19:03:22 +0100 Subject: [PATCH] added convenience function to replace alignment in sequence viewer --- modules/gui/pymod/export_sequence_viewer.cc | 6 ++++-- modules/gui/src/sequence_viewer/sequence_model.cc | 11 +++++++++++ modules/gui/src/sequence_viewer/sequence_model.hh | 2 ++ modules/gui/src/sequence_viewer/sequence_viewer.cc | 14 ++++++++++++-- modules/gui/src/sequence_viewer/sequence_viewer.hh | 4 ++++ 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/modules/gui/pymod/export_sequence_viewer.cc b/modules/gui/pymod/export_sequence_viewer.cc index 268b4dd2b..20b56cf44 100644 --- a/modules/gui/pymod/export_sequence_viewer.cc +++ b/modules/gui/pymod/export_sequence_viewer.cc @@ -96,12 +96,14 @@ std::vector<String> get_display_modes_c(SequenceViewer* seq_viewer, const seq::A void export_SequenceViewer() { - class_<SequenceViewer, boost::noncopyable >("SequenceViewer",init<>()) - .def(init<bool, optional<QWidget*> >()) + class_<SequenceViewer, boost::noncopyable >("SequenceViewer") + .def(init<optional<bool, bool, const QString&, + QWidget*> >()) .def("Show", &SequenceViewer::show) .def("Hide", &SequenceViewer::hide) .def("AddEntity", &SequenceViewer::AddEntity) .def("RemoveEntity", &SequenceViewer::RemoveEntity) + .def("SetAlignment", &SequenceViewer::SetAlignment) .def("AddAlignment", &SequenceViewer::AddAlignment) .def("RemoveAlignment", &SequenceViewer::RemoveAlignment) .def("GetDisplayModes", &get_display_modes_a) diff --git a/modules/gui/src/sequence_viewer/sequence_model.cc b/modules/gui/src/sequence_viewer/sequence_model.cc index b8dc25766..985231540 100644 --- a/modules/gui/src/sequence_viewer/sequence_model.cc +++ b/modules/gui/src/sequence_viewer/sequence_model.cc @@ -208,6 +208,17 @@ void SequenceModel::EmitRowChanged(int row) this->index(row, this->columnCount()-1)); } +void SequenceModel::Clear() +{ + // remove everything but the title row. + this->beginRemoveRows(QModelIndex(), 1, this->rowCount()); + objects_.erase(objects_.begin()+1, objects_.end()); + this->endRemoveRows(); + this->beginRemoveColumns(QModelIndex(), 0, this->max_columns); + this->max_columns=0; + this->endRemoveColumns(); +} + QPair<seq::AlignmentHandle, int> SequenceModel::GetAlignmentForRow(int row) { QPair<int, BaseViewObject*> p=this->GetRowWithItem(row); diff --git a/modules/gui/src/sequence_viewer/sequence_model.hh b/modules/gui/src/sequence_viewer/sequence_model.hh index cb5e2d849..0da09222e 100644 --- a/modules/gui/src/sequence_viewer/sequence_model.hh +++ b/modules/gui/src/sequence_viewer/sequence_model.hh @@ -86,6 +86,8 @@ public: QPair<seq::AlignmentHandle, int> GetAlignmentForRow(int row); void EmitRowChanged(int row); + + void Clear(); public slots: void ZoomIn(); void ZoomOut(); diff --git a/modules/gui/src/sequence_viewer/sequence_viewer.cc b/modules/gui/src/sequence_viewer/sequence_viewer.cc index 5ad1dda2e..888a87597 100644 --- a/modules/gui/src/sequence_viewer/sequence_viewer.cc +++ b/modules/gui/src/sequence_viewer/sequence_viewer.cc @@ -77,11 +77,12 @@ struct GetNodesVisitor: public gfx::GfxNodeVisitor { }; SequenceViewer::SequenceViewer(bool stand_alone, bool observe_scene, + const QString& title, QWidget* parent): Widget(NULL,parent) { observe_scene_=observe_scene; model_ = new SequenceModel(this); - + this->setWindowTitle(title); QVBoxLayout* layout = new QVBoxLayout(this); layout->setMargin(0); layout->setSpacing(0); @@ -226,6 +227,12 @@ void SequenceViewer::AddAlignment(const seq::AlignmentHandle& alignment) } } +void SequenceViewer::SetAlignment(const seq::AlignmentHandle& alignment) +{ + model_->Clear(); + this->AddAlignment(alignment); +} + void SequenceViewer::RemoveAlignment(const seq::AlignmentHandle& alignment) { model_->RemoveAlignment(alignment); @@ -251,7 +258,10 @@ void SequenceViewer::SelectionModelChanged(const QItemSelection& sel, const QIte void SequenceViewer::SelectionChanged(const gfx::GfxObjP& o, const mol::EntityView& view) { - disconnect(seq_table_view_->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(SelectionModelChanged(const QItemSelection&, const QItemSelection&))); + disconnect(seq_table_view_->selectionModel(), + SIGNAL(selectionChanged(const QItemSelection&, + const QItemSelection&)), + this, SLOT(SelectionModelChanged(const QItemSelection&, const QItemSelection&))); gfx::EntityP entity=boost::dynamic_pointer_cast<gfx::Entity>(o); if(entity){ const QModelIndexList& list = model_->GetModelIndexes(entity, view); diff --git a/modules/gui/src/sequence_viewer/sequence_viewer.hh b/modules/gui/src/sequence_viewer/sequence_viewer.hh index 1f83cb7de..7fadb40db 100644 --- a/modules/gui/src/sequence_viewer/sequence_viewer.hh +++ b/modules/gui/src/sequence_viewer/sequence_viewer.hh @@ -54,6 +54,7 @@ class DLLEXPORT_OST_GUI SequenceViewer : public Widget, public gfx::SceneObserve Q_OBJECT public: SequenceViewer(bool stand_alone=true, bool observe_scene=false, + const QString& title="Sequence Viewer", QWidget* parent=NULL); ~SequenceViewer(); @@ -64,6 +65,9 @@ public: void SetObserveScene(bool flag) { observe_scene_=flag; } bool IsObservingScene() const { return observe_scene_; } virtual void AddAlignment(const seq::AlignmentHandle& alignment); + + void SetAlignment(const seq::AlignmentHandle& alignment); + virtual void RemoveAlignment(const seq::AlignmentHandle& alignment); virtual bool Restore(const QString&){ return true; }; -- GitLab