10 #include "qui/seqbrowser/SequenceBrowserWidget.hpp"
11 #include "qui/seqbrowser/SequenceBrowser.hpp"
12 #include "qui/seqbrowser/ScrollableSequenceBrowser.hpp"
13 #include "qui/seqbrowser/SequenceDescription.hpp"
14 #include "qui/ImageSaveDialog.hpp"
16 #include "alg/glsequence.hpp"
21 SequenceBrowserWidget::SequenceBrowserWidget(QWidget *parent)
23 scrollable_browser(parent)
25 setOrientation(Qt::Horizontal);
27 addWidget(&left_sidebar);
28 addWidget(&scrollable_browser);
29 addWidget(&right_sidebar);
31 connect(&scrollable_browser.browser(), SIGNAL(viewportChanged()),
32 this, SLOT(updatePosition()));
35 void SequenceBrowserWidget::clear()
37 converted_sequences.clear();
38 scrollable_browser.browser().clear();
40 right_sidebar.clear();
43 void SequenceBrowserWidget::setSequences(const std::vector<Sequence>& sequences,
46 SequenceBrowser& browser = scrollable_browser.browser();
48 for(vector<Sequence>::const_iterator seq_i = sequences.begin();
49 seq_i != sequences.end();
52 GlSequence *gs= new GlSequence(*seq_i, cm);
53 converted_sequences.push_back(*gs);
54 browser.push_sequence(*gs);
56 left_sidebar.setSequences(converted_sequences);
57 right_sidebar.setSequences(converted_sequences);
61 void SequenceBrowserWidget::setSequences(std::vector<GlSequence>& sequences)
63 SequenceBrowser& browser = scrollable_browser.browser();
65 for(vector<GlSequence>::iterator seq_i = sequences.begin();
66 seq_i != sequences.end();
69 browser.push_sequence(*seq_i);
71 left_sidebar.setSequences(sequences);
72 right_sidebar.setSequences(sequences);
76 const vector<GlSequence>& SequenceBrowserWidget::sequences() const
78 return scrollable_browser.browser().sequences();
81 void SequenceBrowserWidget::clear_links()
83 scrollable_browser.browser().clear_links();
86 void SequenceBrowserWidget::link(const std::vector<int>& path,
87 const std::vector<bool>& isRC,
90 scrollable_browser.browser().link(path, isRC, length);
91 scrollable_browser.browser().update();
94 const std::set<int> SequenceBrowserWidget::selectedPaths() const
96 return scrollable_browser.browser().selectedPaths();
99 void SequenceBrowserWidget::centerOnPath(const vector<int>& paths)
101 scrollable_browser.browser().centerOnPath(paths);
105 /* This could theoretically be pushed down to some set
106 * of signals and slots connecting SequenceDescriptions and
107 * some signal emitted by the browser's viewportChanged code
108 * but evertime I tried to figure it out, I got confused about
109 * how the descriptions in one of the sidebars was supposed to know
110 * if it was mapping the rightbase or the leftbase.
111 * And so though this could be better the typical use cases
112 * can just talk to the SequenceBrowserWidget for rendering
115 void SequenceBrowserWidget::updatePosition()
117 const SequenceBrowser& browser = scrollable_browser.browser();
118 const vector<GlSequence> &sequences = browser.sequences();
119 vector<SequenceDescription *> left = left_sidebar.descriptions;
120 vector<SequenceDescription *> right = right_sidebar.descriptions;
121 for(size_t i = 0; i != sequences.size() and i != right.size(); ++i)
123 left[i]->setPosition(sequences[i].leftbase(browser.viewportLeft()));
124 right[i]->setPosition(sequences[i].rightbase(browser.viewportRight()));
126 scrollable_browser.updateScrollBar();
129 void SequenceBrowserWidget::promptSaveBrowserPixmap()
132 size = scrollable_browser.browser().size();
134 ImageSaveDialog imageSaveDialog(&scrollable_browser.browser(), this);
135 imageSaveDialog.setSize(size.width(), size.height());
136 int result = imageSaveDialog.exec();
137 cout << "Result: " << result << "\n";
140 int SequenceBrowserWidget::zoom()
142 return scrollable_browser.browser().zoom();
145 void SequenceBrowserWidget::zoomOut()
147 scrollable_browser.browser().zoomOut();
148 scrollable_browser.updateScrollBar();
151 void SequenceBrowserWidget::zoomToSequence()
153 scrollable_browser.browser().zoomToSequence();
154 scrollable_browser.updateScrollBar();
157 void SequenceBrowserWidget::setZoom(int z)
159 scrollable_browser.browser().setZoom(z);