center on path
[mussa.git] / qui / MussaAlignedWindow.cpp
1 #include <list>
2 #include <sstream>
3
4 #include <QVBoxLayout>
5
6 #include "qui/MussaAlignedWindow.hpp"
7
8
9 using namespace std;
10
11 MussaAlignedWindow::MussaAlignedWindow(Mussa& m, 
12                                        const set<int>& sel_paths, 
13                                        QWidget *parent)
14   : QWidget(parent),
15     analysis(m)//,
16     //selected_paths(sel_paths)
17     
18 {
19   browser.setSequences(analysis.sequences(), analysis.colorMapper());
20   setSelectedPaths(m, sel_paths);
21   setAlignment(0);
22
23   QVBoxLayout *layout = new QVBoxLayout;
24   layout->addWidget(&browser);
25   layout->addWidget(&status);
26   setLayout(layout);
27
28   ostringstream message;
29   message << "Selected " << selected_paths.size() << " paths";
30   status.showMessage(message.str().c_str(), 5000);
31 }
32
33
34 void MussaAlignedWindow::setSelectedPaths(Mussa &m, const set<int>& sel_paths)
35 {
36   // sets are sorted
37   set<int>::iterator sel_i = sel_paths.begin();
38   list<ExtendedConservedPath>::const_iterator path_i = m.paths().rpbegin();
39   list<ExtendedConservedPath>::const_iterator path_end = m.paths().rpend();
40   size_t path_size = m.paths().refined_pathz.size();
41   size_t pathid=0;
42
43   selected_paths.reserve(sel_paths.size());
44   while (pathid != path_size and sel_i != sel_paths.end())
45   {
46     assert (*sel_i >= 0);
47     size_t sel_pathid = (size_t)(*sel_i);
48     if (pathid == sel_pathid) {
49       cout << "found one " << *path_i << endl;
50       selected_paths.push_back(*path_i);
51       ++pathid;
52       ++path_i;
53       ++sel_i;
54     } else if (pathid < sel_pathid) {
55       ++pathid;
56       ++path_i;
57     } else if (pathid > sel_pathid) {
58       ++sel_i;
59     }
60   }
61 }
62
63 void MussaAlignedWindow::setAlignment(size_t alignment_index)
64 {
65   if (selected_paths.size() > 0) {
66     browser.centerOnPath(selected_paths[alignment_index].track_indexes);
67   }
68 }
69