Qt virtual family keyboard is now functional.

This commit is contained in:
mjbudd77 2022-03-05 22:08:40 -05:00
parent a6c6dd048c
commit 6c42f9588c
5 changed files with 182 additions and 6 deletions

View File

@ -66,6 +66,7 @@
#include "Qt/ConsoleWindow.h"
#include "Qt/InputConf.h"
#include "Qt/GamePadConf.h"
#include "Qt/FamilyKeyboard.h"
#include "Qt/HotKeyConf.h"
#include "Qt/PaletteConf.h"
#include "Qt/PaletteEditor.h"
@ -1415,6 +1416,16 @@ void consoleWin_t::createMainMenu(void)
emuMenu->addSeparator();
// Emulation -> Virtual Family Keyboard
act = new QAction(tr("Virtual Family Keyboard"), this);
//act->setShortcut( QKeySequence(tr("Ctrl+G")));
act->setStatusTip(tr("Virtual Family Keyboard"));
connect(act, SIGNAL(triggered()), this, SLOT(openFamilyKeyboard(void)) );
emuMenu->addAction(act);
emuMenu->addSeparator();
// Emulation -> Insert Coin
insCoinAct = new QAction(tr("&Insert Coin"), this);
//insCoinAct->setShortcut( QKeySequence(tr("Ctrl+G")));
@ -3377,6 +3388,12 @@ void consoleWin_t::loadGameGenieROM(void)
return;
}
void consoleWin_t::openFamilyKeyboard(void)
{
openFamilyKeyboardDialog(this);
return;
}
void consoleWin_t::insertCoin(void)
{
FCEU_WRAPPER_LOCK();

View File

@ -348,6 +348,7 @@ class consoleWin_t : public QMainWindow
void openMovieOptWin(void);
void openCodeDataLogger(void);
void openTraceLogger(void);
void openFamilyKeyboard(void);
void toggleAutoResume(void);
void updatePeriodic(void);
void changeState0(void);

View File

@ -27,6 +27,7 @@
#include <QFontMetrics>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFontDialog>
#include "Qt/main.h"
#include "Qt/dface.h"
@ -34,6 +35,7 @@
#include "Qt/config.h"
#include "Qt/keyscan.h"
#include "Qt/fceuWrapper.h"
#include "Qt/ConsoleWindow.h"
#include "Qt/FamilyKeyboard.h"
static const char *keyNames[] =
@ -114,6 +116,7 @@ static const char *keyNames[] =
};
static FKBConfigDialog *fkbWin = NULL;
static bool fkbActv = false;
//*********************************************************************************
int openFamilyKeyboardDialog(QWidget *parent)
{
@ -148,6 +151,7 @@ FamilyKeyboardWidget::FamilyKeyboardWidget( QWidget *parent )
std::string fontString;
setMouseTracking(true);
setFocusPolicy(Qt::StrongFocus);
g_config->getOption("SDL.FamilyKeyboardFont", &fontString);
@ -170,6 +174,10 @@ FamilyKeyboardWidget::FamilyKeyboardWidget( QWidget *parent )
keyPressed = -1;
keyUnderMouse = -1;
// Set Shift Keys to Toggle State On Press
key[50].toggleOnPress = true;
key[62].toggleOnPress = true;
updateTimer = new QTimer(this);
connect(updateTimer, &QTimer::timeout, this, &FamilyKeyboardWidget::updatePeriodic);
@ -183,6 +191,13 @@ FamilyKeyboardWidget::~FamilyKeyboardWidget(void)
}
//*********************************************************************************
void FamilyKeyboardWidget::setFont( const QFont &newFont )
{
QWidget::setFont(newFont);
calcFontData();
}
//*********************************************************************************
void FamilyKeyboardWidget::calcFontData(void)
{
QWidget::setFont(font());
@ -282,6 +297,28 @@ void FamilyKeyboardWidget::mouseDoubleClickEvent(QMouseEvent * event)
keyUnderMouse = getKeyAtPoint(event->pos());
}
//*********************************************************************************
void FamilyKeyboardWidget::leaveEvent(QEvent *event)
{
keyUnderMouse = -1;
update();
}
//*********************************************************************************
void FamilyKeyboardWidget::keyPressEvent(QKeyEvent *event)
{
//printf("Key Press: 0x%x \n", event->key() );
pushKeyEvent( event, 1 );
event->accept();
}
//*********************************************************************************
void FamilyKeyboardWidget::keyReleaseEvent(QKeyEvent *event)
{
//printf("Key Release: 0x%x \n", event->key() );
pushKeyEvent( event, 0 );
event->accept();
}
//*********************************************************************************
void FamilyKeyboardWidget::drawButton( QPainter &painter, int idx, int x, int y, int w, int h )
{
int i = idx;
@ -478,15 +515,20 @@ FKBConfigDialog::FKBConfigDialog(QWidget *parent)
QHBoxLayout *hbox;
QPushButton *closeButton;
QTreeWidgetItem *item;
QMenuBar *menuBar;
setWindowTitle( "Family Keyboard Config" );
setWindowTitle( "Family Keyboard" );
mainVbox = new QVBoxLayout();
mainVbox->addWidget( keyboard = new FamilyKeyboardWidget() );
setLayout( mainVbox );
menuBar = buildMenuBar();
mainVbox->setMenuBar( menuBar );
keyboard = new FamilyKeyboardWidget();
mainVbox->addWidget( keyboard );
keyTree = new QTreeWidget();
keyTree->setColumnCount(2);
@ -519,22 +561,96 @@ FKBConfigDialog::FKBConfigDialog(QWidget *parent)
mainVbox->addWidget( keyTree );
keyTree->hide();
hbox = new QHBoxLayout();
mainVbox->addLayout( hbox );
statLbl = new QLabel();
closeButton = new QPushButton( tr("Close") );
closeButton->setIcon(style()->standardIcon(QStyle::SP_DialogCloseButton));
closeButton->setAutoDefault(false);
hbox->addWidget(statLbl, 3);
hbox->addStretch(5);
hbox->addWidget( closeButton, 1);
connect(closeButton , SIGNAL(clicked(void)), this, SLOT(closeWindow(void)));
updateTimer = new QTimer(this);
connect(updateTimer, &QTimer::timeout, this, &FKBConfigDialog::updatePeriodic);
updateTimer->start(500); // 2hz
updateStatusLabel();
}
//----------------------------------------------------------------------------
FKBConfigDialog::~FKBConfigDialog(void)
{
fkbWin = NULL;
updateTimer->stop();
}
//----------------------------------------------------------------------------
QMenuBar *FKBConfigDialog::buildMenuBar(void)
{
QMenu *fileMenu, *confMenu;
//QActionGroup *actGroup;
QAction *act;
int useNativeMenuBar=0;
QMenuBar *menuBar = new consoleMenuBar(this);
// This is needed for menu bar to show up on MacOS
g_config->getOption( "SDL.UseNativeMenuBar", &useNativeMenuBar );
menuBar->setNativeMenuBar( useNativeMenuBar ? true : false );
//-----------------------------------------------------------------------
// Menu Start
//-----------------------------------------------------------------------
// File
fileMenu = menuBar->addMenu(tr("File"));
// File -> Close
act = new QAction(tr("Close"), this);
act->setShortcut(QKeySequence::Close);
act->setStatusTip(tr("Close Window"));
connect(act, SIGNAL(triggered()), this, SLOT(closeWindow(void)) );
fileMenu->addAction(act);
// Config
confMenu = menuBar->addMenu(tr("Config"));
// Config -> Font
act = new QAction(tr("Font"), this);
//act->setShortcut(QKeySequence::Close);
act->setStatusTip(tr("Choose Font"));
connect(act, SIGNAL(triggered()), this, SLOT(openFontDialog(void)) );
confMenu->addAction(act);
return menuBar;
}
//*********************************************************************************
void FKBConfigDialog::openFontDialog(void)
{
bool ok = false;
QFont selFont = QFontDialog::getFont( &ok, keyboard->QWidget::font(), this, tr("Select Font"), QFontDialog::MonospacedFonts );
if ( ok )
{
keyboard->setFont( selFont );
keyboard->update();
//printf("Font Changed to: '%s'\n", font.toString().toStdString().c_str() );
g_config->setOption("SDL.FamilyKeyboardFont", selFont.toString().toStdString().c_str() );
}
}
//----------------------------------------------------------------------------
void FKBConfigDialog::updateBindingList(void)
@ -560,6 +676,30 @@ void FKBConfigDialog::updateBindingList(void)
}
}
//----------------------------------------------------------------------------
void FKBConfigDialog::updatePeriodic(void)
{
bool tmpFkbActv = isFamilyKeyboardActv();
if ( tmpFkbActv != fkbActv )
{
fkbActv = tmpFkbActv;
updateStatusLabel();
}
}
//----------------------------------------------------------------------------
void FKBConfigDialog::updateStatusLabel(void)
{
if ( fkbActv )
{
statLbl->setText( tr("Family Keyboard is enabled") );
}
else
{
statLbl->setText( tr("Family Keyboard is disabled") );
}
}
//----------------------------------------------------------------------------
void FKBConfigDialog::closeEvent(QCloseEvent *event)
{
printf("FKB Config Close Window Event\n");

View File

@ -4,6 +4,10 @@
#include <QPushButton>
#include <QMouseEvent>
#include <QTreeWidget>
#include <QAction>
#include <QMenuBar>
#include <QMenu>
#include <QLabel>
#include <QTimer>
#include <QFont>
@ -64,14 +68,17 @@ public:
FKB_Key_t key[NUM_KEYS];
void setFont( const QFont &newFont );
protected:
//void keyPressEvent(QKeyEvent *event);
//void kepaintEvent(QPaintEvent *event);
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
void paintEvent(QPaintEvent *event) override;
void mousePressEvent(QMouseEvent * event) override;
void mouseReleaseEvent(QMouseEvent * event) override;
void mouseMoveEvent(QMouseEvent * event) override;
void mouseDoubleClickEvent(QMouseEvent * event) override;
void leaveEvent(QEvent *event) override;
int getKeyAtPoint( QPoint p );
void calcFontData(void);
@ -105,11 +112,21 @@ protected:
void closeEvent(QCloseEvent *event);
void updateBindingList(void);
QMenuBar *buildMenuBar(void);
QTreeWidget *keyTree;
QLabel *statLbl;
QTimer *updateTimer;
public slots:
void closeWindow(void);
private slots:
void updatePeriodic(void);
void updateStatusLabel(void);
void openFontDialog(void);
};
int openFamilyKeyboardDialog( QWidget *parent );

View File

@ -695,6 +695,7 @@ InitConfig()
config->addOption("no-config", "SDL.NoConfig", 0);
config->addOption("autoresume", "SDL.AutoResume", 0);
config->addOption("SDL.FamilyKeyboardFont" , "");
// video playback
config->addOption("playmov", "SDL.Movie", "");