SequenceBrowser::SequenceBrowser(QWidget *parent)
: QGLWidget(parent),
rubberBand(0),
- drawingBand(false)
+ popupMenu(this),
+ copySelectedSequenceAsFastaAction(tr("&Copy as Fasta"), this)
{
+ connect(©SelectedSequenceAsFastaAction, SIGNAL(triggered()),
+ this, SLOT(copySelectedSequenceAsFasta()));
+ popupMenu.addAction(©SelectedSequenceAsFastaAction);
}
QSize SequenceBrowser::sizeHint() const
emit tracksChanged();
}
+void SequenceBrowser::displayContextMenu(const QPoint& point)
+{
+ popupMenu.popup(point);
+}
+
void SequenceBrowser::push_sequence(const Sequence &s)
{
GlSeqBrowser::push_sequence(s);
void SequenceBrowser::mousePressEvent( QMouseEvent *e)
{
- drawingBand = true;
-
- selectedMode = false;
- bandOrigin = e->pos();
- if (!rubberBand)
- rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
-
- rubberBand->setGeometry(QRect(bandOrigin, QSize()));
- rubberBand->show();
+ switch(e->button()) {
+ case Qt::LeftButton:
+ startSelecting(e);
+ break;
+ case Qt::RightButton:
+ break;
+ default:
+ break;
+ }
}
-void SequenceBrowser::mouseMoveEvent( QMouseEvent *e)
+void SequenceBrowser::mouseMoveEvent( QMouseEvent *e )
{
- if (drawingBand)
+ if (rubberBand and rubberBand->isVisible()) {
rubberBand->setGeometry(QRect(bandOrigin, e->pos()).normalized());
+ }
}
void SequenceBrowser::mouseReleaseEvent( QMouseEvent *e)
{
- drawingBand = false;
- if (rubberBand != 0) {
+ switch(e->button()) {
+ case Qt::LeftButton:
+ stopSelecting(e);
+ break;
+ case Qt::RightButton:
+ // ok so selectedMode and drawing mode should probably be combinded
+ // into a single state variable.
+ if (rubberBand and
+ not rubberBand->isVisible() and
+ selectedCanvasRegion.contains(e->pos())) {
+ displayContextMenu(e->globalPos());
+ }
+ break;
+ default:
+ break;
+ }
+
+}
+
+void SequenceBrowser::startSelecting(QMouseEvent *e)
+{
+ if (!rubberBand)
+ rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
+
+ if (not rubberBand->isVisible()) {
+ bandOrigin = e->pos();
+ rubberBand->setGeometry(QRect(bandOrigin, QSize()));
+ rubberBand->show();
+ }
+}
+
+void SequenceBrowser::stopSelecting(QMouseEvent *e)
+{
+ if (rubberBand and rubberBand->isVisible()) {
rubberBand->hide();
+ selectedMode = false;
QRect r = QRect(bandOrigin, e->pos()).normalized();
bandOrigin = r.topLeft();
selectRegion(r.top(), r.left(), r.bottom(), r.right());
+ selectedCanvasRegion = r;
}
}
#ifndef _PATHSCENE_H_
#define _PATHSCENE_H_
+#include <QAction>
#include <QGLWidget>
+#include <QMenu>
#include <QRectF>
#include <QPoint>
-#include <vector>
+#include <vector>
#include <set>
#include "alg/mussa.hpp"
public slots:
void copySelectedSequenceAsFasta();
+ void displayContextMenu(const QPoint &p);
void setClipPlane(int z);
//! set the center of the current viewport
void setViewportCenter(float x);
void tracksChanged();
void viewportChanged();
-private:
+protected:
void initializeGL();
void resizeGL(int height, int width);
void paintGL();
//! \defgroup Selection
+ /* \@{ */
QRubberBand *rubberBand;
QPoint bandOrigin;
- bool drawingBand;
+ QRect selectedDisplayRegion;
+ QRect selectedCanvasRegion;
void mousePressEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
+
+ void startSelecting(QMouseEvent *);
+ void stopSelecting(QMouseEvent *);
+ /* \@} */
+
+ QMenu popupMenu;
+ QAction copySelectedSequenceAsFastaAction;
};
#endif