X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fkeygrabber.cpp;h=e1c33d0e3eada8aefb61210650c88f739603ecb4;hb=2e7108fbe3b1a8a42f155069e4648d43fda57789;hp=23954b855450c65fa765e984c022ddb8130c61c4;hpb=34c2f4526d11f2139130c4c94920dd7b1c7a6124;p=virtualjaguar diff --git a/src/gui/keygrabber.cpp b/src/gui/keygrabber.cpp index 23954b8..e1c33d0 100644 --- a/src/gui/keygrabber.cpp +++ b/src/gui/keygrabber.cpp @@ -1,36 +1,50 @@ // // 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 +// JLH = James Hammons // // Who When What -// --- ---------- ------------------------------------------------------------- +// --- ---------- ------------------------------------------------------------ // JLH 07/18/2011 Created this file // #include "keygrabber.h" +#include "gamepad.h" -KeyGrabber::KeyGrabber(QWidget * parent/*= 0*/): QDialog(parent) +// Class variables +// These need to be preserved between calls to this class, otherwise bad stuff +// (like controllers not working correctly) can happen. +/*static*/ bool KeyGrabber::buttonDown = false; +/*static*/ int KeyGrabber::button = -1; + + +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", @@ -42,6 +56,7 @@ void KeyGrabber::SetKeyText(int keyNum) label->setText(text); } + void KeyGrabber::keyPressEvent(QKeyEvent * e) { key = e->key(); @@ -50,3 +65,37 @@ void KeyGrabber::keyPressEvent(QKeyEvent * e) if (key != Qt::Key_Alt) accept(); } + + +void KeyGrabber::CheckGamepad(void) +{ + // How do we determine which joystick it is, if more than one? As it turns + // out, we don't really have to care. It's up to the user to play nice with + // the interface because while we can enforce a 'first user to press a + // button wins' type of thing, it doesn't really buy you anything that you + // couldn't get by having the users involved behave like nice people. :-P + Gamepad::Update(); + + if (!buttonDown) + { + button = Gamepad::CheckButtonPressed(); + + if (button == -1) + return; + +// Do it so that it sets the button on button down, not release :-P + key = button; + accept(); + buttonDown = true; + } + else + { + if (Gamepad::CheckButtonPressed() == button) + return; + +// key = button; +// accept(); + buttonDown = false; + } +} +