center on path
[mussa.git] / qui / MussaAlignedWindow.cpp
index bd647a58ea9baa2e893833d5c970112f298f1e51..28e5d1a347bef631197aafa9f980851719621744 100644 (file)
@@ -1,21 +1,69 @@
-#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);
+  }
 }