main.qml Example File
					 
					
						configureButtons/main.qml
					 
					
/****************************************************************************
**
** 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 
                        }
                    }
                }
            }
        }
    }
}