History

exposed input key bindings to js to enable key remapping

Sam Gondelman committed 11 years ago

Commit 984d4491 parent a12fd5c8 files · +289 −16Browse files

Showing the changes to interface/src/scripting/ControllerScriptingInterface.cpp (1 of 8 files). Show all

Unified · Split

interface/src/scripting/ControllerScriptingInterface.cpp+116−1
@@ -28,6 +28,90 @@ ControllerScriptingInterface::ControllerScriptingInterface() : · 27 unmodified lines
28{28{
29 29
30}30}
31static int actionMetaTypeId = qRegisterMetaType<UserInputMapper::Action>();
32static int inputChannelMetaTypeId = qRegisterMetaType<UserInputMapper::InputChannel>();
33static int inputMetaTypeId = qRegisterMetaType<UserInputMapper::Input>();
34static int inputPairMetaTypeId = qRegisterMetaType<UserInputMapper::InputPair>();
35
36QScriptValue inputToScriptValue(QScriptEngine* engine, const UserInputMapper::Input& input);
37void inputFromScriptValue(const QScriptValue& object, UserInputMapper::Input& input);
38QScriptValue inputChannelToScriptValue(QScriptEngine* engine, const UserInputMapper::InputChannel& inputChannel);
39void inputChannelFromScriptValue(const QScriptValue& object, UserInputMapper::InputChannel& inputChannel);
40QScriptValue actionToScriptValue(QScriptEngine* engine, const UserInputMapper::Action& action);
41void actionFromScriptValue(const QScriptValue& object, UserInputMapper::Action& action);
42QScriptValue inputPairToScriptValue(QScriptEngine* engine, const UserInputMapper::InputPair& inputPair);
43void inputPairFromScriptValue(const QScriptValue& object, UserInputMapper::InputPair& inputPair);
44
45QScriptValue inputToScriptValue(QScriptEngine* engine, const UserInputMapper::Input& input) {
46 QScriptValue obj = engine->newObject();
47 obj.setProperty("device", input.getDevice());
48 obj.setProperty("channel", input.getChannel());
49 obj.setProperty("type", input._type);
50 obj.setProperty("id", input.getID());
51 return obj;
52}
53
54void inputFromScriptValue(const QScriptValue& object, UserInputMapper::Input& input) {
55 input._device = object.property("device").toUInt16();
56 input._channel = object.property("channel").toUInt16();
57 input._type = object.property("type").toUInt16();
58 input._id = object.property("id").toInt32();
59}
60
61QScriptValue inputChannelToScriptValue(QScriptEngine* engine, const UserInputMapper::InputChannel& inputChannel) {
62 QScriptValue obj = engine->newObject();
63 obj.setProperty("input", inputToScriptValue(engine, inputChannel._input));
64 obj.setProperty("modifier", inputToScriptValue(engine, inputChannel._modifier));
65 obj.setProperty("action", inputChannel._action);
66 obj.setProperty("scale", inputChannel._scale);
67 return obj;
68}
69
70void inputChannelFromScriptValue(const QScriptValue& object, UserInputMapper::InputChannel& inputChannel) {
71 inputFromScriptValue(object.property("input"), inputChannel._input);
72 inputFromScriptValue(object.property("modifier"), inputChannel._modifier);
73 inputChannel._action = UserInputMapper::Action(object.property("action").toVariant().toInt());
74 inputChannel._scale = object.property("scale").toVariant().toFloat();
75}
76
77QScriptValue actionToScriptValue(QScriptEngine* engine, const UserInputMapper::Action& action) {
78 QScriptValue obj = engine->newObject();
79 QVector<UserInputMapper::InputChannel> inputChannels = Application::getUserInputMapper()->getInputChannelsForAction(action);
80 QScriptValue _inputChannels = engine->newArray(inputChannels.size());
81 for (int i = 0; i < inputChannels.size(); i++) {
82 _inputChannels.setProperty(i, inputChannelToScriptValue(engine, inputChannels[i]));
83 }
84 obj.setProperty("action", (int) action);
85 obj.setProperty("actionName", Application::getUserInputMapper()->getActionName(action));
86 obj.setProperty("inputChannels", _inputChannels);
87 return obj;
88}
89
90void actionFromScriptValue(const QScriptValue& object, UserInputMapper::Action& action) {
91 action = UserInputMapper::Action(object.property("action").toVariant().toInt());
92}
93
94QScriptValue inputPairToScriptValue(QScriptEngine* engine, const UserInputMapper::InputPair& inputPair) {
95 QScriptValue obj = engine->newObject();
96 obj.setProperty("input", inputToScriptValue(engine, inputPair.first));
97 obj.setProperty("inputName", inputPair.second);
98 return obj;
99}
100
101void inputPairFromScriptValue(const QScriptValue& object, UserInputMapper::InputPair& inputPair) {
102 inputFromScriptValue(object.property("input"), inputPair.first);
103 inputPair.second = QString(object.property("inputName").toVariant().toString());
104}
105
106void ControllerScriptingInterface::registerControllerTypes(QScriptEngine* engine) {
107 qScriptRegisterSequenceMetaType<QVector<UserInputMapper::Action> >(engine);
108 qScriptRegisterSequenceMetaType<QVector<UserInputMapper::InputChannel> >(engine);
109 qScriptRegisterSequenceMetaType<QVector<UserInputMapper::InputPair> >(engine);
110 qScriptRegisterMetaType(engine, actionToScriptValue, actionFromScriptValue);
111 qScriptRegisterMetaType(engine, inputChannelToScriptValue, inputChannelFromScriptValue);
112 qScriptRegisterMetaType(engine, inputToScriptValue, inputFromScriptValue);
113 qScriptRegisterMetaType(engine, inputPairToScriptValue, inputPairFromScriptValue);
114}
31 115
32void ControllerScriptingInterface::handleMetaEvent(HFMetaEvent* event) {116void ControllerScriptingInterface::handleMetaEvent(HFMetaEvent* event) {
33 if (event->type() == HFActionEvent::startType()) {117 if (event->type() == HFActionEvent::startType()) {
@@ -337,6 +421,37 @@ void ControllerScriptingInterface::updateInputControllers() { · 303 unmodified lines
337 }421 }
338}422}
339 423
424QVector<UserInputMapper::Action> ControllerScriptingInterface::getAllActions() {
425 return Application::getUserInputMapper()->getAllActions();
426}
427
428QVector<UserInputMapper::InputChannel> ControllerScriptingInterface::getInputChannelsForAction(UserInputMapper::Action action) {
429 return Application::getUserInputMapper()->getInputChannelsForAction(action);
430}
431
432QString ControllerScriptingInterface::getDeviceName(unsigned int device) {
433 return Application::getUserInputMapper()->getDeviceName((unsigned short) device);
434}
435
436QVector<UserInputMapper::InputChannel> ControllerScriptingInterface::getAllInputsForDevice(unsigned int device) {
437 return Application::getUserInputMapper()->getAllInputsForDevice(device);
438}
439
440bool ControllerScriptingInterface::addInputChannel(UserInputMapper::InputChannel inputChannel) {
441 return Application::getUserInputMapper()->addInputChannel(inputChannel._action, inputChannel._input, inputChannel._modifier, inputChannel._scale);
442}
443
444bool ControllerScriptingInterface::removeInputChannel(UserInputMapper::InputChannel inputChannel) {
445 return Application::getUserInputMapper()->removeInputChannel(inputChannel);
446}
447
448QVector<UserInputMapper::InputPair> ControllerScriptingInterface::getAvailableInputs(unsigned int device) {
449 return Application::getUserInputMapper()->getAvailableInputs((unsigned short) device);
450}
451
452void ControllerScriptingInterface::resetAllDeviceBindings() {
453 Application::getUserInputMapper()->resetAllDeviceBindings();
454}
340 455
341InputController::InputController(int deviceTrackerId, int subTrackerId, QObject* parent) :456InputController::InputController(int deviceTrackerId, int subTrackerId, QObject* parent) :
342 AbstractInputController(),457 AbstractInputController(),
@@ -373,4 +488,4 @@ const unsigned int INPUTCONTROLLER_KEY_DEVICE_MASK = 16; · 30 unmodified lines
373 488
374InputController::Key InputController::getKey() const {489InputController::Key InputController::getKey() const {
375 return (((_deviceTrackerId & INPUTCONTROLLER_KEY_DEVICE_MASK) << INPUTCONTROLLER_KEY_DEVICE_OFFSET) | _subTrackerId);490 return (((_deviceTrackerId & INPUTCONTROLLER_KEY_DEVICE_MASK) << INPUTCONTROLLER_KEY_DEVICE_OFFSET) | _subTrackerId);
376}491}