Added logic to display family keyboard key binding tree view for Qt GUI.

This commit is contained in:
mjbudd77 2022-03-06 07:17:24 -05:00
parent 0f25a40b93
commit a9a8898677
2 changed files with 221 additions and 5 deletions

View File

@ -224,7 +224,7 @@ void FamilyKeyboardWidget::calcFontData(void)
{ {
pxBtnGridY++; pxBtnGridY++;
} }
setMinimumWidth( pxBtnGridX * 25 ); setMinimumWidth( pxBtnGridX * 26 );
setMinimumHeight( pxBtnGridY * 8 ); setMinimumHeight( pxBtnGridY * 8 );
} }
//********************************************************************************* //*********************************************************************************
@ -336,6 +336,15 @@ void FamilyKeyboardWidget::contextMenuEvent(QContextMenuEvent *event)
//********************************************************************************* //*********************************************************************************
void FamilyKeyboardWidget::ctxMapPhysicalKey(void) void FamilyKeyboardWidget::ctxMapPhysicalKey(void)
{ {
FKBKeyMapDialog *mapDialog = new FKBKeyMapDialog( ctxMenuKey, this );
mapDialog->show();
mapDialog->enterButtonLoop();
if ( fkbWin )
{
fkbWin->updateBindingList();
}
} }
//********************************************************************************* //*********************************************************************************
void FamilyKeyboardWidget::ctxChangeToggleOnPress(void) void FamilyKeyboardWidget::ctxChangeToggleOnPress(void)
@ -611,8 +620,6 @@ FKBConfigDialog::FKBConfigDialog(QWidget *parent)
mainVbox->addWidget( keyTree ); mainVbox->addWidget( keyTree );
keyTree->hide();
hbox = new QHBoxLayout(); hbox = new QHBoxLayout();
mainVbox->addLayout( hbox ); mainVbox->addLayout( hbox );
@ -626,6 +633,19 @@ FKBConfigDialog::FKBConfigDialog(QWidget *parent)
hbox->addStretch(5); hbox->addStretch(5);
hbox->addWidget( closeButton, 1); hbox->addWidget( closeButton, 1);
//keyTree->hide();
keyTree->setMinimumHeight(0);
keyTree->setMaximumHeight(0);
keyTreeHgtAnimation = new QPropertyAnimation( keyTree, "maximumHeight", this);
keyTreeHgtAnimation->setDuration(500);
keyTreeHgtAnimation->setStartValue(0);
keyTreeHgtAnimation->setEndValue(512);
keyTreeHgtAnimation->setEasingCurve( QEasingCurve::InOutCirc );
connect( keyTreeHgtAnimation, SIGNAL(valueChanged(const QVariant &)), this, SLOT(keyTreeHeightChange(const QVariant &)));
connect( keyTreeHgtAnimation, SIGNAL(finished(void)), this, SLOT(keyTreeResizeDone(void)) );
connect(closeButton , SIGNAL(clicked(void)), this, SLOT(closeWindow(void))); connect(closeButton , SIGNAL(clicked(void)), this, SLOT(closeWindow(void)));
updateTimer = new QTimer(this); updateTimer = new QTimer(this);
@ -654,7 +674,7 @@ FKBConfigDialog::~FKBConfigDialog(void)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
QMenuBar *FKBConfigDialog::buildMenuBar(void) QMenuBar *FKBConfigDialog::buildMenuBar(void)
{ {
QMenu *fileMenu, *confMenu; QMenu *fileMenu, *confMenu, *viewMenu;
//QActionGroup *actGroup; //QActionGroup *actGroup;
QAction *act; QAction *act;
int useNativeMenuBar=0; int useNativeMenuBar=0;
@ -691,6 +711,19 @@ QMenuBar *FKBConfigDialog::buildMenuBar(void)
confMenu->addAction(act); confMenu->addAction(act);
// View
viewMenu = menuBar->addMenu(tr("View"));
// View -> Show Key Binding Tree
act = new QAction(tr("Show Key Binding Tree"), this);
act->setCheckable(true);
act->setChecked(false);
//act->setShortcut(QKeySequence::Close);
act->setStatusTip(tr("Show Key Binding Tree"));
connect(act, SIGNAL(triggered(bool)), this, SLOT(toggleTreeView(bool)) );
viewMenu->addAction(act);
return menuBar; return menuBar;
} }
//********************************************************************************* //*********************************************************************************
@ -711,6 +744,44 @@ void FKBConfigDialog::openFontDialog(void)
} }
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void FKBConfigDialog::toggleTreeView(bool state)
{
if ( state )
{
keyTreeHgtAnimation->setStartValue(0);
keyTreeHgtAnimation->setEndValue(512);
keyTreeHgtAnimation->start();
}
else
{
keyTree->setMinimumHeight( 0 );
keyTreeHgtAnimation->setStartValue( keyTree->height() );
keyTreeHgtAnimation->setEndValue(0);
keyTreeHgtAnimation->start();
}
}
//----------------------------------------------------
void FKBConfigDialog::keyTreeHeightChange(const QVariant &value)
{
int val = value.toInt();
if ( val > 256 )
{
keyTree->setMinimumHeight( 256 );
}
else
{
keyTree->setMinimumHeight( val );
}
resize( minimumSizeHint() );
}
//----------------------------------------------------
void FKBConfigDialog::keyTreeResizeDone(void)
{
resize( minimumSizeHint() );
}
//----------------------------------------------------------------------------
void FKBConfigDialog::updateBindingList(void) void FKBConfigDialog::updateBindingList(void)
{ {
char keyNameStr[128]; char keyNameStr[128];
@ -774,3 +845,115 @@ void FKBConfigDialog::closeWindow(void)
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
//********************************************************************************* //*********************************************************************************
//****** Key Mapping Window
//*********************************************************************************
FKBKeyMapDialog::FKBKeyMapDialog( int idx, QWidget *parent )
: QDialog( parent )
{
QVBoxLayout *mainLayout;
QHBoxLayout *hbox;
QPushButton *cancelButton;
QLabel *lbl;
char keyMapName[64];
char stmp[128];
setWindowTitle( tr("Family Keyboard Key Mapping") );
setModal(true);
keyIdx = idx;
buttonConfigStatus = 0;
mainLayout = new QVBoxLayout();
hbox = new QHBoxLayout();
setLayout( mainLayout );
sprintf( stmp, "Press a key to set new physical mapping for the '%s' Key", keyNames[idx*2] );
msgLbl = new QLabel( tr(stmp) );
if (fkbmap[ keyIdx ].ButtType == BUTTC_KEYBOARD)
{
snprintf(keyMapName, sizeof(keyMapName), "%s",
SDL_GetKeyName(fkbmap[ keyIdx ].ButtonNum));
}
else
{
strcpy(keyMapName, ButtonName(&fkbmap[ keyIdx ]));
}
lbl = new QLabel( tr("Current Mapping is:") );
curMapLbl = new QLabel( tr(keyMapName) );
hbox->addWidget( lbl );
hbox->addWidget( curMapLbl );
cancelButton = new QPushButton( tr("Cancel") );
cancelButton->setIcon(style()->standardIcon(QStyle::SP_DialogCancelButton));
cancelButton->setAutoDefault(false);
mainLayout->addWidget( msgLbl );
mainLayout->addLayout( hbox );
hbox = new QHBoxLayout();
mainLayout->addLayout( hbox );
hbox->addWidget( cancelButton, 1 );
hbox->addStretch( 4 );
connect( cancelButton, SIGNAL(clicked(void)), this, SLOT(closeWindow(void)) );
}
//*********************************************************************************
FKBKeyMapDialog::~FKBKeyMapDialog(void)
{
buttonConfigStatus = 0;
}
//*********************************************************************************
void FKBKeyMapDialog::enterButtonLoop(void)
{
buttonConfigStatus = 2;
ButtonConfigBegin();
DWaitButton(NULL, &fkbmap[ keyIdx ], &buttonConfigStatus);
ButtonConfigEnd();
buttonConfigStatus = 1;
done(0);
deleteLater();
}
//*********************************************************************************
void FKBKeyMapDialog::closeEvent(QCloseEvent *event)
{
printf("FKB Key Map Close Window Event\n");
buttonConfigStatus = 0;
done(0);
deleteLater();
event->accept();
}
//*********************************************************************************
void FKBKeyMapDialog::closeWindow(void)
{
printf("Close Window\n");
buttonConfigStatus = 0;
done(0);
deleteLater();
}
//*********************************************************************************
void FKBKeyMapDialog::keyPressEvent(QKeyEvent *event)
{
//printf("Key Press: 0x%x \n", event->key() );
pushKeyEvent( event, 1 );
event->accept();
}
//*********************************************************************************
void FKBKeyMapDialog::keyReleaseEvent(QKeyEvent *event)
{
//printf("Key Release: 0x%x \n", event->key() );
pushKeyEvent( event, 0 );
event->accept();
}
//*********************************************************************************

View File

@ -10,6 +10,7 @@
#include <QLabel> #include <QLabel>
#include <QTimer> #include <QTimer>
#include <QFont> #include <QFont>
#include <QPropertyAnimation>
#include "Qt/main.h" #include "Qt/main.h"
@ -102,6 +103,32 @@ private slots:
void ctxChangeToggleOnPress(void); void ctxChangeToggleOnPress(void);
}; };
class FKBKeyMapDialog : public QDialog
{
Q_OBJECT
public:
FKBKeyMapDialog(int idx, QWidget *parent = 0);
~FKBKeyMapDialog(void);
int buttonConfigStatus;
void enterButtonLoop(void);
protected:
void closeEvent(QCloseEvent *event) override;
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
int keyIdx;
QLabel *msgLbl;
QLabel *curMapLbl;
public slots:
void closeWindow(void);
};
class FKBConfigDialog : public QDialog class FKBConfigDialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
@ -112,9 +139,10 @@ public:
FamilyKeyboardWidget *keyboard; FamilyKeyboardWidget *keyboard;
void updateBindingList(void);
protected: protected:
void closeEvent(QCloseEvent *event); void closeEvent(QCloseEvent *event);
void updateBindingList(void);
QMenuBar *buildMenuBar(void); QMenuBar *buildMenuBar(void);
@ -124,6 +152,8 @@ protected:
QTimer *updateTimer; QTimer *updateTimer;
QPropertyAnimation *keyTreeHgtAnimation;
public slots: public slots:
void closeWindow(void); void closeWindow(void);
@ -131,6 +161,9 @@ private slots:
void updatePeriodic(void); void updatePeriodic(void);
void updateStatusLabel(void); void updateStatusLabel(void);
void openFontDialog(void); void openFontDialog(void);
void toggleTreeView(bool);
void keyTreeResizeDone(void);
void keyTreeHeightChange(const QVariant &);
}; };
int openFamilyKeyboardDialog( QWidget *parent ); int openFamilyKeyboardDialog( QWidget *parent );