]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/gui/keygrabber.cpp
Added analog axis support to Gamepad module.
[virtualjaguar] / src / gui / keygrabber.cpp
index 0bea66f33ae636846745f29d5fcd3ba5b220f9b5..b9b285c5248574f47355dfbfd14bbdb5942ddeb7 100644 (file)
@@ -1,10 +1,10 @@
 //
 // keygrabber.cpp - Widget to grab a key and dismiss itself
 //
-// by James L. Hammons
+// by James Hammons
 // (C) 2011 Underground Software
 //
-// JLH = James L. Hammons <jlhamm@acm.org>
+// JLH = James Hammons <jlhamm@acm.org>
 //
 // Who  When        What
 // ---  ----------  -------------------------------------------------------------
 //
 
 #include "keygrabber.h"
+#include "gamepad.h"
 
 
-KeyGrabber::KeyGrabber(QWidget * parent/*= 0*/): QDialog(parent)
+KeyGrabber::KeyGrabber(QWidget * parent/*= 0*/): QDialog(parent),
+       label(new QLabel), timer(new QTimer), buttonDown(false)
 {
-       label = new QLabel(this);
+//     label = new QLabel(this);
        QVBoxLayout * mainLayout = new QVBoxLayout;
        mainLayout->addWidget(label);
        setLayout(mainLayout);
        setWindowTitle(tr("Grab"));
+       connect(timer, SIGNAL(timeout()), this, SLOT(CheckGamepad()));
+       timer->setInterval(100);
+       timer->start();
+
+       // Will this make Mac OSX work???
+       setFocusPolicy(Qt::StrongFocus);
 }
 
+
 KeyGrabber::~KeyGrabber()
 {
+       timer->stop();
 }
 
-//void KeyGrabber::SetText(QString keyText)
+
 void KeyGrabber::SetKeyText(int keyNum)
 {
        char jagButtonName[21][10] = { "Up", "Down", "Left", "Right",
@@ -39,8 +49,40 @@ void KeyGrabber::SetKeyText(int keyNum)
        label->setText(text);
 }
 
+
 void KeyGrabber::keyPressEvent(QKeyEvent * e)
 {
        key = e->key();
-       accept();
+
+       // Since this is problematic, we don't allow this key...
+       if (key != Qt::Key_Alt)
+               accept();
+}
+
+
+void KeyGrabber::CheckGamepad(void)
+{
+       // How do we determine which joystick it is, if more than one?
+       // Possibly by a combobox selecting the stick you want to configure...
+       Gamepad::Update();
+
+       if (!buttonDown)
+       {
+               button = Gamepad::CheckButtonPressed();
+
+               if (button == -1)
+                       return;
+
+               buttonDown = true;
+       }
+       else
+       {
+               if (Gamepad::CheckButtonPressed() == button)
+                       return;
+
+               key = button;
+               accept();
+               buttonDown = false;
+       }
 }
+