From 0ebf9b4ac9d7ba59515ba1d7e85565175a4ca6b4 Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Wed, 2 Jun 2010 11:51:57 +0000 Subject: [PATCH] New SequenceViewer, export some convenience methods git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2315 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- modules/gui/pymod/export_sequence_viewerV2.cc | 58 +++++++++++++++++++ modules/gui/src/sequence/sequence_model.cc | 42 +++++++++++++- modules/gui/src/sequence/sequence_model.hh | 8 ++- modules/gui/src/sequence/sequence_viewer.cc | 26 +++++++++ modules/gui/src/sequence/sequence_viewer.hh | 8 +++ 5 files changed, 138 insertions(+), 4 deletions(-) diff --git a/modules/gui/pymod/export_sequence_viewerV2.cc b/modules/gui/pymod/export_sequence_viewerV2.cc index 4731c1cac..67eebd8ee 100644 --- a/modules/gui/pymod/export_sequence_viewerV2.cc +++ b/modules/gui/pymod/export_sequence_viewerV2.cc @@ -16,7 +16,10 @@ // along with this library; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA //------------------------------------------------------------------------------ +#include <vector> + #include <boost/python.hpp> +#include <boost/python/suite/indexing/vector_indexing_suite.hpp> #include <ost/gui/sequence/sequence_viewer.hh> @@ -43,6 +46,51 @@ void change_display_mode_c(SequenceViewerV2* seq_viewer, const seq::AlignmentHan seq_viewer->ChangeDisplayMode(alignment, mode); } +void get_current_display_mode_a(SequenceViewerV2* seq_viewer) +{ + seq_viewer->GetCurrentDisplayMode(); +} + +void get_current_display_mode_b(SequenceViewerV2* seq_viewer, const gfx::EntityP& entity) +{ + seq_viewer->GetCurrentDisplayMode(entity); +} + +void get_current_display_mode_c(SequenceViewerV2* seq_viewer, const seq::AlignmentHandle& alignment) +{ + seq_viewer->GetCurrentDisplayMode(alignment); +} + +std::vector<QString> get_display_modes_a(SequenceViewerV2* seq_viewer) +{ + std::vector<QString> modes; + const QStringList& list = seq_viewer->GetDisplayModes(); + for (int i=0; i<list.size(); i++){ + modes.push_back(list.at(i)); + } + return modes; +} + +std::vector<QString> get_display_modes_b(SequenceViewerV2* seq_viewer, const gfx::EntityP& entity) +{ + std::vector<QString> modes; + const QStringList& list = seq_viewer->GetDisplayModes(entity); + for (int i=0; i<list.size(); i++){ + modes.push_back(list.at(i)); + } + return modes; +} + +std::vector<QString> get_display_modes_c(SequenceViewerV2* seq_viewer, const seq::AlignmentHandle& alignment) +{ + std::vector<QString> modes; + const QStringList& list = seq_viewer->GetDisplayModes(alignment); + for (int i=0; i<list.size(); i++){ + modes.push_back(list.at(i)); + } + return modes; +} + } @@ -53,11 +101,21 @@ void export_SequenceViewerV2() .def("Hide", &SequenceViewerV2::hide) .def("AddAlignment", &SequenceViewerV2::AddAlignment) .def("RemoveAlignment", &SequenceViewerV2::RemoveAlignment) + .def("GetDisplayModes", &get_display_modes_a) + .def("GetDisplayModes", &get_display_modes_b) + .def("GetDisplayModes", &get_display_modes_c) + .def("GetCurrentDisplayMode", &get_current_display_mode_a) + .def("GetCurrentDisplayMode", &get_current_display_mode_b) + .def("GetCurrentDisplayMode", &get_current_display_mode_c) .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>) ; + + class_<std::vector<QString> >("QStringList", init<>()) + .def(vector_indexing_suite<std::vector<QString>, true >()) + ; } diff --git a/modules/gui/src/sequence/sequence_model.cc b/modules/gui/src/sequence/sequence_model.cc index f5eb3fe14..1191e7ac5 100644 --- a/modules/gui/src/sequence/sequence_model.cc +++ b/modules/gui/src/sequence/sequence_model.cc @@ -294,7 +294,29 @@ void SequenceModel::DoubleClicked(const QModelIndex& index) } } -const QStringList& SequenceModel::GetDisplayModes(gfx::EntityP& entity) +const QStringList& SequenceModel::GetDisplayModes() +{ + display_modes_.clear(); + bool removed = false; + for (int i = 0; i<objects_.size(); i++){ + const QStringList& list = objects_[i]->GetDisplayModes(); + for(int j=0; j<list.size(); j++){ + if(i = 0){ + display_modes_.append(list.at(i)); + } + else if (!display_modes_.contains(list.at(i))){ + display_modes_.removeAll(list.at(i)); + removed = true; + } + } + } + if(removed){ + display_modes_.insert(0," "); + } + return display_modes_; +} + +const QStringList& SequenceModel::GetDisplayModes(const gfx::EntityP& entity) { BaseViewObject* item = this->GetItem(entity); if(item){ @@ -316,7 +338,23 @@ const QStringList& SequenceModel::GetDisplayModes(const seq::AlignmentHandle& al } } -const QString& SequenceModel::GetCurrentDisplayMode(gfx::EntityP& entity) +const QString& SequenceModel::GetCurrentDisplayMode() +{ + current_display_mode_.clear(); + for (int i = 0; i<objects_.size(); i++){ + const QString& mode = objects_[i]->GetCurrentDisplayMode(); + if(current_display_mode_.isEmpty()){ + current_display_mode_ = mode; + } + else if(current_display_mode_ != mode){ + current_display_mode_ = " "; + break; + } + } + return current_display_mode_; +} + +const QString& SequenceModel::GetCurrentDisplayMode(const gfx::EntityP& entity) { BaseViewObject* item = this->GetItem(entity); if(item){ diff --git a/modules/gui/src/sequence/sequence_model.hh b/modules/gui/src/sequence/sequence_model.hh index 1cd719ba7..d0afbbc4d 100644 --- a/modules/gui/src/sequence/sequence_model.hh +++ b/modules/gui/src/sequence/sequence_model.hh @@ -61,9 +61,11 @@ public: int GetGlobalRow(BaseViewObject* obj, int row) const; - const QStringList& GetDisplayModes(gfx::EntityP& entity); + const QStringList& GetDisplayModes(); + const QStringList& GetDisplayModes(const gfx::EntityP& entity); const QStringList& GetDisplayModes(const seq::AlignmentHandle& alignment); - const QString& GetCurrentDisplayMode(gfx::EntityP& entity); + const QString& GetCurrentDisplayMode(); + const QString& GetCurrentDisplayMode(const gfx::EntityP& entity); const QString& GetCurrentDisplayMode(const seq::AlignmentHandle& alignment); void SetDisplayMode(const QString& mode); void SetDisplayMode(const gfx::EntityP& entity, const QString& mode); @@ -101,6 +103,8 @@ private: PainterList empty_painter_list_; QString empty_string_; QStringList empty_string_list_; + QStringList display_modes_; + QString current_display_mode_; }; diff --git a/modules/gui/src/sequence/sequence_viewer.cc b/modules/gui/src/sequence/sequence_viewer.cc index 3eafc093f..19f6613d8 100644 --- a/modules/gui/src/sequence/sequence_viewer.cc +++ b/modules/gui/src/sequence/sequence_viewer.cc @@ -284,6 +284,32 @@ void SequenceViewerV2::SelectList(const QModelIndexList& list) } } +const QStringList& SequenceViewerV2::GetDisplayModes() +{ + return model_->GetDisplayModes(); +} +const QStringList& SequenceViewerV2::GetDisplayModes(const seq::AlignmentHandle& alignment) +{ + return model_->GetDisplayModes(alignment); +} +const QStringList& SequenceViewerV2::GetDisplayModes(const gfx::EntityP& entity) +{ + return model_->GetDisplayModes(entity); +} + +const QString& SequenceViewerV2::GetCurrentDisplayMode() +{ + return model_->GetCurrentDisplayMode(); +} +const QString& SequenceViewerV2::GetCurrentDisplayMode(const seq::AlignmentHandle& alignment) +{ + return model_->GetCurrentDisplayMode(alignment); +} +const QString& SequenceViewerV2::GetCurrentDisplayMode(const gfx::EntityP& entity) +{ + return model_->GetCurrentDisplayMode(entity); +} + void SequenceViewerV2::ChangeDisplayMode(const QString& string) { model_->SetDisplayMode(string); diff --git a/modules/gui/src/sequence/sequence_viewer.hh b/modules/gui/src/sequence/sequence_viewer.hh index 1137697e4..d5684fa5b 100644 --- a/modules/gui/src/sequence/sequence_viewer.hh +++ b/modules/gui/src/sequence/sequence_viewer.hh @@ -57,6 +57,14 @@ public: virtual bool Restore(const QString&){return true;}; virtual bool Save(const QString&){return true;}; + virtual const QStringList& GetDisplayModes(); + virtual const QStringList& GetDisplayModes(const seq::AlignmentHandle& alignment); + virtual const QStringList& GetDisplayModes(const gfx::EntityP& entity); + + virtual const QString& GetCurrentDisplayMode(); + virtual const QString& GetCurrentDisplayMode(const seq::AlignmentHandle& alignment); + virtual const QString& GetCurrentDisplayMode(const gfx::EntityP& entity); + public slots: void ChangeDisplayMode(const QString&); void ChangeDisplayMode(const seq::AlignmentHandle&, const QString&); -- GitLab