X-Git-Url: http://woldlab.caltech.edu/gitweb/?a=blobdiff_plain;f=qui%2Fseqbrowser%2FSequenceBrowser.cpp;h=4e1fbcd74421572b0b587bbe5fd1fc508b33f141;hb=a4afd5d6682accf2e2d0f414fb2e16813786eff3;hp=d781a3333888fe2250e30280f2cfa3f554214a6d;hpb=97c29e658fd0be149674442a81337407e1d0ff73;p=mussa.git diff --git a/qui/seqbrowser/SequenceBrowser.cpp b/qui/seqbrowser/SequenceBrowser.cpp index d781a33..4e1fbcd 100644 --- a/qui/seqbrowser/SequenceBrowser.cpp +++ b/qui/seqbrowser/SequenceBrowser.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -20,13 +21,35 @@ using namespace std; SequenceBrowser::SequenceBrowser(QWidget *parent) : QGLWidget(parent), rubberBand(0), - popupMenu(new QMenu(this)), - copySelectedSequenceAsFastaAction(new QAction(tr("&Copy as Fasta"), this)) + popupMenu(0), + copySelectedSequenceAsFastaAction(0), + copySelectedSequenceAsStringAction(0), + editSequencePropertiesAction(0), + clearSelectionAction(0) { + popupMenu = new QMenu(this); + copySelectedSequenceAsFastaAction = new QAction(tr("&Copy as Fasta"), this); connect(copySelectedSequenceAsFastaAction, SIGNAL(triggered()), this, SLOT(copySelectedSequenceAsFasta())); - copySelectedSequenceAsFastaAction->setShortcut(Qt::CTRL | Qt::Key_C); popupMenu->addAction(copySelectedSequenceAsFastaAction); + + copySelectedSequenceAsStringAction = new QAction(tr("&Copy Sequence"), this); + copySelectedSequenceAsStringAction->setShortcut(Qt::CTRL | Qt::Key_C); + connect(copySelectedSequenceAsStringAction, SIGNAL(triggered()), + this, SLOT(copySelectedSequenceAsString())); + popupMenu->addAction(copySelectedSequenceAsStringAction); + + // connect edit properties action + editSequencePropertiesAction = new QAction(tr("Sequence &Properties"), this); + connect(editSequencePropertiesAction, SIGNAL(triggered()), + this, SLOT(editSequenceProperties())); + + clearSelectionAction = new QAction(tr("Clear Selection"), this); + clearSelectionAction->setShortcut(Qt::Key_Escape); + connect(clearSelectionAction, SIGNAL(triggered()), + this, SLOT(clearSelection())); + this->addAction(clearSelectionAction); + } SequenceBrowser::SequenceBrowser(const SequenceBrowser& sb, QWidget *parent) @@ -34,7 +57,10 @@ SequenceBrowser::SequenceBrowser(const SequenceBrowser& sb, QWidget *parent) GlSeqBrowser(sb), rubberBand(sb.rubberBand), popupMenu(sb.popupMenu), - copySelectedSequenceAsFastaAction(sb.copySelectedSequenceAsFastaAction) + copySelectedSequenceAsFastaAction(sb.copySelectedSequenceAsFastaAction), + copySelectedSequenceAsStringAction(sb.copySelectedSequenceAsStringAction), + editSequencePropertiesAction(sb.editSequencePropertiesAction), + clearSelectionAction(sb.clearSelectionAction) { resize(sb.width(), sb.height()); setZoom(sb.zoom()); @@ -51,11 +77,19 @@ QAction *SequenceBrowser::getCopySelectedSequenceAsFastaAction() return copySelectedSequenceAsFastaAction; } +QAction *SequenceBrowser::getCopySelectedSequenceAsStringAction() +{ + return copySelectedSequenceAsStringAction; +} + +QAction *SequenceBrowser::getEditSequencePropertiesAction() +{ + return editSequencePropertiesAction; +} QSize SequenceBrowser::sizeHint() const { - //return QSize((int)GlSeqBrowser::viewportHeight(), (int)GlSeqBrowser::viewportWidth()); - return QSize(600, 400); + return QSize(viewportPixelWidth(), viewportPixelHeight()); } void SequenceBrowser::setViewportCenter(float x) @@ -101,13 +135,25 @@ void SequenceBrowser::copySelectedSequenceAsFasta() { // get fasta data std::string buffer; - copySelectedTracksAsFasta(buffer); + size_t base_pairs_copied = copySelectedTracksAsFasta(buffer); // get reference to clipboard QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(buffer.c_str()); + emit basepairsCopied(base_pairs_copied); } +void SequenceBrowser::copySelectedSequenceAsString() +{ + // get fasta data + std::string buffer; + size_t base_pairs_copied = copySelectedTracksAsString(buffer); + + // get reference to clipboard + QClipboard *clipboard = QApplication::clipboard(); + clipboard->setText(buffer.c_str()); + emit basepairsCopied(base_pairs_copied); +} void SequenceBrowser::clear() { @@ -120,6 +166,20 @@ void SequenceBrowser::displayContextMenu(const QPoint& point) popupMenu->popup(point); } +void SequenceBrowser::editSequenceProperties() +{ + // if there's a previous window, disconnect its signal + if (properties) { + disconnect(properties.get(), SIGNAL(propertiesChanged()), + this, SLOT(updateGL())); + } + PropertiesWindowRef new_properties(new PropertiesWindow(track_container)); + properties = new_properties; + connect(properties.get(), SIGNAL(propertiesChanged()), + this, SLOT(updateGL())); + properties->show(); +} + void SequenceBrowser::push_sequence(boost::shared_ptr s) { GlSeqBrowser::push_sequence(s); @@ -155,10 +215,10 @@ void SequenceBrowser::mousePressEvent( QMouseEvent *e) switch(e->button()) { case Qt::LeftButton: startSelecting(e); - break; - case Qt::RightButton: + e->accept(); break; default: + e->ignore(); break; } } @@ -167,6 +227,9 @@ void SequenceBrowser::mouseMoveEvent( QMouseEvent *e ) { if (rubberBand and rubberBand->isVisible()) { rubberBand->setGeometry(QRect(bandOrigin, e->pos()).normalized()); + e->accept(); + } else { + e->ignore(); } } @@ -186,9 +249,11 @@ void SequenceBrowser::mouseReleaseEvent( QMouseEvent *e) } break; default: + e->ignore(); + return; break; } - + e->accept(); } void SequenceBrowser::startSelecting(QMouseEvent *e) @@ -215,3 +280,28 @@ void SequenceBrowser::stopSelecting(QMouseEvent *e) selectedCanvasRegion = r; } } + +void SequenceBrowser::wheelEvent(QWheelEvent *e) +{ + e->accept(); + double cur_zoom = GlSeqBrowser::zoom(); + + // Normalize so one turn of the mouse wheel + // is equal to 1 step. + const int normalize_tick = 120; + // arbitrary scaling factor that seems to "work" + const int scaling = 50; + int num_steps = e->delta() / normalize_tick; + + cur_zoom = pow(10, log10(cur_zoom) - ((double)num_steps/scaling)); + emit mouseWheelZoom(cur_zoom); +} + +void SequenceBrowser::clearSelection() +{ + GlSeqBrowser::clearSelection(); + if (rubberBand and rubberBand->isVisible()) { + rubberBand->hide(); + } + updateGL(); +}