1 #include <QApplication>
15 #include "qui/seqbrowser/SequenceBrowser.hpp"
16 #include "mussa_exceptions.hpp"
20 SequenceBrowser::SequenceBrowser(QWidget *parent)
24 copySelectedSequenceAsFastaAction(tr("&Copy as Fasta"), this)
26 connect(©SelectedSequenceAsFastaAction, SIGNAL(triggered()),
27 this, SLOT(copySelectedSequenceAsFasta()));
28 copySelectedSequenceAsFastaAction.setShortcut(Qt::CTRL | Qt::Key_C);
29 popupMenu.addAction(©SelectedSequenceAsFastaAction);
32 QMenu &SequenceBrowser::getPopupMenu()
37 QAction &SequenceBrowser::getCopySelectedSequenceAsFastaAction()
39 return copySelectedSequenceAsFastaAction;
43 QSize SequenceBrowser::sizeHint() const
45 //return QSize((int)GlSeqBrowser::viewportHeight(), (int)GlSeqBrowser::viewportWidth());
46 return QSize(600, 400);
49 void SequenceBrowser::setViewportCenter(float x)
51 const float epsilon = 1e-10;
52 float center = GlSeqBrowser::viewportCenter();
53 float difference = fabsf(x - center);
54 float abs_x = fabsf(x);
55 center = fabsf(center);
57 // the difference < epsilon * val is one of the recommended tests
58 // for float equality.
59 // of course since we're looking for not equals, we need to toss a
60 // not at the beginning
61 if (not (difference < epsilon * abs_x or difference < epsilon * center))
63 GlSeqBrowser::setViewportCenter(x);
64 emit viewportChanged();
69 void SequenceBrowser::setZoom(double new_zoom)
71 if (new_zoom != GlSeqBrowser::zoom()) {
72 GlSeqBrowser::setZoom(new_zoom);
73 emit viewportChanged();
78 void SequenceBrowser::setClipPlane(int )
81 if (clipZ != (double) newZ){
82 clipZ = (double) newZ;
88 void SequenceBrowser::copySelectedSequenceAsFasta()
92 copySelectedTracksAsFasta(buffer);
94 // get reference to clipboard
95 QClipboard *clipboard = QApplication::clipboard();
96 clipboard->setText(buffer.c_str());
100 void SequenceBrowser::clear()
102 GlSeqBrowser::clear();
103 emit tracksChanged();
106 void SequenceBrowser::displayContextMenu(const QPoint& point)
108 popupMenu.popup(point);
111 void SequenceBrowser::push_sequence(boost::shared_ptr<Sequence> s)
113 GlSeqBrowser::push_sequence(s);
114 emit tracksChanged();
117 void SequenceBrowser::push_sequence(boost::shared_ptr<GlSequence> gs)
119 GlSeqBrowser::push_sequence(gs);
120 emit tracksChanged();
125 void SequenceBrowser::initializeGL()
127 GlSeqBrowser::initializeGL();
130 void SequenceBrowser::resizeGL(int width, int height)
132 GlSeqBrowser::resizeGL(width, height);
133 emit viewportChanged();
136 void SequenceBrowser::paintGL()
138 GlSeqBrowser::paintGL();
141 void SequenceBrowser::mousePressEvent( QMouseEvent *e)
143 switch(e->button()) {
147 case Qt::RightButton:
154 void SequenceBrowser::mouseMoveEvent( QMouseEvent *e )
156 if (rubberBand and rubberBand->isVisible()) {
157 rubberBand->setGeometry(QRect(bandOrigin, e->pos()).normalized());
161 void SequenceBrowser::mouseReleaseEvent( QMouseEvent *e)
163 switch(e->button()) {
167 case Qt::RightButton:
168 // ok so selectedMode and drawing mode should probably be combinded
169 // into a single state variable.
171 not rubberBand->isVisible() and
172 selectedCanvasRegion.contains(e->pos())) {
173 displayContextMenu(e->globalPos());
182 void SequenceBrowser::startSelecting(QMouseEvent *e)
185 rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
187 if (not rubberBand->isVisible()) {
188 bandOrigin = e->pos();
189 rubberBand->setGeometry(QRect(bandOrigin, QSize()));
194 void SequenceBrowser::stopSelecting(QMouseEvent *e)
196 if (rubberBand and rubberBand->isVisible()) {
198 selectedMode = false;
199 QRect r = QRect(bandOrigin, e->pos()).normalized();
200 bandOrigin = r.topLeft();
202 selectRegion(r.top(), r.left(), r.bottom(), r.right());
203 selectedCanvasRegion = r;