#include <QFileDialog>
#include <QMessageBox>
#include <QMouseEvent>
+#include <QWheelEvent>
#include <QRubberBand>
#include <QRect>
#include <QString>
SequenceBrowser::SequenceBrowser(QWidget *parent)
: QGLWidget(parent),
rubberBand(0),
- popupMenu(new QMenu(this)),
- copySelectedSequenceAsFastaAction(new QAction(tr("&Copy as Fasta"), this)),
- copySelectedSequenceAsStringAction(new QAction(tr("&Copy Sequence"), 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()));
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)
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());
return copySelectedSequenceAsStringAction;
}
+QAction *SequenceBrowser::getEditSequencePropertiesAction()
+{
+ return editSequencePropertiesAction;
+}
+
QSize SequenceBrowser::sizeHint() const
{
return QSize(viewportPixelWidth(), viewportPixelHeight());
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<Sequence> s)
{
GlSeqBrowser::push_sequence(s);
switch(e->button()) {
case Qt::LeftButton:
startSelecting(e);
- break;
- case Qt::RightButton:
+ e->accept();
break;
default:
+ e->ignore();
break;
}
}
{
if (rubberBand and rubberBand->isVisible()) {
rubberBand->setGeometry(QRect(bandOrigin, e->pos()).normalized());
+ e->accept();
+ } else {
+ e->ignore();
}
}
}
break;
default:
+ e->ignore();
+ return;
break;
}
-
+ e->accept();
}
void SequenceBrowser::startSelecting(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();
+}