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 QHBoxLayout *hlayout = new QHBoxLayout;
26 hlayout->addWidget(&left_sidebar, 0);
27 hlayout->addWidget(&scrollable_browser, 1);
28 hlayout->addWidget(&right_sidebar, 0);
31 // update position values when something in the SequenceBrowser changes
32 connect(&scrollable_browser.browser(), SIGNAL(viewportChanged()),
33 this, SLOT(updatePosition()));
36 void SequenceBrowserWidget::clear()
38 converted_sequences.clear();
39 scrollable_browser.browser().clear();
41 right_sidebar.clear();
44 QMenu &SequenceBrowserWidget::getPopupMenu()
46 return scrollable_browser.browser().getPopupMenu();
49 QAction &SequenceBrowserWidget::getCopySelectedSequenceAsFastaAction()
51 return scrollable_browser.browser().getCopySelectedSequenceAsFastaAction();
55 void SequenceBrowserWidget::copySelectedSequenceAsFasta()
57 scrollable_browser.browser().copySelectedSequenceAsFasta();
60 void SequenceBrowserWidget::copySelectedTracksAsSeqLocation(
61 std::list<SequenceLocation>& locations
64 scrollable_browser.browser().copySelectedTracksAsSeqLocation(locations);
67 void SequenceBrowserWidget::setSequences(
68 const std::vector< boost::shared_ptr<Sequence> >& sequences,
69 boost::shared_ptr<AnnotationColors> cm)
71 SequenceBrowser& browser = scrollable_browser.browser();
73 for(Mussa::vector_sequence_type::const_iterator seq_i = sequences.begin();
74 seq_i != sequences.end();
77 boost::shared_ptr<GlSequence> gs(new GlSequence(*seq_i, cm));
78 converted_sequences.push_back(*gs);
79 browser.push_sequence(*gs);
81 left_sidebar.setSequences(converted_sequences);
82 right_sidebar.setSequences(converted_sequences);
86 void SequenceBrowserWidget::setSequences(std::vector<GlSequence>& sequences)
88 SequenceBrowser& browser = scrollable_browser.browser();
90 for(vector<GlSequence>::iterator seq_i = sequences.begin();
91 seq_i != sequences.end();
94 browser.push_sequence(*seq_i);
96 left_sidebar.setSequences(sequences);
97 right_sidebar.setSequences(sequences);
101 const vector<GlSequence>& SequenceBrowserWidget::sequences() const
103 return scrollable_browser.browser().sequences();
106 void SequenceBrowserWidget::clear_links()
108 scrollable_browser.browser().clear_links();
111 void SequenceBrowserWidget::link(const std::vector<int>& path,
112 const std::vector<bool>& isRC,
115 scrollable_browser.browser().link(path, isRC, length);
116 scrollable_browser.browser().update();
119 const std::set<int> SequenceBrowserWidget::selectedPaths() const
121 return scrollable_browser.browser().selectedPaths();
124 void SequenceBrowserWidget::centerOnPath(const vector<int>& paths)
126 scrollable_browser.browser().centerOnPath(paths);
130 /* This could theoretically be pushed down to some set
131 * of signals and slots connecting SequenceDescriptions and
132 * some signal emitted by the browser's viewportChanged code
133 * but evertime I tried to figure it out, I got confused about
134 * how the descriptions in one of the sidebars was supposed to know
135 * if it was mapping the rightbase or the leftbase.
136 * And so though this could be better the typical use cases
137 * can just talk to the SequenceBrowserWidget for rendering
140 void SequenceBrowserWidget::updatePosition()
142 const SequenceBrowser& browser = scrollable_browser.browser();
143 const vector<GlSequence> &sequences = browser.sequences();
144 vector<SequenceDescription *> left = left_sidebar.descriptions;
145 vector<SequenceDescription *> right = right_sidebar.descriptions;
146 for(size_t i = 0; i != sequences.size() and i != right.size(); ++i)
148 left[i]->setPosition(sequences[i].leftbase(browser.viewportLeft()));
149 right[i]->setPosition(sequences[i].rightbase(browser.viewportRight()));
151 scrollable_browser.browser().update();
152 scrollable_browser.updateScrollBar();
155 void SequenceBrowserWidget::promptSaveBrowserPixmap()
158 size = scrollable_browser.browser().size();
160 ImageSaveDialog imageSaveDialog(&scrollable_browser.browser(), this);
161 imageSaveDialog.setSize(size.width(), size.height());
162 imageSaveDialog.exec();
165 double SequenceBrowserWidget::zoom()
167 return scrollable_browser.browser().zoom();
170 double SequenceBrowserWidget::zoomOut()
172 double zoom_level = scrollable_browser.browser().zoomOut();
173 scrollable_browser.updateScrollBar();
177 double SequenceBrowserWidget::zoomToSequence()
179 double zoom_level = scrollable_browser.browser().zoomToSequence();
180 scrollable_browser.updateScrollBar();
184 void SequenceBrowserWidget::setZoom(double z)
186 scrollable_browser.browser().setZoom(z);
189 void SequenceBrowserWidget::update()
192 scrollable_browser.browser().update();