diff --git a/src/getkey.cpp b/src/getkey.cpp deleted file mode 100644 index 94e7bc9..0000000 --- a/src/getkey.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include -#include "config.h" -#include "getkey.h" - -int GetKey::getKey(const QString& button, bool useMouse, bool *isMouse, QWidget *parent) { - GetKey getkey(button, useMouse, parent); - if (getkey.exec() == QDialog::Accepted) { - if (isMouse) { - *isMouse = getkey.choseMouse(); - } - return getkey.getValue(); - } - return -1; -} - - -GetKey::GetKey(const QString &button, bool useMouse, QWidget *parent) - : QDialog( parent ), useMouse(useMouse), wasMouse(false), value(-1) -{ - //prepare the dialog - setWindowTitle( tr("Choose a key") ); - setWindowIcon(QIcon(QJOYPAD_ICON24)); - - //I'd use a QLabel, but that steals x11Events! - //So, I'll draw the text directly. That means - //I need to resolve the size of the dialog by hand: - text = (useMouse ? tr("Choose a new key or mouse button for %1") : tr("Choose a new key for %1")).arg(button); - QRect rect = fontMetrics().boundingRect( text ); - //I calculate the size based on the first line of text, which is longer. - //The fontMetrics function is dumb and would treat the string with a - //newline in it as a continues flow of characters if I did the whole string - //at once. - text += tr("\n(Ctrl-X for no key)"); - //now I add 20 pixels of padding and double the height to make room for - //two lines. - setFixedSize(rect.width() + 20, rect.height()*2 + 20); -} - -bool GetKey::x11Event( XEvent* e ) -{ - //keep Qt from closing the dialog upon seeing Esc pressed. - if (e->type == KeyPress) return true; - //On a key press, return the key and quit - //Ctrl+X == [No Key] - if (e->type == KeyRelease) { - wasMouse = false; - if (XKeycodeToKeysym(QX11Info::display(),e->xkey.keycode,0) == XK_x) { - if (e->xkey.state & ControlMask) { - value = 0; - accept(); - } - else { - value = e->xkey.keycode; - accept(); - } - } - else { - value = e->xkey.keycode; - accept(); - } - return true; - } - //if we're accepting mouse clicks and a mouse button was clicked... - if (useMouse && e->type == ButtonRelease) { - wasMouse = true; - value = e->xbutton.button; - accept(); - return true; - } - - //any other events we will pass on to the dialog. This allows for closing - //the window and easy redrawing :) - return false; -} - -void GetKey::paintEvent ( QPaintEvent * ) { - //whenever we need to repaint, draw in our text. - QPainter paint( this ); - paint.drawText( rect(), Qt::AlignCenter, text ); -} diff --git a/src/getkey.h b/src/getkey.h deleted file mode 100644 index 24c5b51..0000000 --- a/src/getkey.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef QJOYPAD_GETKEY_H -#define QJOYPAD_GETKEY_H - -#include -#include -#include -#include -#include -#include "constant.h" - -#include -// undefined Xlib macros that collide with Qt types -#undef Bool -#undef Unsorted - -//The KeySym for "x" -#define XK_x 0x078 - -//a keycode dialog box -class GetKey : public QDialog { - Q_OBJECT - public: - GetKey(const QString& button, bool useMouse = false, QWidget *parent = 0); - - static int getKey(const QString& button, bool useMouse, bool *choseMouse, QWidget *parent = 0); - - int getValue() const { return value; } - bool choseMouse() const { return wasMouse; } - protected: - //to filter through every event this thing sees, before Qt does. - bool x11Event( XEvent* e ); - //to avoid focus issues, there is only the dialog widget, all the - //rest is painted on. So, I need to know when to repaint. - void paintEvent (QPaintEvent *); - private: - //the dialog's message - QString text; - //does this dialog accept mouse clicks? - bool useMouse; - bool wasMouse; - int value; -}; - -#endif