connect(zoom, SIGNAL(valueChanged(double)),
&browser, SLOT(setZoom(double)));
zoom->setValue(zoom_level);
+
+ // Mouse scroll wheel zooming!
+ connect(&browser, SIGNAL(mouseWheelZoom(double)),
+ zoom, SLOT(setValue(double)));
+
computeMatchLines();
setupMenus();
setupAlignmentMenus();
connect(zoom, SIGNAL(valueChanged(double)),
browser, SLOT(setZoom(double)));
mussaViewTB->addWidget(zoom);
+
+ // Mouse Wheel triggered zooming
+ connect(browser, SIGNAL(mouseWheelZoom(double)),
+ zoom, SLOT(setValue(double)));
// threshold range is set in updateAnalysis
connect(threshold, SIGNAL(thresholdChanged(int)),
#include <QFileDialog>
#include <QMessageBox>
#include <QMouseEvent>
+#include <QWheelEvent>
#include <QRubberBand>
#include <QRect>
#include <QString>
}
}
+void SequenceBrowser::wheelEvent(QWheelEvent *e)
+{
+ e->accept();
+ double cur_zoom = GlSeqBrowser::zoom();
+
+ // Normalize so one 15 degree turn of the mouse wheel
+ // is equal to 1 step.
+ int num_degrees = e->delta() / 8;
+ int num_steps = num_degrees / 15;
+
+ // Positive
+ if (num_steps >= 0)
+ {
+ // Invert number of steps because code was written
+ // thinking that adding a positve num_steps was zooming
+ // in, but because it's bp/pixel, it's actually zooming out.
+ // To get mouse wheel to zoom in, when pushing the wheel
+ // forward, I can use the existing code, by making num_steps
+ // negative here.
+ num_steps = num_steps * (-1);
+
+ if (cur_zoom + num_steps >= 1.0)
+ {
+ emit mouseWheelZoom(cur_zoom + num_steps);
+ }
+ else if (cur_zoom > 1.0 && cur_zoom + num_steps < 1.0)
+ {
+ emit mouseWheelZoom(1.0);
+ }
+ else if (cur_zoom <= 0.1)
+ {
+ emit mouseWheelZoom(cur_zoom + ((double)num_steps*0.01));
+ }
+ else if (cur_zoom <= 1.0 && cur_zoom + ((double)num_steps*0.1) >= 0.1)
+ {
+ emit mouseWheelZoom(cur_zoom + ((double)num_steps*0.1));
+ }
+ else if (cur_zoom <= 1.0 && cur_zoom + ((double)num_steps*0.1) < 0.1)
+ {
+ emit mouseWheelZoom(0.1);
+ }
+
+ }
+ // Negative
+ else
+ {
+
+ // Invert number of steps because code was written
+ // thinking that adding a positve num_steps was zooming
+ // in, but because it's bp/pixel, it's actually zooming out.
+ // To get mouse wheel to zoom out, when pulling the wheel
+ // backwards, I can use the existing code, by making num_steps
+ // positive here.
+ num_steps = num_steps * (-1);
+
+ if (cur_zoom >= 1.0)
+ {
+ emit mouseWheelZoom(cur_zoom+num_steps);
+ }
+ else if (cur_zoom < 1.0 && cur_zoom >= 0.1)
+ {
+ emit mouseWheelZoom(cur_zoom + ((double)num_steps*0.1));
+ }
+ else if (cur_zoom < 0.1)
+ {
+ emit mouseWheelZoom(cur_zoom + ((double)num_steps*0.01));
+ }
+
+ }
+
+ //cout << "Mouse wheel delta: " << num_degrees << "; " << num_steps << "\n";
+}
+
void SequenceBrowser::clearSelection()
{
GlSeqBrowser::clearSelection();
#include "qui/seqbrowser/seqproperties/PropertiesWindow.hpp"
class QMouseEvent;
+class QWheelEvent;
class QRubberBand;
/*! \brief Render mussa sequences and paths
void viewportChanged();
//! emit when someone copies basepairs
void basepairsCopied(size_t);
+ void mouseWheelZoom(double);
protected:
void initializeGL();
void mousePressEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
+ void wheelEvent(QWheelEvent *);
void startSelecting(QMouseEvent *);
void stopSelecting(QMouseEvent *);
this, SLOT(updatePosition()));
connect(&(scrollable_browser->browser()), SIGNAL(basepairsCopied(size_t)),
this, SIGNAL(basepairsCopied(size_t)));
+
+ // Send the signal mouseWheelZoom signal from seq browser upward.
+ connect(&(scrollable_browser->browser()), SIGNAL(mouseWheelZoom(double)),
+ this, SIGNAL(mouseWheelZoom(double)));
}
QSize SequenceBrowserWidget::sizeHint() const
signals:
//! emit when someone copies basepairs
void basepairsCopied(size_t);
+ //! emit when sequence browser alerts this widget of mouse wheel zoom event
+ void mouseWheelZoom(double);
private:
boost::shared_ptr<QDir> default_dir;