Qt TAS editor bookmarks widget in work.
This commit is contained in:
parent
40f301c665
commit
96f6a28cc6
|
@ -21,6 +21,7 @@ Bookmarks/Branches - Manager of Bookmarks
|
||||||
|
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
#include "utils/xstring.h"
|
#include "utils/xstring.h"
|
||||||
|
#include "Qt/fceuWrapper.h"
|
||||||
#include "Qt/TasEditor/taseditor_project.h"
|
#include "Qt/TasEditor/taseditor_project.h"
|
||||||
#include "Qt/TasEditor/TasEditorWindow.h"
|
#include "Qt/TasEditor/TasEditorWindow.h"
|
||||||
|
|
||||||
|
@ -59,13 +60,28 @@ char bookmarksCaption[3][23] = { " Bookmarks ", " Bookmarks / Branches ", " Bran
|
||||||
BOOKMARKS::BOOKMARKS(QWidget *parent)
|
BOOKMARKS::BOOKMARKS(QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
{
|
{
|
||||||
// fill TrackMouseEvent struct
|
std::string fontString;
|
||||||
//tme.cbSize = sizeof(tme);
|
|
||||||
//tme.dwFlags = TME_LEAVE;
|
viewWidth = 256;
|
||||||
//tme.hwndTrack = NULL;
|
viewHeight = 256;
|
||||||
//tmeList.cbSize = sizeof(tme);
|
|
||||||
//tmeList.dwFlags = TME_LEAVE;
|
g_config->getOption("SDL.TasPianoRollFont", &fontString);
|
||||||
//tmeList.hwndTrack = NULL;
|
|
||||||
|
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)
|
BOOKMARKS::~BOOKMARKS(void)
|
||||||
|
@ -284,6 +300,39 @@ void BOOKMARKS::reset_vars()
|
||||||
nextFlashUpdateTime = clock() + BOOKMARKS_FLASH_TICK;
|
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()
|
void BOOKMARKS::update()
|
||||||
{
|
{
|
||||||
// execute all commands accumulated during last frame
|
// execute all commands accumulated during last frame
|
||||||
|
@ -352,6 +401,8 @@ void BOOKMARKS::update()
|
||||||
itemUnderMouse = ITEM_UNDER_MOUSE_NONE;
|
itemUnderMouse = ITEM_UNDER_MOUSE_NONE;
|
||||||
mustCheckItemUnderMouse = false;
|
mustCheckItemUnderMouse = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QWidget::update();
|
||||||
}
|
}
|
||||||
|
|
||||||
// stores commands in array for update() function
|
// stores commands in array for update() function
|
||||||
|
@ -568,7 +619,9 @@ void BOOKMARKS::redrawBookmarksSectionCaption()
|
||||||
redrawBookmarksList();
|
redrawBookmarksList();
|
||||||
}
|
}
|
||||||
if (prev_edit_mode != editMode)
|
if (prev_edit_mode != editMode)
|
||||||
|
{
|
||||||
mustCheckItemUnderMouse = true;
|
mustCheckItemUnderMouse = true;
|
||||||
|
}
|
||||||
//SetWindowText(hwndBookmarks, bookmarksCaption[editMode]);
|
//SetWindowText(hwndBookmarks, bookmarksCaption[editMode]);
|
||||||
}
|
}
|
||||||
void BOOKMARKS::redrawBookmarksList(bool eraseBG)
|
void BOOKMARKS::redrawBookmarksList(bool eraseBG)
|
||||||
|
@ -605,22 +658,129 @@ void BOOKMARKS::resizeEvent(QResizeEvent *event)
|
||||||
|
|
||||||
void BOOKMARKS::paintEvent(QPaintEvent *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)
|
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)
|
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)
|
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)
|
void BOOKMARKS::handleMouseMove(int newX, int newY)
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <QScrollBar>
|
||||||
|
|
||||||
#include "fceu.h"
|
#include "fceu.h"
|
||||||
#include "Qt/TasEditor/bookmark.h"
|
#include "Qt/TasEditor/bookmark.h"
|
||||||
|
@ -112,10 +113,14 @@ protected:
|
||||||
void mouseReleaseEvent(QMouseEvent * event);
|
void mouseReleaseEvent(QMouseEvent * event);
|
||||||
void mouseMoveEvent(QMouseEvent * event);
|
void mouseMoveEvent(QMouseEvent * event);
|
||||||
|
|
||||||
|
int calcColumn( int px );
|
||||||
|
QPoint convPixToCursor( QPoint p );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void set(int slot);
|
void set(int slot);
|
||||||
void jump(int slot);
|
void jump(int slot);
|
||||||
void deploy(int slot);
|
void deploy(int slot);
|
||||||
|
void calcFontData(void);
|
||||||
|
|
||||||
// not saved vars
|
// not saved vars
|
||||||
std::vector<int> commands;
|
std::vector<int> commands;
|
||||||
|
@ -126,7 +131,26 @@ private:
|
||||||
// GDI stuff
|
// GDI stuff
|
||||||
//HFONT hBookmarksFont;
|
//HFONT hBookmarksFont;
|
||||||
//HIMAGELIST hImgList;
|
//HIMAGELIST hImgList;
|
||||||
|
QFont font;
|
||||||
|
QScrollBar *hbar;
|
||||||
|
QScrollBar *vbar;
|
||||||
|
|
||||||
int viewWidth;
|
int viewWidth;
|
||||||
int viewHeight;
|
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;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue