diff --git a/src/drivers/Qt/NameTableViewer.cpp b/src/drivers/Qt/NameTableViewer.cpp index f62d367d..6e80717e 100644 --- a/src/drivers/Qt/NameTableViewer.cpp +++ b/src/drivers/Qt/NameTableViewer.cpp @@ -114,7 +114,7 @@ ppuNameTableViewerDialog_t::ppuNameTableViewerDialog_t(QWidget *parent) : QDialog( parent, Qt::Window ) { QHBoxLayout *mainLayout; - QVBoxLayout *vbox1, *vbox2; + QVBoxLayout *vbox1, *vbox2, *vbox3; QHBoxLayout *hbox, *hbox1; QGridLayout *grid; QGroupBox *frame; @@ -339,6 +339,7 @@ ppuNameTableViewerDialog_t::ppuNameTableViewerDialog_t(QWidget *parent) vbox1 = new QVBoxLayout(); vbox2 = new QVBoxLayout(); + vbox3 = new QVBoxLayout(); frame = new QGroupBox( tr("Tile Info") ); ntView = new ppuNameTableView_t(this); grid = new QGridLayout(); @@ -359,7 +360,8 @@ ppuNameTableViewerDialog_t::ppuNameTableViewerDialog_t(QWidget *parent) vbox1->addWidget( scrollArea, 100 ); vbox2->addWidget( frame ); - frame->setLayout( grid ); + frame->setLayout( vbox3 ); + vbox3->addLayout( grid ); lbl = new QLabel( tr("PPU Addr:") ); lbl->setFont( font ); @@ -425,6 +427,10 @@ ppuNameTableViewerDialog_t::ppuNameTableViewerDialog_t(QWidget *parent) palAddrLbl->setReadOnly(true); grid->addWidget( palAddrLbl, 7, 1, Qt::AlignLeft ); + selTileView = new ppuNameTableTileView_t(this); + //grid->addWidget( selTileView, 8, 0, 2, 1, Qt::AlignLeft ); + vbox3->addWidget( selTileView ); + showScrollLineCbox = new QCheckBox( tr("Show Scroll Lines") ); showTileGridCbox = new QCheckBox( tr("Show Tile Grid") ); showAttrGridCbox = new QCheckBox( tr("Show Attr Grid") ); @@ -437,6 +443,7 @@ ppuNameTableViewerDialog_t::ppuNameTableViewerDialog_t(QWidget *parent) showAttrbCbox->setChecked( attview ); ignorePaletteCbox->setChecked( hidepal ); + //vbox2->addWidget( selTileView ); vbox2->addWidget( showScrollLineCbox ); vbox2->addWidget( showTileGridCbox ); vbox2->addWidget( showAttrGridCbox ); @@ -520,6 +527,13 @@ void ppuNameTableViewerDialog_t::periodicUpdate(void) if ( redrawtables || (cycleCount == 0) ) { + QPoint p; + + p = ntView->getSelTile(); + + this->selTileView->setTile( ntView->getSelTable(), p.x(), p.y() ); + this->selTileView->update(); + this->scrollArea->viewport()->update(); redrawtables = false; @@ -1536,3 +1550,117 @@ void FCEUD_UpdateNTView(int scanline, bool drawall) return; } //---------------------------------------------------- +ppuNameTableTileView_t::ppuNameTableTileView_t( QWidget *parent ) + : QWidget(parent) +{ + //this->setFocusPolicy(Qt::StrongFocus); + //this->setMouseTracking(true); + this->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); + + viewWidth = 128; + viewHeight = 128; + setMinimumWidth( viewWidth ); + setMinimumHeight( viewHeight ); + + selTable = 0; + tileX = 0; + tileY = 0; +} +//---------------------------------------------------- +ppuNameTableTileView_t::~ppuNameTableTileView_t(void) +{ + +} +//---------------------------------------------------- +void ppuNameTableTileView_t::setTile( int table, int x, int y ) +{ + selTable = table; + tileX = x; tileY = y; +} +//---------------------------------------------------- +void ppuNameTableTileView_t::resizeEvent(QResizeEvent *event) +{ + viewWidth = event->size().width(); + viewHeight = event->size().height(); +} +//---------------------------------------------------- +void ppuNameTableTileView_t::paintEvent(QPaintEvent *event) +{ + int x,y,w,h,xx,yy; + QPainter painter(this); + QPen pen; + ppuNameTableTile_t *tile; + + pen = painter.pen(); + + viewWidth = event->rect().width(); + viewHeight = event->rect().height(); + + //printf("NameTable TileView %ix%i \n", viewWidth, viewHeight ); + + w = viewWidth / 8; + h = viewHeight / 8; + + if ( w < h ) + { + h = w; + } + else + { + w = h; + } + + xx = 0; + + tile = &nameTable[ selTable ].tile[ tileY ][ tileX ]; + + // Draw Tile Pixels as rectangles + for (x=0; x < 8; x++) + { + yy = 0; + + for (y=0; y < 8; y++) + { + painter.fillRect( xx, yy, w, h, tile->pixel[y][x].color ); + yy += h; + } + xx += w; + } + + //if ( drawTileGrid ) + //{ + // pen.setWidth( 1 ); + // pen.setColor( QColor(128,128,128) ); + // painter.setPen( pen ); + + // // Draw Tile Pixel grid lines + // xx = 0; y = 8*h; + // + // for (x=0; x<9; x++) + // { + // painter.drawLine( xx, 0 , xx, y ); xx += w; + // } + // yy = 0; x = 8*w; + // + // for (y=0; y<9; y++) + // { + // painter.drawLine( 0, yy , x, yy ); yy += h; + // } + //} + + //x = selPix.x() * w; + //y = selPix.y() * h; + + //pen.setWidth( 6 ); + //pen.setColor( QColor( 0, 0, 0) ); + //painter.setPen( pen ); + + //painter.drawRect( x, y, w, h ); + + //pen.setWidth( 2 ); + //pen.setColor( QColor(255, 0, 0) ); + //painter.setPen( pen ); + + //painter.drawRect( x, y, w, h ); +} +//---------------------------------------------------- diff --git a/src/drivers/Qt/NameTableViewer.h b/src/drivers/Qt/NameTableViewer.h index 72164ed6..338edc67 100644 --- a/src/drivers/Qt/NameTableViewer.h +++ b/src/drivers/Qt/NameTableViewer.h @@ -59,6 +59,9 @@ class ppuNameTableView_t : public QWidget void setHoverFocus( bool hoverFocus ); bool getHoverFocus( void ){ return hover2Focus; }; + int getSelTable(void){ return selTable; }; + QPoint getSelTile(void){ return selTile; }; + QColor tileSelColor; QColor tileGridColor; QColor attrGridColor; @@ -86,6 +89,27 @@ class ppuNameTableView_t : public QWidget bool hover2Focus; }; +class ppuNameTableTileView_t : public QWidget +{ + Q_OBJECT + + public: + ppuNameTableTileView_t( QWidget *parent = 0); + ~ppuNameTableTileView_t(void); + + void setTile( int table, int x, int y ); + + protected: + void paintEvent(QPaintEvent *event); + void resizeEvent(QResizeEvent *event); + + int viewWidth; + int viewHeight; + int selTable; + int tileX; + int tileY; +}; + class ppuNameTableViewerDialog_t : public QDialog { Q_OBJECT @@ -102,6 +126,7 @@ class ppuNameTableViewerDialog_t : public QDialog void changeRate( int divider ); ppuNameTableView_t *ntView; + ppuNameTableTileView_t *selTileView; QScrollArea *scrollArea; QCheckBox *showScrollLineCbox; QCheckBox *showTileGridCbox;