Qt TAS editor bookmarks widget in work.

This commit is contained in:
mjbudd77 2021-11-14 17:58:14 -05:00
parent 40f301c665
commit 96f6a28cc6
2 changed files with 191 additions and 7 deletions

View File

@ -21,6 +21,7 @@ Bookmarks/Branches - Manager of Bookmarks
#include <zlib.h>
#include "utils/xstring.h"
#include "Qt/fceuWrapper.h"
#include "Qt/TasEditor/taseditor_project.h"
#include "Qt/TasEditor/TasEditorWindow.h"
@ -59,13 +60,28 @@ char bookmarksCaption[3][23] = { " Bookmarks ", " Bookmarks / Branches ", " Bran
BOOKMARKS::BOOKMARKS(QWidget *parent)
: QWidget(parent)
{
// fill TrackMouseEvent struct
//tme.cbSize = sizeof(tme);
//tme.dwFlags = TME_LEAVE;
//tme.hwndTrack = NULL;
//tmeList.cbSize = sizeof(tme);
//tmeList.dwFlags = TME_LEAVE;
//tmeList.hwndTrack = NULL;
std::string fontString;
viewWidth = 256;
viewHeight = 256;
g_config->getOption("SDL.TasPianoRollFont", &fontString);
if ( fontString.size() > 0 )
{
font.fromString( QString::fromStdString( fontString ) );
}
else
{
font.setFamily("Courier New");
font.setStyle( QFont::StyleNormal );
font.setStyleHint( QFont::Monospace );
}
this->setFocusPolicy(Qt::StrongFocus);
this->setMouseTracking(true);
calcFontData();
}
BOOKMARKS::~BOOKMARKS(void)
@ -284,6 +300,39 @@ void BOOKMARKS::reset_vars()
nextFlashUpdateTime = clock() + BOOKMARKS_FLASH_TICK;
}
void BOOKMARKS::calcFontData(void)
{
QWidget::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.capHeight();
pxLineSpacing = metrics.lineSpacing() * 1.25;
pxLineLead = pxLineSpacing - metrics.height();
pxCursorHeight = metrics.height();
pxLineTextOfs = pxCharHeight + (pxLineSpacing - pxCharHeight) / 2;
//printf("W:%i H:%i LS:%i \n", pxCharWidth, pxCharHeight, pxLineSpacing );
viewLines = (viewHeight / pxLineSpacing) + 1;
pxWidthCol1 = 3 * pxCharWidth;
pxWidthFrameCol = 12 * pxCharWidth;
pxWidthTimeCol = 12 * pxCharWidth;
pxLineWidth = pxWidthCol1 + pxWidthFrameCol + pxWidthTimeCol;
pxStartCol1 = 0;
pxStartCol2 = pxWidthCol1;
pxStartCol3 = pxWidthCol1 + pxWidthFrameCol;
setMinimumWidth( pxLineWidth );
setMinimumHeight( pxLineSpacing * TOTAL_BOOKMARKS );
}
void BOOKMARKS::update()
{
// execute all commands accumulated during last frame
@ -352,6 +401,8 @@ void BOOKMARKS::update()
itemUnderMouse = ITEM_UNDER_MOUSE_NONE;
mustCheckItemUnderMouse = false;
}
QWidget::update();
}
// stores commands in array for update() function
@ -568,7 +619,9 @@ void BOOKMARKS::redrawBookmarksSectionCaption()
redrawBookmarksList();
}
if (prev_edit_mode != editMode)
{
mustCheckItemUnderMouse = true;
}
//SetWindowText(hwndBookmarks, bookmarksCaption[editMode]);
}
void BOOKMARKS::redrawBookmarksList(bool eraseBG)
@ -605,22 +658,129 @@ void BOOKMARKS::resizeEvent(QResizeEvent *event)
void BOOKMARKS::paintEvent(QPaintEvent *event)
{
fceuCriticalSection emuLock;
QPainter painter(this);
int x, y, item;
QColor white(255,255,255), black(0,0,0), blkColor;
char txt[256];
painter.setFont(font);
viewWidth = event->rect().width();
viewHeight = event->rect().height();
// Draw Background
painter.fillRect( 0, 0, viewWidth, viewHeight, white );
// Draw text
y = 0;
for (int i = 0; i < TOTAL_BOOKMARKS; ++i)
{
item = (i+1) % TOTAL_BOOKMARKS;
x = pxStartCol1 + pxCharWidth;
sprintf( txt, "%i", item );
painter.drawText( x, y+pxLineTextOfs, tr(txt) );
if (bookmarksArray[item].notEmpty)
{
x = pxStartCol2 + pxCharWidth;
U32ToDecStr( txt, bookmarksArray[item].snapshot.keyFrame, 10);
painter.drawText( x, y+pxLineTextOfs, tr(txt) );
x = pxStartCol3 + pxCharWidth;
strcpy(txt, bookmarksArray[item].snapshot.description);
painter.drawText( x, y+pxLineTextOfs, tr(txt) );
}
y += pxLineSpacing;
}
// Draw Grid
painter.drawLine( pxStartCol1, 0, pxStartCol1, viewHeight );
painter.drawLine( pxStartCol2, 0, pxStartCol2, viewHeight );
painter.drawLine( pxStartCol3, 0, pxStartCol3, viewHeight );
painter.drawLine( pxLineWidth, 0, pxLineWidth, viewHeight );
y = 0;
for (int i = 0; i < TOTAL_BOOKMARKS; ++i)
{
painter.drawLine( 0, y, viewWidth, y );
y += pxLineSpacing;
}
}
//----------------------------------------------------------------------------
QPoint BOOKMARKS::convPixToCursor( QPoint p )
{
QPoint c(0,0);
if ( p.x() < 0 )
{
c.setX(0);
}
else
{
float x = (float)(p.x()) / pxCharWidth;
c.setX( (int)x );
}
if ( p.y() < 0 )
{
c.setY( -1 );
}
else
{
float py = ( (float)p.y() ) / (float)pxLineSpacing;
c.setY( (int)py );
}
return c;
}
//----------------------------------------------------------------------------
int BOOKMARKS::calcColumn( int px )
{
int col = -1;
if ( px < pxStartCol2 )
{
col = BOOKMARKSLIST_COLUMN_ICON;
}
else if ( px < pxStartCol3 )
{
col = BOOKMARKSLIST_COLUMN_FRAME;
}
else
{
col = BOOKMARKSLIST_COLUMN_TIME;
}
return col;
}
void BOOKMARKS::mousePressEvent(QMouseEvent * event)
{
QPoint c = convPixToCursor( event->pos() );
printf("Mouse Button Pressed: 0x%x (%i,%i)\n", event->button(), c.x(), c.y() );
}
void BOOKMARKS::mouseReleaseEvent(QMouseEvent * event)
{
QPoint c = convPixToCursor( event->pos() );
printf("Mouse Button Released: 0x%x (%i,%i)\n", event->button(), c.x(), c.y() );
}
void BOOKMARKS::mouseMoveEvent(QMouseEvent * event)
{
QPoint c = convPixToCursor( event->pos() );
printf("Mouse Move: 0x%x (%i,%i)\n", event->button(), c.x(), c.y() );
}
void BOOKMARKS::handleMouseMove(int newX, int newY)

View File

@ -3,6 +3,7 @@
#include <vector>
#include <QWidget>
#include <QScrollBar>
#include "fceu.h"
#include "Qt/TasEditor/bookmark.h"
@ -112,10 +113,14 @@ protected:
void mouseReleaseEvent(QMouseEvent * event);
void mouseMoveEvent(QMouseEvent * event);
int calcColumn( int px );
QPoint convPixToCursor( QPoint p );
private:
void set(int slot);
void jump(int slot);
void deploy(int slot);
void calcFontData(void);
// not saved vars
std::vector<int> commands;
@ -126,7 +131,26 @@ private:
// GDI stuff
//HFONT hBookmarksFont;
//HIMAGELIST hImgList;
QFont font;
QScrollBar *hbar;
QScrollBar *vbar;
int viewWidth;
int viewHeight;
int viewLines;
int pxCharWidth;
int pxCharHeight;
int pxCursorHeight;
int pxLineXScroll;
int pxLineWidth;
int pxLineSpacing;
int pxLineLead;
int pxLineTextOfs;
int pxWidthCol1;
int pxWidthFrameCol;
int pxWidthTimeCol;
int pxStartCol1;
int pxStartCol2;
int pxStartCol3;
};