Add KeyDialog class
This will take care of reading user input. TODO: Correct mouse buttons values, they do not match Xtest values.
This commit is contained in:
@ -17,6 +17,7 @@ set(qjoypad_SOURCES
|
|||||||
joypadw.cpp
|
joypadw.cpp
|
||||||
joyslider.cpp
|
joyslider.cpp
|
||||||
keycode.cpp
|
keycode.cpp
|
||||||
|
keydialog.cpp
|
||||||
layout.cpp
|
layout.cpp
|
||||||
layout_edit.cpp
|
layout_edit.cpp
|
||||||
main.cpp
|
main.cpp
|
||||||
@ -36,6 +37,7 @@ set(qjoypad_QOBJECT_HEADERS
|
|||||||
joypadw.h
|
joypadw.h
|
||||||
joyslider.h
|
joyslider.h
|
||||||
keycode.h
|
keycode.h
|
||||||
|
keydialog.hpp
|
||||||
layout_edit.h
|
layout_edit.h
|
||||||
layout.h
|
layout.h
|
||||||
quickset.h)
|
quickset.h)
|
||||||
|
74
src/keydialog.cpp
Normal file
74
src/keydialog.cpp
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
#include "keydialog.hpp"
|
||||||
|
|
||||||
|
#include <QGuiApplication>
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
|
KeyDialog::KeyDialog( const QString& button, bool m, QWidget* parent ) :
|
||||||
|
QDialog( parent ),
|
||||||
|
m_acceptMouse( m ),
|
||||||
|
m_text( this ),
|
||||||
|
m_isMouse( false ),
|
||||||
|
m_value( 0 )
|
||||||
|
{
|
||||||
|
setWindowTitle( "Choose a key" );
|
||||||
|
m_text.setText( QString( "Choose a new key %1for %2\n(Ctrl-X for no key)" ).
|
||||||
|
arg( m ? "or mouse button " : "" ).arg( button ) );
|
||||||
|
m_text.adjustSize();
|
||||||
|
setFixedSize( m_text.width() + 20, m_text.height() + 20 );
|
||||||
|
m_text.move( 10, 10 );
|
||||||
|
}
|
||||||
|
|
||||||
|
int KeyDialog::getKey( const QString& button, bool acceptMouse, bool* mouseOut, QWidget* parent ) {
|
||||||
|
bool isMouse = false;
|
||||||
|
quint32 value = 0;
|
||||||
|
|
||||||
|
QPointer<KeyDialog> dialog = new KeyDialog( button, acceptMouse, parent );
|
||||||
|
if ( dialog->exec() != QDialog::Accepted ) {
|
||||||
|
delete dialog;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ( !dialog ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
isMouse = dialog->m_isMouse;
|
||||||
|
value = dialog->m_value;
|
||||||
|
delete dialog;
|
||||||
|
|
||||||
|
if ( mouseOut ) {
|
||||||
|
*mouseOut = isMouse;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeyDialog::keyReleaseEvent( QKeyEvent* event ) {
|
||||||
|
if ( event->key() != Qt::Key_Control ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_value = event->nativeScanCode();
|
||||||
|
m_isMouse = false;
|
||||||
|
accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeyDialog::keyPressEvent( QKeyEvent* event ) {
|
||||||
|
if ( event->key() == Qt::Key_Control ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ( event->key() == Qt::Key_X && QGuiApplication::keyboardModifiers() == Qt::ControlModifier ) {
|
||||||
|
m_value = 0;
|
||||||
|
} else {
|
||||||
|
m_value = event->nativeScanCode();
|
||||||
|
}
|
||||||
|
m_isMouse = false;
|
||||||
|
accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeyDialog::mouseReleaseEvent( QMouseEvent* event ) {
|
||||||
|
if ( !m_acceptMouse ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// TODO: correct Qt::MouseButton to XTst equivalent
|
||||||
|
m_value = event->button();
|
||||||
|
m_isMouse = true;
|
||||||
|
accept();
|
||||||
|
}
|
27
src/keydialog.hpp
Normal file
27
src/keydialog.hpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QString>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QKeyEvent>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
|
||||||
|
class KeyDialog : public QDialog {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool m_acceptMouse;
|
||||||
|
QLabel m_text;
|
||||||
|
|
||||||
|
bool m_isMouse;
|
||||||
|
quint32 m_value;
|
||||||
|
|
||||||
|
KeyDialog( const QString& button, bool m = false, QWidget* parent = 0 );
|
||||||
|
void keyPressEvent( QKeyEvent* );
|
||||||
|
void keyReleaseEvent( QKeyEvent* );
|
||||||
|
void mouseReleaseEvent( QMouseEvent* );
|
||||||
|
|
||||||
|
public:
|
||||||
|
static int getKey( const QString& button, bool acceptMouse = false, bool* mousePressed = 0, QWidget* parent = 0 );
|
||||||
|
|
||||||
|
};
|
Reference in New Issue
Block a user