Trace logger custom widget setup in work.

This commit is contained in:
Matthew Budd 2020-09-30 22:44:56 -04:00
parent 9da84e16ca
commit 08da8fd76e
2 changed files with 96 additions and 6 deletions

View File

@ -1,9 +1,10 @@
// CodeDataLogger.cpp
// TraceLogger.cpp
//
#include <QDir>
#include <QFileDialog>
#include <QInputDialog>
#include <QMessageBox>
#include <QPainter>
#include "../../types.h"
#include "../../fceu.h"
@ -85,18 +86,24 @@ TraceLoggerDialog_t::TraceLoggerDialog_t(QWidget *parent)
mainLayout = new QVBoxLayout();
grid = new QGridLayout();
mainLayout->addLayout( grid );
mainLayout->addLayout( grid, 100 );
traceView = new QTraceLogView(this);
vbar = new QScrollBar( Qt::Vertical, this );
hbar = new QScrollBar( Qt::Horizontal, this );
traceView->setScrollBars( hbar, vbar );
hbar->setMinimum(0);
hbar->setMaximum(100);
vbar->setMinimum(0);
vbar->setMaximum(10000);
grid->addWidget( traceView, 0, 0);
grid->addWidget( vbar , 0, 1 );
grid->addWidget( hbar , 1, 0 );
grid = new QGridLayout();
mainLayout->addLayout( grid );
mainLayout->addLayout( grid, 1 );
lbl = new QLabel( tr("Lines") );
logLastCbox = new QCheckBox( tr("Log Last") );
@ -150,7 +157,7 @@ TraceLoggerDialog_t::TraceLoggerDialog_t(QWidget *parent)
grid->addWidget( logInstrCountCbox , 1, 2, Qt::AlignLeft );
grid->addWidget( logBankNumCbox , 2, 2, Qt::AlignLeft );
mainLayout->addWidget( frame );
mainLayout->addWidget( frame, 1 );
grid = new QGridLayout();
frame = new QGroupBox(tr("Extra Log Options that work with the Code/Data Logger"));
@ -162,7 +169,7 @@ TraceLoggerDialog_t::TraceLoggerDialog_t(QWidget *parent)
grid->addWidget( logNewMapCodeCbox, 0, 0, Qt::AlignLeft );
grid->addWidget( logNewMapDataCbox, 0, 1, Qt::AlignLeft );
mainLayout->addWidget( frame );
mainLayout->addWidget( frame, 1 );
setLayout( mainLayout );
@ -448,7 +455,14 @@ void FCEUD_TraceInstruction(uint8 *opcode, int size)
QTraceLogView::QTraceLogView(QWidget *parent)
: QWidget(parent)
{
font.setFamily("Courier New");
font.setStyle( QFont::StyleNormal );
font.setStyleHint( QFont::Monospace );
calcFontData();
vbar = NULL;
hbar = NULL;
}
//----------------------------------------------------
QTraceLogView::~QTraceLogView(void)
@ -456,3 +470,58 @@ QTraceLogView::~QTraceLogView(void)
}
//----------------------------------------------------
void QTraceLogView::calcFontData(void)
{
this->setFont(font);
QFontMetrics metrics(font);
#if QT_VERSION > QT_VERSION_CHECK(5, 11, 0)
pxCharWidth = metrics.horizontalAdvance(QLatin1Char('2'));
#else
pxCharWidth = metrics.width(QLatin1Char('2'));
#endif
pxCharHeight = metrics.height();
pxLineSpacing = metrics.lineSpacing() * 1.25;
pxLineLead = pxLineSpacing - pxCharHeight;
pxCursorHeight = pxCharHeight;
pxLineWidth = pxCharWidth * LOG_LINE_MAX_LEN;
viewLines = (viewHeight / pxLineSpacing) + 1;
}
//----------------------------------------------------------------------------
void QTraceLogView::setScrollBars( QScrollBar *h, QScrollBar *v )
{
hbar = h; vbar = v;
}
//----------------------------------------------------
void QTraceLogView::resizeEvent(QResizeEvent *event)
{
viewWidth = event->size().width();
viewHeight = event->size().height();
//printf("QAsmView Resize: %ix%i\n", viewWidth, viewHeight );
viewLines = (viewHeight / pxLineSpacing) + 1;
//maxLineOffset = 0; // mb.numLines() - viewLines + 1;
if ( viewWidth >= pxLineWidth )
{
pxLineXScroll = 0;
}
else
{
pxLineXScroll = (int)(0.010f * (float)hbar->value() * (float)(pxLineWidth - viewWidth) );
}
}
//----------------------------------------------------
void QTraceLogView::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setFont(font);
viewWidth = event->rect().width();
viewHeight = event->rect().height();
}
//----------------------------------------------------

View File

@ -1,4 +1,4 @@
// CodeDataLogger.h
// TraceLogger.h
//
#pragma once
@ -25,7 +25,28 @@ class QTraceLogView : public QWidget
QTraceLogView(QWidget *parent = 0);
~QTraceLogView(void);
void setScrollBars( QScrollBar *h, QScrollBar *v );
protected:
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
void calcFontData(void);
protected:
QFont font;
QScrollBar *vbar;
QScrollBar *hbar;
int pxCharWidth;
int pxCharHeight;
int pxLineSpacing;
int pxLineLead;
int pxCursorHeight;
int pxLineXScroll;
int pxLineWidth;
int viewLines;
int viewWidth;
int viewHeight;
};
class TraceLoggerDialog_t : public QDialog