Qt virtual family keyboard is now functional.
This commit is contained in:
parent
a6c6dd048c
commit
6c42f9588c
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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", "");
|
||||
|
|
Loading…
Reference in New Issue