diff --git a/modules/gui/pymod/export_sequence_viewerV2.cc b/modules/gui/pymod/export_sequence_viewerV2.cc index 4731c1cacdebc24bb312901e94f96847bb1d7370..67eebd8eee27a43bc923b2c4440078f40fb84a4d 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 f5eb3fe14818eb93cba811ac699a65cba4404e39..1191e7ac5e9e478b08059700bd538a6e85a8516c 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 1cd719ba729315341c33d2328b01abe39f0e04f0..d0afbbc4d8d8f7d5ed192d9ee6cab239f753fbaf 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 3eafc093fe50af6f7ff5e7f35dad7ff9d7fbed96..19f6613d884c0317b21cf52ae189d65f8f932925 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 1137697e47c20f51c15edd9894fa241f6ceecff0..d5684fa5b956270fbf0396b1e38c994f029c887c 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&);