summaryrefslogtreecommitdiff
path: root/muse2/muse/waveedit
diff options
context:
space:
mode:
authorRobert Jonsson <spamatica@gmail.com>2011-05-15 18:56:00 +0000
committerRobert Jonsson <spamatica@gmail.com>2011-05-15 18:56:00 +0000
commit38988a37365c8772da11f3f41d49e5c1fd083084 (patch)
treee3995bb749b9a7359466b7aea6b6077ba6b96bd8 /muse2/muse/waveedit
parent0021af8ef6f76dd4575bc74da2b20431d58a8f7e (diff)
mouse wheel rework
Diffstat (limited to 'muse2/muse/waveedit')
-rw-r--r--muse2/muse/waveedit/waveedit.cpp31
-rw-r--r--muse2/muse/waveedit/waveedit.h3
-rw-r--r--muse2/muse/waveedit/waveview.cpp49
-rw-r--r--muse2/muse/waveedit/waveview.h3
4 files changed, 81 insertions, 5 deletions
diff --git a/muse2/muse/waveedit/waveedit.cpp b/muse2/muse/waveedit/waveedit.cpp
index 2350a2c5..ccfb2730 100644
--- a/muse2/muse/waveedit/waveedit.cpp
+++ b/muse2/muse/waveedit/waveedit.cpp
@@ -222,6 +222,9 @@ WaveEdit::WaveEdit(PartList* pl)
ymag->setFixedWidth(16);
connect(view, SIGNAL(mouseWheelMoved(int)), this, SLOT(moveVerticalSlider(int)));
connect(ymag, SIGNAL(valueChanged(int)), view, SLOT(setYScale(int)));
+ connect(view, SIGNAL(horizontalZoomIn()), SLOT(horizontalZoomIn()));
+ connect(view, SIGNAL(horizontalZoomOut()), SLOT(horizontalZoomOut()));
+
time->setOrigin(0, 0);
mainGrid->setRowStretch(0, 100);
@@ -246,6 +249,8 @@ WaveEdit::WaveEdit(PartList* pl)
// connect(time, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned)));
connect(view, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned)));
+ connect(view, SIGNAL(horizontalScroll(unsigned)),hscroll, SLOT(setPos(unsigned)));
+
connect(hscroll, SIGNAL(scaleChanged(int)), SLOT(updateHScrollRange()));
connect(song, SIGNAL(songChanged(int)), SLOT(songChanged1(int)));
@@ -498,3 +503,29 @@ void WaveEdit::moveVerticalSlider(int val)
ymag->setValue(ymag->value() + val);
}
+
+void WaveEdit::horizontalZoomIn()
+{
+ int mag = hscroll->mag();
+ int zoomlvl = ScrollScale::getQuickZoomLevel(mag);
+ if (zoomlvl < 23)
+ zoomlvl++;
+
+ int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
+
+ hscroll->setMag(newmag);
+
+}
+
+void WaveEdit::horizontalZoomOut()
+{
+ int mag = hscroll->mag();
+ int zoomlvl = ScrollScale::getQuickZoomLevel(mag);
+ if (zoomlvl > 1)
+ zoomlvl--;
+
+ int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
+
+ hscroll->setMag(newmag);
+
+}
diff --git a/muse2/muse/waveedit/waveedit.h b/muse2/muse/waveedit/waveedit.h
index 67230897..b4000794 100644
--- a/muse2/muse/waveedit/waveedit.h
+++ b/muse2/muse/waveedit/waveedit.h
@@ -66,6 +66,9 @@ class WaveEdit : public MidiEditor {
void configChanged();
virtual void updateHScrollRange();
+ void horizontalZoomIn();
+ void horizontalZoomOut();
+
signals:
void deleted(unsigned long);
diff --git a/muse2/muse/waveedit/waveview.cpp b/muse2/muse/waveedit/waveview.cpp
index f83ae1d5..0c387f72 100644
--- a/muse2/muse/waveedit/waveview.cpp
+++ b/muse2/muse/waveedit/waveview.cpp
@@ -25,6 +25,7 @@
#include "waveedit.h"
#include "audio.h"
#include "gconfig.h"
+#include "fastlog.h"
bool modifyWarnedYet = false;
//---------------------------------------------------------
@@ -381,14 +382,52 @@ void WaveView::viewMousePressEvent(QMouseEvent* event)
viewMouseMoveEvent(event);
}
-
+#define WHEEL_STEPSIZE 40
+#define WHEEL_DELTA 120
//---------------------------------------------------------
// wheelEvent
//---------------------------------------------------------
-void WaveView::wheelEvent(QWheelEvent* event)
- {
- emit mouseWheelMoved(event->delta() / 10);
- }
+void WaveView::wheelEvent(QWheelEvent* ev)
+{
+ int keyState = ev->modifiers();
+
+ bool shift = keyState & Qt::ShiftModifier;
+ bool alt = keyState & Qt::AltModifier;
+ bool ctrl = keyState & Qt::ControlModifier;
+
+ if (shift) { // scroll vertically
+ emit mouseWheelMoved(ev->delta() / 10);
+
+ } else if (ctrl) { // zoom horizontally
+ if (ev->delta()>0)
+ emit horizontalZoomIn();
+ else
+ emit horizontalZoomOut();
+
+ } else { // scroll horizontally
+ int delta = ev->delta() / WHEEL_DELTA;
+ int xpixelscale = 5*fast_log10(rmapxDev(1));
+
+
+ if (xpixelscale <= 0)
+ xpixelscale = 1;
+
+ int scrollstep = WHEEL_STEPSIZE * (delta);
+ ///if (ev->state() == Qt::ShiftModifier)
+// if (((QInputEvent*)ev)->modifiers() == Qt::ShiftModifier)
+ scrollstep = scrollstep / 10;
+
+ int newXpos = xpos + xpixelscale * scrollstep;
+
+ if (newXpos < 0)
+ newXpos = 0;
+
+ //setYPos(newYpos);
+ emit horizontalScroll((unsigned)newXpos);
+
+ }
+
+}
//---------------------------------------------------------
// viewMouseReleaseEvent
diff --git a/muse2/muse/waveedit/waveview.h b/muse2/muse/waveedit/waveview.h
index 3ee0d5f8..c7992952 100644
--- a/muse2/muse/waveedit/waveview.h
+++ b/muse2/muse/waveedit/waveview.h
@@ -88,6 +88,9 @@ class WaveView : public View {
void followEvent(int);
void timeChanged(unsigned);
void mouseWheelMoved(int);
+ void horizontalScroll(unsigned);
+ void horizontalZoomIn();
+ void horizontalZoomOut();
public:
WaveView(MidiEditor*, QWidget* parent, int xscale, int yscale);