mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 05:43:48 -07:00
data plot: support mouse wheel for moving and zooming (+shift)
This commit is contained in:
parent
804fef2ab8
commit
2482a8ec06
2 changed files with 77 additions and 38 deletions
|
@ -637,6 +637,66 @@ void Plot::closeEvent(QCloseEvent *event) {
|
||||||
g_useOverlays = false;
|
g_useOverlays = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Plot::Zoom(float factor, int refX) {
|
||||||
|
if (factor >=1) { // Zoom in
|
||||||
|
if (GraphPixelsPerPoint <= 25 * factor) {
|
||||||
|
GraphPixelsPerPoint *= factor;
|
||||||
|
GraphStart += (refX - GraphStart) - ((refX - GraphStart) / factor);
|
||||||
|
}
|
||||||
|
} else { // Zoom out
|
||||||
|
if (GraphPixelsPerPoint >= 0.01 / factor) {
|
||||||
|
GraphPixelsPerPoint *= factor;
|
||||||
|
if (GraphStart >= ((refX - GraphStart) / factor) - (refX - GraphStart)) {
|
||||||
|
GraphStart -= ((refX - GraphStart) / factor) - (refX - GraphStart);
|
||||||
|
} else {
|
||||||
|
GraphStart = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Plot::Move(int offset) {
|
||||||
|
if (offset > 0) { // Move right
|
||||||
|
if (GraphPixelsPerPoint < 20) {
|
||||||
|
GraphStart += offset;
|
||||||
|
} else {
|
||||||
|
GraphStart++;
|
||||||
|
}
|
||||||
|
} else { // Move left
|
||||||
|
if (GraphPixelsPerPoint < 20) {
|
||||||
|
if (GraphStart >= (uint)-offset) {
|
||||||
|
GraphStart += offset;
|
||||||
|
} else {
|
||||||
|
GraphStart = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (GraphStart > 0) {
|
||||||
|
GraphStart--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Plot::wheelEvent(QWheelEvent *event) {
|
||||||
|
// event->delta()
|
||||||
|
// 120 => shift right 5%
|
||||||
|
// -120 => shift left 5%
|
||||||
|
const float move_offset = 0.05;
|
||||||
|
// -120+shift => zoom in 10%
|
||||||
|
// 120+shift => zoom out 10%
|
||||||
|
const float zoom_offset = 0.1;
|
||||||
|
if (event->modifiers() & Qt::ShiftModifier) {
|
||||||
|
int x = event->x();
|
||||||
|
x -= WIDTH_AXES;
|
||||||
|
x = (int)(x / GraphPixelsPerPoint);
|
||||||
|
x += GraphStart;
|
||||||
|
Zoom(1.0-(float)event->delta()/(120/zoom_offset), x);
|
||||||
|
} else {
|
||||||
|
Move(PageWidth*(-(float)event->delta()/(120/move_offset)));
|
||||||
|
}
|
||||||
|
this->update();
|
||||||
|
}
|
||||||
|
|
||||||
void Plot::mouseMoveEvent(QMouseEvent *event) {
|
void Plot::mouseMoveEvent(QMouseEvent *event) {
|
||||||
int x = event->x();
|
int x = event->x();
|
||||||
x -= WIDTH_AXES;
|
x -= WIDTH_AXES;
|
||||||
|
@ -667,55 +727,27 @@ void Plot::keyPressEvent(QKeyEvent *event) {
|
||||||
|
|
||||||
switch (event->key()) {
|
switch (event->key()) {
|
||||||
case Qt::Key_Down:
|
case Qt::Key_Down:
|
||||||
if (GraphPixelsPerPoint <= 50) {
|
if (event->modifiers() & Qt::ShiftModifier) {
|
||||||
GraphPixelsPerPoint *= 2;
|
Zoom(2, CursorBPos);
|
||||||
if (event->modifiers() & Qt::ShiftModifier) {
|
} else {
|
||||||
GraphStart += (CursorBPos - GraphStart) / 2;
|
Zoom(2, CursorAPos);
|
||||||
} else {
|
|
||||||
GraphStart += (CursorAPos - GraphStart) / 2;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::Key_Up:
|
case Qt::Key_Up:
|
||||||
if (GraphPixelsPerPoint >= 0.02) {
|
if (event->modifiers() & Qt::ShiftModifier) {
|
||||||
GraphPixelsPerPoint /= 2;
|
Zoom(0.5, CursorBPos);
|
||||||
if (event->modifiers() & Qt::ShiftModifier) {
|
} else {
|
||||||
if (GraphStart >= CursorBPos - GraphStart) {
|
Zoom(0.5, CursorAPos);
|
||||||
GraphStart -= CursorBPos - GraphStart;
|
|
||||||
} else {
|
|
||||||
GraphStart = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (GraphStart >= CursorAPos - GraphStart) {
|
|
||||||
GraphStart -= CursorAPos - GraphStart;
|
|
||||||
} else {
|
|
||||||
GraphStart = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::Key_Right:
|
case Qt::Key_Right:
|
||||||
if (GraphPixelsPerPoint < 20) {
|
Move(offset);
|
||||||
GraphStart += offset;
|
|
||||||
} else {
|
|
||||||
GraphStart++;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::Key_Left:
|
case Qt::Key_Left:
|
||||||
if (GraphPixelsPerPoint < 20) {
|
Move(-offset);
|
||||||
if (GraphStart >= offset) {
|
|
||||||
GraphStart -= offset;
|
|
||||||
} else {
|
|
||||||
GraphStart = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (GraphStart > 0) {
|
|
||||||
GraphStart--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::Key_G:
|
case Qt::Key_G:
|
||||||
|
@ -740,8 +772,10 @@ void Plot::keyPressEvent(QKeyEvent *event) {
|
||||||
puts("-----------------------------------------------------------------------");
|
puts("-----------------------------------------------------------------------");
|
||||||
puts("\tUP Zoom out around yellow cursor");
|
puts("\tUP Zoom out around yellow cursor");
|
||||||
puts("\t<SHIFT> UP Zoom out around purple cursor");
|
puts("\t<SHIFT> UP Zoom out around purple cursor");
|
||||||
|
puts("\t<SHIFT> WHEEL MOUSE UP Zoom out around mouse cursor");
|
||||||
puts("\tDOWN Zoom in around yellow cursor");
|
puts("\tDOWN Zoom in around yellow cursor");
|
||||||
puts("\t<SHIFT> DOWN Zoom in around purple cursor");
|
puts("\t<SHIFT> DOWN Zoom in around purple cursor");
|
||||||
|
puts("\t<SHIFT> WHEEL MOUSE DOWN Zoom in around mouse cursor");
|
||||||
puts("\tG Toggle grid display");
|
puts("\tG Toggle grid display");
|
||||||
puts("\tH Show help");
|
puts("\tH Show help");
|
||||||
puts("\tL Toggle lock grid relative to samples");
|
puts("\tL Toggle lock grid relative to samples");
|
||||||
|
@ -751,10 +785,12 @@ void Plot::keyPressEvent(QKeyEvent *event) {
|
||||||
puts("\tPGUP Page left");
|
puts("\tPGUP Page left");
|
||||||
puts("\tPGDOWN Page right");
|
puts("\tPGDOWN Page right");
|
||||||
puts("\tLEFT Move left");
|
puts("\tLEFT Move left");
|
||||||
|
puts("\tWHEEL MOUSE UP Move right");
|
||||||
puts("\t<CTLR> LEFT Move left 1 sample");
|
puts("\t<CTLR> LEFT Move left 1 sample");
|
||||||
puts("\t<SHIFT> LEFT Page left");
|
puts("\t<SHIFT> LEFT Page left");
|
||||||
puts("\tLEFT MOUSE CLICK Set yellow cursor");
|
puts("\tLEFT MOUSE CLICK Set yellow cursor");
|
||||||
puts("\tRIGHT Move right");
|
puts("\tRIGHT Move right");
|
||||||
|
puts("\tWHEEL MOUSE DOWN Move right");
|
||||||
puts("\t<CTLR> RIGHT Move right 1 sample");
|
puts("\t<CTLR> RIGHT Move right 1 sample");
|
||||||
puts("\t<SHIFT> RIGHT Page right");
|
puts("\t<SHIFT> RIGHT Page right");
|
||||||
puts("\tRIGHT MOUSE CLICK Set purple cursor");
|
puts("\tRIGHT MOUSE CLICK Set purple cursor");
|
||||||
|
|
|
@ -50,6 +50,9 @@ class Plot: public QWidget {
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *event);
|
void paintEvent(QPaintEvent *event);
|
||||||
void closeEvent(QCloseEvent *event);
|
void closeEvent(QCloseEvent *event);
|
||||||
|
void Zoom(float factor, int refX);
|
||||||
|
void Move(int offset);
|
||||||
|
void wheelEvent(QWheelEvent *event);
|
||||||
void mouseMoveEvent(QMouseEvent *event);
|
void mouseMoveEvent(QMouseEvent *event);
|
||||||
void mousePressEvent(QMouseEvent *event) { mouseMoveEvent(event); }
|
void mousePressEvent(QMouseEvent *event) { mouseMoveEvent(event); }
|
||||||
void keyPressEvent(QKeyEvent *event);
|
void keyPressEvent(QKeyEvent *event);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue