Added vertical slider logic.
This commit is contained in:
parent
b6b2038c96
commit
b23349e870
|
@ -144,6 +144,7 @@ HexEditorDialog_t::HexEditorDialog_t(QWidget *parent)
|
||||||
: QDialog( parent )
|
: QDialog( parent )
|
||||||
{
|
{
|
||||||
QVBoxLayout *mainLayout;
|
QVBoxLayout *mainLayout;
|
||||||
|
QGridLayout *grid;
|
||||||
QMenuBar *menuBar;
|
QMenuBar *menuBar;
|
||||||
QMenu *fileMenu;
|
QMenu *fileMenu;
|
||||||
QAction *saveROM;
|
QAction *saveROM;
|
||||||
|
@ -173,13 +174,28 @@ HexEditorDialog_t::HexEditorDialog_t(QWidget *parent)
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
mainLayout = new QVBoxLayout();
|
mainLayout = new QVBoxLayout();
|
||||||
|
|
||||||
|
grid = new QGridLayout(this);
|
||||||
editor = new QHexEdit( &mb, this);
|
editor = new QHexEdit( &mb, this);
|
||||||
|
vbar = new QScrollBar( Qt::Vertical, this );
|
||||||
|
hbar = new QScrollBar( Qt::Horizontal, this );
|
||||||
|
|
||||||
mainLayout->setMenuBar( menuBar );
|
grid->setMenuBar( menuBar );
|
||||||
mainLayout->addWidget( editor );
|
|
||||||
|
grid->addWidget( editor, 0, 0 );
|
||||||
|
grid->addWidget( vbar , 0, 1 );
|
||||||
|
grid->addWidget( hbar , 1, 0 );
|
||||||
|
mainLayout->addLayout( grid );
|
||||||
|
|
||||||
setLayout( mainLayout );
|
setLayout( mainLayout );
|
||||||
|
|
||||||
|
hbar->setMinimum(0);
|
||||||
|
hbar->setMaximum(100);
|
||||||
|
vbar->setMinimum(0);
|
||||||
|
vbar->setMaximum( 0x10000 / 16 );
|
||||||
|
|
||||||
|
//connect( vbar, SIGNAL(sliderMoved(int)), this, SLOT(vbarMoved(int)) );
|
||||||
|
connect( vbar, SIGNAL(valueChanged(int)), this, SLOT(vbarChanged(int)) );
|
||||||
|
|
||||||
mode = MODE_NES_RAM;
|
mode = MODE_NES_RAM;
|
||||||
memAccessFunc = getRAM;
|
memAccessFunc = getRAM;
|
||||||
redraw = false;
|
redraw = false;
|
||||||
|
@ -205,6 +221,18 @@ void HexEditorDialog_t::closeWindow(void)
|
||||||
done(0);
|
done(0);
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
void HexEditorDialog_t::vbarMoved(int value)
|
||||||
|
{
|
||||||
|
printf("VBar Moved: %i\n", value);
|
||||||
|
editor->setLine( value );
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void HexEditorDialog_t::vbarChanged(int value)
|
||||||
|
{
|
||||||
|
printf("VBar Changed: %i\n", value);
|
||||||
|
editor->setLine( value );
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
void HexEditorDialog_t::setMode(int new_mode)
|
void HexEditorDialog_t::setMode(int new_mode)
|
||||||
{
|
{
|
||||||
if ( mode != new_mode )
|
if ( mode != new_mode )
|
||||||
|
@ -331,6 +359,7 @@ QHexEdit::QHexEdit(memBlock_t *blkPtr, QWidget *parent)
|
||||||
|
|
||||||
calcFontData();
|
calcFontData();
|
||||||
|
|
||||||
|
lineOffset = 0;
|
||||||
cursorPosX = 0;
|
cursorPosX = 0;
|
||||||
cursorPosY = 0;
|
cursorPosY = 0;
|
||||||
cursorBlink = true;
|
cursorBlink = true;
|
||||||
|
@ -352,10 +381,10 @@ void QHexEdit::calcFontData(void)
|
||||||
#else
|
#else
|
||||||
pxCharWidth = metrics.width(QLatin1Char('2'));
|
pxCharWidth = metrics.width(QLatin1Char('2'));
|
||||||
#endif
|
#endif
|
||||||
pxCharHeight = metrics.height();
|
pxCharHeight = metrics.height();
|
||||||
pxLineSpacing = metrics.lineSpacing() * 1.25;
|
pxLineSpacing = metrics.lineSpacing() * 1.25;
|
||||||
pxLineLead = pxLineSpacing - pxCharHeight;
|
pxLineLead = pxLineSpacing - pxCharHeight;
|
||||||
pxXoffset = pxCharHeight;
|
pxXoffset = pxCharWidth;
|
||||||
pxYoffset = pxLineSpacing * 2.0;
|
pxYoffset = pxLineSpacing * 2.0;
|
||||||
pxHexOffset = pxXoffset + (7*pxCharWidth);
|
pxHexOffset = pxXoffset + (7*pxCharWidth);
|
||||||
pxHexAscii = pxHexOffset + (16*3*pxCharWidth) + (2*pxCharWidth);
|
pxHexAscii = pxHexOffset + (16*3*pxCharWidth) + (2*pxCharWidth);
|
||||||
|
@ -366,6 +395,11 @@ void QHexEdit::calcFontData(void)
|
||||||
//_pxSelectionSub = _pxCharHeight / 5;
|
//_pxSelectionSub = _pxCharHeight / 5;
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
void QHexEdit::setLine( int newLineOffset )
|
||||||
|
{
|
||||||
|
lineOffset = newLineOffset;
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
void QHexEdit::keyPressEvent(QKeyEvent *event)
|
void QHexEdit::keyPressEvent(QKeyEvent *event)
|
||||||
{
|
{
|
||||||
printf("Hex Window Key Press: 0x%x \n", event->key() );
|
printf("Hex Window Key Press: 0x%x \n", event->key() );
|
||||||
|
@ -381,6 +415,7 @@ void QHexEdit::keyReleaseEvent(QKeyEvent *event)
|
||||||
void QHexEdit::paintEvent(QPaintEvent *event)
|
void QHexEdit::paintEvent(QPaintEvent *event)
|
||||||
{
|
{
|
||||||
int x, y, w, h, row, col, nrow, addr;
|
int x, y, w, h, row, col, nrow, addr;
|
||||||
|
int maxLines, maxLineOffset;
|
||||||
char txt[32];
|
char txt[32];
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
|
|
||||||
|
@ -390,7 +425,7 @@ void QHexEdit::paintEvent(QPaintEvent *event)
|
||||||
|
|
||||||
//painter.fillRect( 0, 0, w, h, QColor("white") );
|
//painter.fillRect( 0, 0, w, h, QColor("white") );
|
||||||
|
|
||||||
nrow = (h / pxLineSpacing) + 1;
|
nrow = (h / pxLineSpacing);
|
||||||
|
|
||||||
if ( nrow < 1 ) nrow = 1;
|
if ( nrow < 1 ) nrow = 1;
|
||||||
|
|
||||||
|
@ -430,8 +465,16 @@ void QHexEdit::paintEvent(QPaintEvent *event)
|
||||||
|
|
||||||
painter.setPen( this->palette().color(QPalette::WindowText));
|
painter.setPen( this->palette().color(QPalette::WindowText));
|
||||||
|
|
||||||
|
maxLines = (mb->size() / 16);
|
||||||
|
maxLineOffset = maxLines - nrow + 2;
|
||||||
|
|
||||||
|
if ( lineOffset > maxLineOffset )
|
||||||
|
{
|
||||||
|
lineOffset = maxLineOffset;
|
||||||
|
}
|
||||||
|
|
||||||
//painter.setPen( QColor("white") );
|
//painter.setPen( QColor("white") );
|
||||||
addr = 0;
|
addr = lineOffset * 16;
|
||||||
y = pxYoffset;
|
y = pxYoffset;
|
||||||
|
|
||||||
for ( row=0; row < nrow; row++)
|
for ( row=0; row < nrow; row++)
|
||||||
|
@ -445,11 +488,15 @@ void QHexEdit::paintEvent(QPaintEvent *event)
|
||||||
|
|
||||||
for (col=0; col<16; col++)
|
for (col=0; col<16; col++)
|
||||||
{
|
{
|
||||||
sprintf( txt, "%02X", mb->buf[addr+col].data );
|
if ( addr < mb->size() )
|
||||||
painter.drawText( x, y, txt );
|
{
|
||||||
|
sprintf( txt, "%02X", mb->buf[addr].data );
|
||||||
|
painter.drawText( x, y, txt );
|
||||||
|
}
|
||||||
x += (3*pxCharWidth);
|
x += (3*pxCharWidth);
|
||||||
|
addr++;
|
||||||
}
|
}
|
||||||
addr += 16;
|
//addr += 16;
|
||||||
y += pxLineSpacing;
|
y += pxLineSpacing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,8 @@ class QHexEdit : public QWidget
|
||||||
QHexEdit(memBlock_t *blkPtr, QWidget *parent = 0);
|
QHexEdit(memBlock_t *blkPtr, QWidget *parent = 0);
|
||||||
~QHexEdit(void);
|
~QHexEdit(void);
|
||||||
|
|
||||||
|
void setLine( int newLineOffset );
|
||||||
|
void setAddr( int newAddrOffset );
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *event);
|
void paintEvent(QPaintEvent *event);
|
||||||
void keyPressEvent(QKeyEvent *event);
|
void keyPressEvent(QKeyEvent *event);
|
||||||
|
@ -57,6 +59,7 @@ class QHexEdit : public QWidget
|
||||||
|
|
||||||
memBlock_t *mb;
|
memBlock_t *mb;
|
||||||
|
|
||||||
|
int lineOffset;
|
||||||
int pxCharWidth;
|
int pxCharWidth;
|
||||||
int pxCharHeight;
|
int pxCharHeight;
|
||||||
int pxCursorHeight;
|
int pxCursorHeight;
|
||||||
|
@ -97,8 +100,10 @@ class HexEditorDialog_t : public QDialog
|
||||||
int checkMemActivity(void);
|
int checkMemActivity(void);
|
||||||
int calcVisibleRange( int *start_out, int *end_out, int *center_out );
|
int calcVisibleRange( int *start_out, int *end_out, int *center_out );
|
||||||
|
|
||||||
QHexEdit *editor;
|
QScrollBar *vbar;
|
||||||
QTimer *periodicTimer;
|
QScrollBar *hbar;
|
||||||
|
QHexEdit *editor;
|
||||||
|
QTimer *periodicTimer;
|
||||||
|
|
||||||
int mode;
|
int mode;
|
||||||
//int memSize;
|
//int memSize;
|
||||||
|
@ -116,5 +121,7 @@ class HexEditorDialog_t : public QDialog
|
||||||
void closeWindow(void);
|
void closeWindow(void);
|
||||||
private slots:
|
private slots:
|
||||||
void updatePeriodic(void);
|
void updatePeriodic(void);
|
||||||
|
void vbarMoved(int value);
|
||||||
|
void vbarChanged(int value);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue