-#include "qui/MussaAlignedWindow.hpp"
+#include <list>
+#include <sstream>
#include <QVBoxLayout>
+#include "qui/MussaAlignedWindow.hpp"
+
+
using namespace std;
MussaAlignedWindow::MussaAlignedWindow(Mussa& m,
const set<int>& sel_paths,
QWidget *parent)
: QWidget(parent),
- analysis(m),
- selected_paths(sel_paths)
+ analysis(m)//,
+ //selected_paths(sel_paths)
{
browser.setSequences(analysis.sequences(), analysis.colorMapper());
+ setSelectedPaths(m, sel_paths);
+ setAlignment(0);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(&browser);
+ layout->addWidget(&status);
setLayout(layout);
+
+ ostringstream message;
+ message << "Selected " << selected_paths.size() << " paths";
+ status.showMessage(message.str().c_str(), 5000);
+}
+
+
+void MussaAlignedWindow::setSelectedPaths(Mussa &m, const set<int>& sel_paths)
+{
+ // sets are sorted
+ set<int>::iterator sel_i = sel_paths.begin();
+ list<ExtendedConservedPath>::const_iterator path_i = m.paths().rpbegin();
+ list<ExtendedConservedPath>::const_iterator path_end = m.paths().rpend();
+ size_t path_size = m.paths().refined_pathz.size();
+ size_t pathid=0;
+
+ selected_paths.reserve(sel_paths.size());
+ while (pathid != path_size and sel_i != sel_paths.end())
+ {
+ assert (*sel_i >= 0);
+ size_t sel_pathid = (size_t)(*sel_i);
+ if (pathid == sel_pathid) {
+ cout << "found one " << *path_i << endl;
+ selected_paths.push_back(*path_i);
+ ++pathid;
+ ++path_i;
+ ++sel_i;
+ } else if (pathid < sel_pathid) {
+ ++pathid;
+ ++path_i;
+ } else if (pathid > sel_pathid) {
+ ++sel_i;
+ }
+ }
+}
+
+void MussaAlignedWindow::setAlignment(size_t alignment_index)
+{
+ if (selected_paths.size() > 0) {
+ browser.centerOnPath(selected_paths[alignment_index].track_indexes);
+ }
}