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 popupMenu.addAction(©SelectedSequenceAsFastaAction);
31 QSize SequenceBrowser::sizeHint() const
33 //return QSize((int)GlSeqBrowser::viewportHeight(), (int)GlSeqBrowser::viewportWidth());
34 return QSize(600, 400);
37 void SequenceBrowser::setViewportCenter(float x)
39 const float epsilon = 1e-10;
40 float center = GlSeqBrowser::viewportCenter();
41 float difference = fabsf(x - center);
42 float abs_x = fabsf(x);
43 center = fabsf(center);
45 // the difference < epsilon * val is one of the recommended tests
46 // for float equality.
47 // of course since we're looking for not equals, we need to toss a
48 // not at the beginning
49 if (not (difference < epsilon * abs_x or difference < epsilon * center))
51 GlSeqBrowser::setViewportCenter(x);
52 emit viewportChanged();
57 void SequenceBrowser::setZoom(double new_zoom)
59 if (new_zoom != GlSeqBrowser::zoom()) {
60 GlSeqBrowser::setZoom(new_zoom);
61 emit viewportChanged();
66 void SequenceBrowser::setClipPlane(int )
69 if (clipZ != (double) newZ){
70 clipZ = (double) newZ;
76 void SequenceBrowser::copySelectedSequenceAsFasta()
80 copySelectedTracksAsFasta(buffer);
82 // get reference to clipboard
83 QClipboard *clipboard = QApplication::clipboard();
84 clipboard->setText(buffer.c_str());
88 void SequenceBrowser::clear()
90 GlSeqBrowser::clear();
94 void SequenceBrowser::displayContextMenu(const QPoint& point)
96 popupMenu.popup(point);
99 void SequenceBrowser::push_sequence(const Sequence &s)
101 GlSeqBrowser::push_sequence(s);
102 emit tracksChanged();
105 void SequenceBrowser::push_sequence(GlSequence &gs)
107 GlSeqBrowser::push_sequence(gs);
108 emit tracksChanged();
113 void SequenceBrowser::initializeGL()
115 GlSeqBrowser::initializeGL();
118 void SequenceBrowser::resizeGL(int width, int height)
120 GlSeqBrowser::resizeGL(width, height);
121 emit viewportChanged();
124 void SequenceBrowser::paintGL()
126 GlSeqBrowser::paintGL();
129 void SequenceBrowser::mousePressEvent( QMouseEvent *e)
131 switch(e->button()) {
135 case Qt::RightButton:
142 void SequenceBrowser::mouseMoveEvent( QMouseEvent *e )
144 if (rubberBand and rubberBand->isVisible()) {
145 rubberBand->setGeometry(QRect(bandOrigin, e->pos()).normalized());
149 void SequenceBrowser::mouseReleaseEvent( QMouseEvent *e)
151 switch(e->button()) {
155 case Qt::RightButton:
156 // ok so selectedMode and drawing mode should probably be combinded
157 // into a single state variable.
159 not rubberBand->isVisible() and
160 selectedCanvasRegion.contains(e->pos())) {
161 displayContextMenu(e->globalPos());
170 void SequenceBrowser::startSelecting(QMouseEvent *e)
173 rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
175 if (not rubberBand->isVisible()) {
176 bandOrigin = e->pos();
177 rubberBand->setGeometry(QRect(bandOrigin, QSize()));
182 void SequenceBrowser::stopSelecting(QMouseEvent *e)
184 if (rubberBand and rubberBand->isVisible()) {
186 selectedMode = false;
187 QRect r = QRect(bandOrigin, e->pos()).normalized();
188 bandOrigin = r.topLeft();
190 selectRegion(r.top(), r.left(), r.bottom(), r.right());
191 selectedCanvasRegion = r;