render sequence correctly in mussa aligned window
[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   browser.zoomToSequence();
23
24   QVBoxLayout *layout = new QVBoxLayout;
25   layout->addWidget(&browser);
26   layout->addWidget(&status);
27   setLayout(layout);
28
29   ostringstream message;
30   message << "Selected " << selected_paths.size() << " paths";
31   status.showMessage(message.str().c_str(), 5000);
32 }
33
34
35 void MussaAlignedWindow::setSelectedPaths(Mussa &m, const set<int>& sel_paths)
36 {
37   // sets are sorted
38   set<int>::iterator sel_i = sel_paths.begin();
39   list<ExtendedConservedPath>::const_iterator path_i = m.paths().rpbegin();
40   list<ExtendedConservedPath>::const_iterator path_end = m.paths().rpend();
41   size_t path_size = m.paths().refined_pathz.size();
42   size_t pathid=0;
43
44   selected_paths.reserve(sel_paths.size());
45   while (pathid != path_size and sel_i != sel_paths.end())
46   {
47     assert (*sel_i >= 0);
48     size_t sel_pathid = (size_t)(*sel_i);
49     if (pathid == sel_pathid) {
50       cout << "found one " << *path_i << endl;
51       selected_paths.push_back(*path_i);
52       ++pathid;
53       ++path_i;
54       ++sel_i;
55     } else if (pathid < sel_pathid) {
56       ++pathid;
57       ++path_i;
58     } else if (pathid > sel_pathid) {
59       ++sel_i;
60     }
61   }
62 }
63
64 void MussaAlignedWindow::setAlignment(size_t alignment_index)
65 {
66   if (selected_paths.size() > 0) {
67     browser.centerOnPath(selected_paths[alignment_index].track_indexes);
68   }
69 }
70