Added mouse wheel scrolling capability for Qt debugger ASM viewer.

This commit is contained in:
Matthew Budd 2020-11-13 13:31:04 -05:00
parent bfa70c1f25
commit 43f87541b6
2 changed files with 55 additions and 0 deletions

View File

@ -2837,6 +2837,8 @@ QAsmView::QAsmView(QWidget *parent)
selAddrValue = -1; selAddrValue = -1;
memset( selAddrText, 0, sizeof(selAddrText) ); memset( selAddrText, 0, sizeof(selAddrText) );
wheelPixelCounter = 0;
//setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding ); //setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding );
setFocusPolicy(Qt::StrongFocus); setFocusPolicy(Qt::StrongFocus);
@ -3251,6 +3253,8 @@ void QAsmView::mousePressEvent(QMouseEvent * event)
line = lineOffset + c.y(); line = lineOffset + c.y();
//printf("Mouse Button Pressed: 0x%x (%i,%i)\n", event->button(), c.x(), c.y() );
if ( event->button() == Qt::LeftButton ) if ( event->button() == Qt::LeftButton )
{ {
//printf("Left Button Pressed: (%i,%i)\n", c.x(), c.y() ); //printf("Left Button Pressed: (%i,%i)\n", c.x(), c.y() );
@ -3399,6 +3403,54 @@ void QAsmView::mousePressEvent(QMouseEvent * event)
} }
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void QAsmView::wheelEvent(QWheelEvent *event)
{
QPoint numPixels = event->pixelDelta();
QPoint numDegrees = event->angleDelta() / 8;
if (!numPixels.isNull())
{
wheelPixelCounter += numPixels.y();
//printf("numPixels: (%i,%i) \n", numPixels.x(), numPixels.y() );
}
else if (!numDegrees.isNull())
{
//QPoint numSteps = numDegrees / 15;
//printf("numSteps: (%i,%i) \n", numSteps.x(), numSteps.y() );
//printf("numDegrees: (%i,%i) %i\n", numDegrees.x(), numDegrees.y(), pxLineSpacing );
wheelPixelCounter += (pxLineSpacing * numDegrees.y()) / 15;
}
//printf("Wheel Event: %i\n", wheelPixelCounter);
if ( wheelPixelCounter >= pxLineSpacing )
{
lineOffset += (wheelPixelCounter / pxLineSpacing);
if ( lineOffset > maxLineOffset )
{
lineOffset = maxLineOffset;
}
vbar->setValue( lineOffset );
wheelPixelCounter = wheelPixelCounter % pxLineSpacing;
}
else if ( wheelPixelCounter <= -pxLineSpacing )
{
lineOffset += (wheelPixelCounter / pxLineSpacing);
if ( lineOffset < 0 )
{
lineOffset = 0;
}
vbar->setValue( lineOffset );
wheelPixelCounter = wheelPixelCounter % pxLineSpacing;
}
event->accept();
}
//----------------------------------------------------------------------------
void QAsmView::contextMenuEvent(QContextMenuEvent *event) void QAsmView::contextMenuEvent(QContextMenuEvent *event)
{ {
int line; int line;

View File

@ -120,6 +120,7 @@ class QAsmView : public QWidget
void mouseReleaseEvent(QMouseEvent * event); void mouseReleaseEvent(QMouseEvent * event);
void mouseMoveEvent(QMouseEvent * event); void mouseMoveEvent(QMouseEvent * event);
void resizeEvent(QResizeEvent *event); void resizeEvent(QResizeEvent *event);
void wheelEvent(QWheelEvent *event);
void contextMenuEvent(QContextMenuEvent *event); void contextMenuEvent(QContextMenuEvent *event);
void loadHighlightToClipboard(void); void loadHighlightToClipboard(void);
@ -167,6 +168,8 @@ class QAsmView : public QWidget
int txtHlgtEndChar; int txtHlgtEndChar;
int txtHlgtEndLine; int txtHlgtEndLine;
int wheelPixelCounter;
dbg_asm_entry_t *asmPC; dbg_asm_entry_t *asmPC;
std::vector <dbg_asm_entry_t*> asmEntry; std::vector <dbg_asm_entry_t*> asmEntry;