diff --git a/modules/gui/pymod/export_sequence_viewer.cc b/modules/gui/pymod/export_sequence_viewer.cc index 268b4dd2b28d3779d9b5d2260c978f21cdb0c293..20b56cf44a2de1ec4485d589f5485b93911061c7 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 b8dc257669677f595000a3088ce57a01ccb9b7e6..9852315401e422d937ad56b65e5cc4f7eaf9bfee 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 cb5e2d849e5b92c5d1e48d0ec747a83a57f30bee..0da09222e2ac39ea13fdd408c9bbe91da7ffaeac 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 5ad1dda2e48a38595ef5ab1ae657f901bf2cba86..888a8759711f5972bc0578b0bd1ec01c09720c22 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 1f83cb7de4cd4a0f97c1007a4b6a605fda6781d9..7fadb40dbbc63a8bf5fd465745aacc2304a4c9bb 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; };