Added logic to show shifted key characters on Qt virtual keyboard when shift is held down.
This commit is contained in:
parent
540b62f487
commit
0f25a40b93
|
@ -41,79 +41,79 @@
|
||||||
|
|
||||||
static const char *keyNames[] =
|
static const char *keyNames[] =
|
||||||
{
|
{
|
||||||
"F1",
|
"F1", "F1",
|
||||||
"F2",
|
"F2", "F2",
|
||||||
"F3",
|
"F3", "F3",
|
||||||
"F4",
|
"F4", "F4",
|
||||||
"F5",
|
"F5", "F5",
|
||||||
"F6",
|
"F6", "F6",
|
||||||
"F7",
|
"F7", "F7",
|
||||||
"F8",
|
"F8", "F8",
|
||||||
"1",
|
"1", "!",
|
||||||
"2",
|
"2", "\"",
|
||||||
"3",
|
"3", "#",
|
||||||
"4",
|
"4", "$",
|
||||||
"5",
|
"5", "%",
|
||||||
"6",
|
"6", "&",
|
||||||
"7",
|
"7", "'",
|
||||||
"8",
|
"8", "(",
|
||||||
"9",
|
"9", ")",
|
||||||
"0",
|
"0", "0",
|
||||||
"-",
|
"-", "=",
|
||||||
"^",
|
"^", "^",
|
||||||
"\\",
|
"¥", "¥",
|
||||||
"STP",
|
"STOP", "STOP",
|
||||||
"ESC",
|
"ESC", "ESC",
|
||||||
"Q",
|
"Q", "Q",
|
||||||
"W",
|
"W", "W",
|
||||||
"E",
|
"E", "E",
|
||||||
"R",
|
"R", "R",
|
||||||
"T",
|
"T", "T",
|
||||||
"Y",
|
"Y", "Y",
|
||||||
"U",
|
"U", "U",
|
||||||
"I",
|
"I", "I",
|
||||||
"O",
|
"O", "O",
|
||||||
"P",
|
"P", "P",
|
||||||
"@",
|
"@", "@",
|
||||||
"[",
|
"[", "[",
|
||||||
"RETURN",
|
"RETURN", "RETURN",
|
||||||
"CTR",
|
"CTR", "CTR",
|
||||||
"A",
|
"A", "A",
|
||||||
"S",
|
"S", "S",
|
||||||
"D",
|
"D", "D",
|
||||||
"F",
|
"F", "F",
|
||||||
"G",
|
"G", "G",
|
||||||
"H",
|
"H", "H",
|
||||||
"J",
|
"J", "J",
|
||||||
"K",
|
"K", "K",
|
||||||
"L",
|
"L", "L",
|
||||||
";",
|
";", "+",
|
||||||
":",
|
":", "*",
|
||||||
"]",
|
"]", "]",
|
||||||
"KANA",
|
"KANA", "KANA",
|
||||||
"SHIFT",
|
"SHIFT", "SHIFT",
|
||||||
"Z",
|
"Z", "Z",
|
||||||
"X",
|
"X", "X",
|
||||||
"C",
|
"C", "C",
|
||||||
"V",
|
"V", "V",
|
||||||
"B",
|
"B", "B",
|
||||||
"N",
|
"N", "N",
|
||||||
"M",
|
"M", "M",
|
||||||
",",
|
",", "<",
|
||||||
".",
|
".", ">",
|
||||||
"/",
|
"/", "?",
|
||||||
"_",
|
"_", "_",
|
||||||
"SHIFT",
|
"SHIFT", "SHIFT",
|
||||||
"GRPH",
|
"GRPH", "GRPH",
|
||||||
"SPACE",
|
"SPACE", "SPACE",
|
||||||
"CLR",
|
"HOM", "CLR",
|
||||||
"INS",
|
"INS", "INS",
|
||||||
"DEL",
|
"DEL", "DEL",
|
||||||
"UP",
|
"UP", "UP",
|
||||||
"LEFT",
|
"LEFT", "LEFT",
|
||||||
"RIGHT",
|
"RIGHT", "RIGHT",
|
||||||
"DOWN",
|
"DOWN", "DOWN",
|
||||||
NULL
|
NULL, NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static FKBConfigDialog *fkbWin = NULL;
|
static FKBConfigDialog *fkbWin = NULL;
|
||||||
|
@ -174,6 +174,7 @@ FamilyKeyboardWidget::FamilyKeyboardWidget( QWidget *parent )
|
||||||
|
|
||||||
keyPressed = -1;
|
keyPressed = -1;
|
||||||
keyUnderMouse = -1;
|
keyUnderMouse = -1;
|
||||||
|
ctxMenuKey = -1;
|
||||||
|
|
||||||
// Set Shift Keys to Toggle State On Press
|
// Set Shift Keys to Toggle State On Press
|
||||||
key[50].toggleOnPress = true;
|
key[50].toggleOnPress = true;
|
||||||
|
@ -260,7 +261,7 @@ void FamilyKeyboardWidget::mousePressEvent(QMouseEvent * event)
|
||||||
{
|
{
|
||||||
keyPressed = keyUnderMouse = getKeyAtPoint(event->pos());
|
keyPressed = keyUnderMouse = getKeyAtPoint(event->pos());
|
||||||
|
|
||||||
if ( keyPressed >= 0 )
|
if ( (keyPressed >= 0) && (event->button() == Qt::LeftButton) )
|
||||||
{
|
{
|
||||||
key[ keyPressed ].pressed();
|
key[ keyPressed ].pressed();
|
||||||
}
|
}
|
||||||
|
@ -304,6 +305,44 @@ void FamilyKeyboardWidget::leaveEvent(QEvent *event)
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
//*********************************************************************************
|
//*********************************************************************************
|
||||||
|
void FamilyKeyboardWidget::contextMenuEvent(QContextMenuEvent *event)
|
||||||
|
{
|
||||||
|
ctxMenuKey = keyUnderMouse = getKeyAtPoint(event->pos());
|
||||||
|
|
||||||
|
if ( keyUnderMouse < 0 )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QAction *act;
|
||||||
|
QMenu menu(this);
|
||||||
|
|
||||||
|
act = new QAction(tr("Map Key"), &menu);
|
||||||
|
//act->setShortcut( QKeySequence(tr("E")));
|
||||||
|
connect( act, SIGNAL(triggered(void)), this, SLOT(ctxMapPhysicalKey(void)) );
|
||||||
|
menu.addAction( act );
|
||||||
|
|
||||||
|
act = new QAction(tr("Toggle State on Press"), &menu);
|
||||||
|
act->setCheckable(true);
|
||||||
|
act->setChecked( key[ ctxMenuKey ].toggleOnPress );
|
||||||
|
//act->setShortcut( QKeySequence(tr("E")));
|
||||||
|
connect( act, SIGNAL(triggered(void)), this, SLOT(ctxChangeToggleOnPress(void)) );
|
||||||
|
menu.addAction( act );
|
||||||
|
|
||||||
|
menu.exec(event->globalPos());
|
||||||
|
|
||||||
|
event->accept();
|
||||||
|
}
|
||||||
|
//*********************************************************************************
|
||||||
|
void FamilyKeyboardWidget::ctxMapPhysicalKey(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
//*********************************************************************************
|
||||||
|
void FamilyKeyboardWidget::ctxChangeToggleOnPress(void)
|
||||||
|
{
|
||||||
|
key[ ctxMenuKey ].toggleOnPress = !key[ ctxMenuKey ].toggleOnPress;
|
||||||
|
}
|
||||||
|
//*********************************************************************************
|
||||||
void FamilyKeyboardWidget::keyPressEvent(QKeyEvent *event)
|
void FamilyKeyboardWidget::keyPressEvent(QKeyEvent *event)
|
||||||
{
|
{
|
||||||
//printf("Key Press: 0x%x \n", event->key() );
|
//printf("Key Press: 0x%x \n", event->key() );
|
||||||
|
@ -322,7 +361,7 @@ void FamilyKeyboardWidget::keyReleaseEvent(QKeyEvent *event)
|
||||||
//*********************************************************************************
|
//*********************************************************************************
|
||||||
void FamilyKeyboardWidget::drawButton( QPainter &painter, int idx, int x, int y, int w, int h )
|
void FamilyKeyboardWidget::drawButton( QPainter &painter, int idx, int x, int y, int w, int h )
|
||||||
{
|
{
|
||||||
int i = idx;
|
int i = idx, j;
|
||||||
QColor bgColor;
|
QColor bgColor;
|
||||||
|
|
||||||
key[i].rect = QRect( x, y, w, h );
|
key[i].rect = QRect( x, y, w, h );
|
||||||
|
@ -350,8 +389,15 @@ void FamilyKeyboardWidget::drawButton( QPainter &painter, int idx, int x, int y,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
j = i*2;
|
||||||
|
|
||||||
|
if ( key[50].isDown() || key[62].isDown() )
|
||||||
|
{
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
painter.fillRect( key[i].rect, bgColor );
|
painter.fillRect( key[i].rect, bgColor );
|
||||||
painter.drawText( key[i].rect, Qt::AlignCenter, tr(keyNames[i]) );
|
painter.drawText( key[i].rect, Qt::AlignCenter, tr(keyNames[j]) );
|
||||||
painter.drawRect( key[i].rect );
|
painter.drawRect( key[i].rect );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -386,13 +432,15 @@ void FamilyKeyboardWidget::paintEvent(QPaintEvent *event)
|
||||||
|
|
||||||
xs = w / 4;
|
xs = w / 4;
|
||||||
|
|
||||||
for (i=8; i<22; i++)
|
for (i=8; i<21; i++)
|
||||||
{
|
{
|
||||||
drawButton( painter, i, x, y, w, h );
|
drawButton( painter, i, x, y, w, h );
|
||||||
|
|
||||||
x += (w + xs);
|
x += (w + xs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drawButton( painter, 21, x, y, w*2, h );
|
||||||
|
|
||||||
// Row 3
|
// Row 3
|
||||||
x = pxBtnGridX / 2;
|
x = pxBtnGridX / 2;
|
||||||
y += pxBtnGridY + ys;
|
y += pxBtnGridY + ys;
|
||||||
|
|
|
@ -79,12 +79,14 @@ protected:
|
||||||
void mouseMoveEvent(QMouseEvent * event) override;
|
void mouseMoveEvent(QMouseEvent * event) override;
|
||||||
void mouseDoubleClickEvent(QMouseEvent * event) override;
|
void mouseDoubleClickEvent(QMouseEvent * event) override;
|
||||||
void leaveEvent(QEvent *event) override;
|
void leaveEvent(QEvent *event) override;
|
||||||
|
void contextMenuEvent(QContextMenuEvent *event) override;
|
||||||
|
|
||||||
int getKeyAtPoint( QPoint p );
|
int getKeyAtPoint( QPoint p );
|
||||||
void calcFontData(void);
|
void calcFontData(void);
|
||||||
void updateHardwareStatus(void);
|
void updateHardwareStatus(void);
|
||||||
void drawButton( QPainter &painter, int idx, int x, int y, int w, int h );
|
void drawButton( QPainter &painter, int idx, int x, int y, int w, int h );
|
||||||
|
|
||||||
|
int ctxMenuKey;
|
||||||
int keyUnderMouse;
|
int keyUnderMouse;
|
||||||
int keyPressed;
|
int keyPressed;
|
||||||
int pxCharWidth;
|
int pxCharWidth;
|
||||||
|
@ -96,6 +98,8 @@ protected:
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void updatePeriodic(void);
|
void updatePeriodic(void);
|
||||||
|
void ctxMapPhysicalKey(void);
|
||||||
|
void ctxChangeToggleOnPress(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
class FKBConfigDialog : public QDialog
|
class FKBConfigDialog : public QDialog
|
||||||
|
|
Loading…
Reference in New Issue