| /**************************************************************************** |
| ** |
| ** Copyright (C) 2015 BogDan Vatra <bogdan@kde.org> |
| ** Contact: http://www.qt.io/licensing/ |
| ** |
| ** This file is part of the Qt Gamepad module |
| ** |
| ** $QT_BEGIN_LICENSE:LGPL3$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see http://www.qt.io/terms-conditions. For further |
| ** information use the contact form at http://www.qt.io/contact-us. |
| ** |
| ** GNU Lesser General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Lesser |
| ** General Public License version 3 as published by the Free Software |
| ** Foundation and appearing in the file LICENSE.LGPLv3 included in the |
| ** packaging of this file. Please review the following information to |
| ** ensure the GNU Lesser General Public License version 3 requirements |
| ** will be met: https://www.gnu.org/licenses/lgpl.html. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU |
| ** General Public License version 2.0 or later as published by the Free |
| ** Software Foundation and appearing in the file LICENSE.GPL included in |
| ** the packaging of this file. Please review the following information to |
| ** ensure the GNU General Public License version 2.0 requirements will be |
| ** met: http://www.gnu.org/licenses/gpl-2.0.html. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| import QtQuick 2.5 |
| import QtQuick.Controls 2.1 |
| import QtQuick.Layouts 1.2 |
| import QtQuick.Window 2.0 |
| import QtGamepad 1.0 |
| |
| |
| ApplicationWindow { |
| visible: true |
| title: qsTr("Configure gamepad") |
| width: 400 |
| height: 600 |
| |
| Component.onCompleted: { |
| if (Qt.platform.os === "android") |
| visibility = Window.Maximized |
| } |
| |
| property Button checkedButton: null |
| function pressButton(button) |
| { |
| if (checkedButton !== null && button !== checkedButton) |
| checkedButton.checked = false; |
| checkedButton = button |
| } |
| |
| Gamepad { |
| id: gamepad |
| deviceId: GamepadManager.connectedGamepads.length > 0 ? GamepadManager.connectedGamepads[0] : -1 |
| onDeviceIdChanged: GamepadManager.setCancelConfigureButton(deviceId, GamepadManager.ButtonStart); |
| } |
| |
| Connections { |
| target: GamepadManager |
| onButtonConfigured: pressButton(null) |
| onAxisConfigured: pressButton(null) |
| onConfigurationCanceled: pressButton(null) |
| } |
| |
| Rectangle { |
| id: headerRectangle |
| anchors.top: parent.top |
| anchors.right: parent.right |
| anchors.left: parent.left |
| height: headerLayout.implicitHeight + 16 |
| color: "white" |
| z: 1 |
| |
| ColumnLayout { |
| id: headerLayout |
| anchors.top: parent.top |
| anchors.right: parent.right |
| anchors.left: parent.left |
| anchors.margins: 8 |
| |
| Label { |
| text: qsTr("Gamepad configuration Utility") |
| font.pointSize: 16 |
| } |
| |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Connected gamepads") |
| } |
| ComboBox { |
| Layout.fillWidth: true |
| model: GamepadManager.connectedGamepads |
| onCurrentIndexChanged: gamepad.deviceId[GamepadManager.connectedGamepads[currentIndex]] |
| } |
| } |
| |
| Label { |
| text: qsTr("Start button cancel's current configuration") |
| Layout.fillWidth: true |
| } |
| } |
| } |
| |
| Flickable { |
| id: scrollArea |
| anchors.top: headerRectangle.bottom |
| anchors.right: parent.right |
| anchors.left: parent.left |
| anchors.bottom: parent.bottom |
| anchors.margins: 8 |
| contentHeight: contentLayout.implicitHeight |
| ScrollIndicator.vertical: ScrollIndicator { } |
| ColumnLayout { |
| id: contentLayout |
| width: parent.width |
| ColumnLayout { |
| GroupBox { |
| title: qsTr("Configure Gamepad Buttons") |
| Layout.fillWidth: true |
| ColumnLayout { |
| anchors.fill: parent |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("ButtonA") |
| horizontalAlignment: Text.AlignRight |
| } |
| |
| Label { |
| text: gamepad.buttonA ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonA); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("ButtonB") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonB ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonB); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("ButtonX") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonX ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonX); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("ButtonY") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonY ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonY); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("ButtonStart") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonStart ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonStart); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("ButtonSelect") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonSelect ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonSelect); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button L1") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonL1 ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonL1); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button R1") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonR1 ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonR1); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button L2") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonL2 ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonL2); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button R2") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonR2 ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonR2); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button L3") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonL3 ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonL3); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button R3") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonR3 ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonR3); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button Up") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonUp ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonUp); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button Down") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| text: gamepad.buttonDown ? qsTr("DOWN") : qsTr("UP") |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonDown ); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button Left") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| Layout.fillWidth: true |
| text: gamepad.buttonLeft ? qsTr("DOWN") : qsTr("UP") |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonLeft); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button Right") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| Layout.fillWidth: true |
| text: gamepad.buttonRight ? qsTr("DOWN") : qsTr("UP") |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonRight); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button Center") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| Layout.fillWidth: true |
| text: gamepad.buttonCenter ? qsTr("DOWN") : qsTr("UP") |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonCenter); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("Button Guide") |
| horizontalAlignment: Text.AlignRight |
| } |
| Label { |
| Layout.fillWidth: true |
| text: gamepad.buttonGuide ? qsTr("DOWN") : qsTr("UP") |
| horizontalAlignment: Text.AlignRight |
| } |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureButton(gamepad.deviceId, GamepadManager.ButtonGuide); |
| } |
| } |
| } |
| } |
| } |
| GroupBox { |
| title: qsTr("Gamepad Axies") |
| Layout.fillWidth: true |
| |
| ColumnLayout { |
| anchors.fill: parent |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("AxisLeftX") |
| horizontalAlignment: Text.AlignRight |
| } |
| |
| Label { |
| text: gamepad.axisLeftX |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureAxis(gamepad.deviceId, GamepadManager.AxisLeftX); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("AxisLeftY") |
| horizontalAlignment: Text.AlignRight |
| } |
| |
| Label { |
| text: gamepad.axisLeftY |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureAxis(gamepad.deviceId, GamepadManager.AxisLeftY); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("AxisRightX") |
| horizontalAlignment: Text.AlignRight |
| } |
| |
| Label { |
| text: gamepad.axisRightX |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureAxis(gamepad.deviceId, GamepadManager.AxisRightX); |
| } |
| } |
| } |
| RowLayout { |
| Layout.fillWidth: true |
| Label { |
| text: qsTr("AxisRightY") |
| horizontalAlignment: Text.AlignRight |
| } |
| |
| Label { |
| text: gamepad.axisRightY |
| Layout.fillWidth: true |
| horizontalAlignment: Text.AlignRight |
| } |
| |
| Button { |
| text: qsTr("Configure") |
| checkable: true |
| enabled: !checked |
| onCheckedChanged: { |
| pressButton(this); |
| if (checked) |
| GamepadManager.configureAxis(gamepad.deviceId, GamepadManager.AxisRightY); |
| } |
| } |
| } |
| |
| Item { |
| Layout.fillHeight: true |
| } |
| } |
| } |
| } |
| } |
| } |
| } |