blob: 65226313ae74ce94879b0e79131c33cee2c386d4 [file] [log] [blame]
/****************************************************************************
**
** 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
}
}
}
}
}
}
}