#include "controllerwidget.h"
#include "joystick.h"
+#include "gamepad.h"
#include "keygrabber.h"
+
// These tables are used to convert Qt keycodes into human readable form. Note that
// a lot of these are just filler.
char ControllerWidget::keyName1[96][16] = {
"F14", "F15", "F16"
};
+char ControllerWidget::hatName[4][16] = { "Up", "Rt", "Dn", "Lf" };
+
+char ControllerWidget::axisName[2][8] = { "+", "-" };
+
// This is hard-coded crap. It's crap-tastic!
// These are the positions to draw the button names at, ordered by the BUTTON_* sequence
// found in joystick.h.
{ 234, 31 }, { 216, 51 }, { 199, 71 }, { 164-11, 101-30 }, { 141-11, 108+13-30 }
};
+
ControllerWidget::ControllerWidget(QWidget * parent/*= 0*/): QWidget(parent),
controllerPic(":/res/controller.png"), widgetSize(controllerPic.size()),
keyToHighlight(-1), mouseDown(false)
widgetSize += QSize(4, 4);
// We want to know when the mouse is moving over our widget...
setMouseTracking(true);
+//nope
+//setFixedSize(widgetSize);
}
+
ControllerWidget::~ControllerWidget()
{
}
+
QSize ControllerWidget::sizeHint(void) const
{
return widgetSize;
}
+
QSizePolicy ControllerWidget::sizePolicy(void) const
{
return QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
}
+
void ControllerWidget::paintEvent(QPaintEvent * /*event*/)
{
QPainter painter(this);
DrawBorderedText(painter, buttonPos[i][0], buttonPos[i][1],
QString(keyName2[keys[i] & 0x3F]));
}
+#if 1
+ else if (keys[i] & JOY_BUTTON)
+ {
+ DrawBorderedText(painter, buttonPos[i][0], buttonPos[i][1],
+ QString("JB%1").arg(keys[i] & JOY_BUTTON_MASK));
+ }
+ else if (keys[i] & JOY_HAT)
+ {
+ DrawBorderedText(painter, buttonPos[i][0], buttonPos[i][1],
+ QString("j%1").arg(hatName[keys[i] & JOY_BUTTON_MASK]));
+ }
+ else if (keys[i] & JOY_AXIS)
+ {
+ DrawBorderedText(painter, buttonPos[i][0], buttonPos[i][1],
+ QString("JA%1%2").arg((keys[i] & JOY_AXISNUM_MASK) >> 1).arg(axisName[keys[i] & JOY_AXISDIR_MASK]));
+ }
+#endif
else
DrawBorderedText(painter, buttonPos[i][0], buttonPos[i][1], QString("???"));
}
}
+
void ControllerWidget::mousePressEvent(QMouseEvent * /*event*/)
{
mouseDown = true;
update();
}
+
void ControllerWidget::mouseReleaseEvent(QMouseEvent * /*event*/)
{
mouseDown = false;
int key = keyGrab.key;
if (key != Qt::Key_Escape)
+ {
keys[keyToHighlightSave] = key;
+ emit(KeyDefined(keyToHighlightSave, key));
+ }
keyToHighlight = keyToHighlightSave;
update();
}
+
void ControllerWidget::mouseMoveEvent(QMouseEvent * event)
{
if (mouseDown)
update();
}
+
void ControllerWidget::leaveEvent(QEvent * /*event*/)
{
keyToHighlight = -1;
update();
}
+
void ControllerWidget::DrawBorderedText(QPainter & painter, int x, int y, QString text)
{
// Text is drawn centered at (x, y) as well, using a bounding rect for the purpose.
rect.moveCenter(QPoint(x, y));
painter.drawText(rect, Qt::AlignCenter, text);
}
+