// (C) 2011 Underground Software
// See the README and GPLv3 files for licensing and warranty information
//
-// JLH = James L. Hammons <jlhamm@acm.org>
+// JLH = James Hammons <jlhamm@acm.org>
//
// WHO WHEN WHAT
// --- ---------- ------------------------------------------------------------
#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.
+
+// 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] = {
"Space",
"!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?",
"@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
- "[", "]", "\\", "^", "_", "`",
+ "[", "\\", "]", "^", "_", "`",
"$61", "$62", "$63", "$64", "$65", "$66", "$67", "$68", "$69", "$6A", "$6B", "$6C", "$6D",
"$6E", "$6F", "$70", "$71", "$72", "$73", "$74", "$75", "$76", "$77", "$78", "$79", "$7A",
"{", "|", "}", "~"
"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.
-int ControllerWidget::buttonPos[21][2] = { { 86, 59 }, { 86, 94 }, { 68, 76 }, { 108, 76 },
- { 125, 223 }, { 125, 200 }, { 125, 177 }, { 125, 153 },
- { 160, 223 }, { 160, 200 }, { 160, 177 }, { 160, 153 },
- { 196, 223 }, { 196, 200 }, { 196, 177 }, { 196, 153 },
- { 242, 60 }, { 224, 80 }, { 207, 104 }, { 164, 101 }, { 141, 108+13 }
+int ControllerWidget::buttonPos[21][2] = { { 74, 32 }, { 71, 67 }, { 53, 49 }, { 93, 49 },
+ { 110, 200 }, { 110, 175 }, { 110, 151 }, { 110, 126 },
+ { 148, 200 }, { 148, 175 }, { 148, 151 }, { 148, 126 },
+ { 186, 200 }, { 186, 175 }, { 186, 151 }, { 186, 126 },
+ { 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);
blackPen.setWidth(4);
QPen colorPen(QColor(48, 255, 255, 255));
colorPen.setWidth(2);
- QLine line(QPoint(141, 100), QPoint(141, 108+5));
+ QLine line(QPoint(141-11, 100-30), QPoint(141-11, 108+5-30));
painter.setPen(blackPen);
painter.drawLine(line);
blackPen.setWidth(1);
painter.setPen(blackPen);
- painter.drawEllipse(QPoint(141, 100), 4, 4);
+ painter.drawEllipse(QPoint(141-11, 100-30), 4, 4);
painter.setPen(colorPen);
painter.drawLine(line);
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;
- // Spawning the keygrabber causes leaveEvent() to be called, so we need to save this
+ // Spawning the keygrabber causes leaveEvent() to be called, so we need to
+ // save this
int keyToHighlightSave = keyToHighlight;
KeyGrabber keyGrab(this);
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);
}
+