<UserControl
    xmlns="https://github.com/avaloniaui"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels.Input"
    xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
    HorizontalAlignment="Stretch"
    VerticalAlignment="Stretch"
    d:DesignHeight="800"
    d:DesignWidth="800"
    x:Class="Ryujinx.Ava.UI.Views.Input.KeyboardInputView"
    x:DataType="viewModels:KeyboardInputViewModel"
    x:CompileBindings="True"
    mc:Ignorable="d"
    Focusable="True">
    <Design.DataContext>
        <viewModels:KeyboardInputViewModel />
    </Design.DataContext>
    <UserControl.Resources>
        <helpers:KeyValueConverter x:Key="Key" />
    </UserControl.Resources>
    <UserControl.Styles>
        <Style Selector="ToggleButton">
            <Setter Property="Width" Value="90" />
            <Setter Property="Height" Value="27" />
            <Setter Property="HorizontalAlignment" Value="Stretch" />
        </Style>
    </UserControl.Styles>
    <StackPanel
        HorizontalAlignment="Stretch"
        VerticalAlignment="Stretch"
        Orientation="Vertical">
        <!-- Button / JoyStick Settings -->
        <Grid
            Name="SettingButtons"
            MinHeight="450">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <!-- Left Controls -->
            <StackPanel
                Orientation="Vertical"
                Margin="0,0,5,0"
                Grid.Column="0">
                <!-- Left Triggers -->
                <Border
                    BorderBrush="{DynamicResource ThemeControlBorderColor}"
                    BorderThickness="1"
                    IsVisible="{Binding IsLeft}"
                    MinHeight="90"
                    CornerRadius="5">
                    <Grid
                        Margin="10"
                        HorizontalAlignment="Stretch">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <StackPanel
                            Grid.Column="0"
                            Grid.Row="0"
                            Orientation="Horizontal">
                            <TextBlock
                                Width="20"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Text="{locale:Locale ControllerSettingsTriggerZL}"
                                TextAlignment="Center" />
                            <ToggleButton Name="ButtonZl">
                                <TextBlock
                                    Text="{Binding Config.ButtonZl, Converter={StaticResource Key}}"
                                    TextAlignment="Center" />
                            </ToggleButton>
                        </StackPanel>
                        <StackPanel
                            Grid.Column="0"
                            Grid.Row="1"
                            Orientation="Horizontal">
                            <TextBlock
                                Width="20"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Text="{locale:Locale ControllerSettingsTriggerL}"
                                TextAlignment="Center" />
                            <ToggleButton Name="ButtonL">
                                <TextBlock
                                    Text="{Binding Config.ButtonL, Converter={StaticResource Key}}"
                                    TextAlignment="Center" />
                            </ToggleButton>
                        </StackPanel>
                        <StackPanel
                            Grid.Column="1"
                            Grid.Row="1"
                            Orientation="Horizontal">
                            <TextBlock
                                Width="20"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Text="{locale:Locale ControllerSettingsButtonMinus}"
                                TextAlignment="Center" />
                            <ToggleButton Name="ButtonMinus">
                                <TextBlock
                                    Text="{Binding Config.ButtonMinus, Converter={StaticResource Key}}"
                                    TextAlignment="Center" />
                            </ToggleButton>
                        </StackPanel>
                    </Grid>
                </Border>
                <!-- Left Joystick -->
                <Border
                    BorderBrush="{DynamicResource ThemeControlBorderColor}"
                    BorderThickness="1"
                    IsVisible="{Binding IsLeft}"
                    Margin="0,5,0,0"
                    CornerRadius="5">
                    <StackPanel
                        Margin="10"
                        Orientation="Vertical">
                        <TextBlock
                            Margin="0,0,0,10"
                            HorizontalAlignment="Center"
                            Text="{locale:Locale ControllerSettingsLStick}" />
                        <!-- Left Joystick Keyboard -->
                        <StackPanel Orientation="Vertical">
                            <!-- Left Joystick Button -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsStickButton}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="LeftStickButton">
                                    <TextBlock
                                        Text="{Binding Config.LeftStickButton, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Left Joystick Up -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsStickUp}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="LeftStickUp">
                                    <TextBlock
                                        Text="{Binding Config.LeftStickUp, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Left Joystick Down -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsStickDown}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="LeftStickDown">
                                    <TextBlock
                                        Text="{Binding Config.LeftStickDown, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Left Joystick Left -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsStickLeft}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="LeftStickLeft">
                                    <TextBlock
                                        Text="{Binding Config.LeftStickLeft, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Left Joystick Right -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsStickRight}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="LeftStickRight">
                                    <TextBlock
                                        Text="{Binding Config.LeftStickRight, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                        </StackPanel>
                    </StackPanel>
                </Border>
                <!-- Left DPad -->
                <Border
                    BorderBrush="{DynamicResource ThemeControlBorderColor}"
                    BorderThickness="1"
                    VerticalAlignment="Top"
                    IsVisible="{Binding IsLeft}"
                    Margin="0,5,0,0"
                    CornerRadius="5">
                    <StackPanel
                        Margin="10"
                        Orientation="Vertical">
                        <TextBlock
                            Margin="0,0,0,10"
                            HorizontalAlignment="Center"
                            Text="{locale:Locale ControllerSettingsDPad}" />
                        <StackPanel Orientation="Vertical">
                            <!-- Left DPad Up -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsDPadUp}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="DpadUp">
                                    <TextBlock
                                        Text="{Binding Config.DpadUp, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Left DPad Down -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsDPadDown}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="DpadDown">
                                    <TextBlock
                                        Text="{Binding Config.DpadDown, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Left DPad Left -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsDPadLeft}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="DpadLeft">
                                    <TextBlock
                                        Text="{Binding Config.DpadLeft, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Left DPad Right -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsDPadRight}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="DpadRight">
                                    <TextBlock
                                        Text="{Binding Config.DpadRight, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                        </StackPanel>
                    </StackPanel>
                </Border>
            </StackPanel>
            <!-- Triggers & Side Buttons -->
            <StackPanel
                Grid.Column="1"
                HorizontalAlignment="Stretch"
                VerticalAlignment="Stretch">
                <!-- Controller Picture -->
                <Image
                    Margin="0,10"
                    MaxHeight="300"
                    HorizontalAlignment="Stretch"
                    VerticalAlignment="Stretch"
                    Source="{Binding Image}" />
                <Border
                    BorderBrush="{DynamicResource ThemeControlBorderColor}"
                    BorderThickness="1"
                    CornerRadius="5"
                    MinHeight="90"
                    IsVisible="{Binding HasSides}">
                    <StackPanel
                        Margin="8"
                        Orientation="Vertical">
                        <StackPanel
                            Margin="0,4,0,0"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            IsVisible="{Binding IsLeft}"
                            Orientation="Horizontal">
                            <TextBlock
                                Width="20"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Text="{locale:Locale ControllerSettingsLeftSR}"
                                TextAlignment="Center" />
                            <ToggleButton Name="LeftButtonSr">
                                <TextBlock
                                    Text="{Binding Config.LeftButtonSr, Converter={StaticResource Key}}"
                                    TextAlignment="Center" />
                            </ToggleButton>
                        </StackPanel>
                        <StackPanel
                            Margin="0,4,0,0"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            IsVisible="{Binding IsLeft}"
                            Orientation="Horizontal">
                            <TextBlock
                                Width="20"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Text="{locale:Locale ControllerSettingsLeftSL}"
                                TextAlignment="Center" />
                            <ToggleButton Name="LeftButtonSl">
                                <TextBlock
                                    Text="{Binding Config.LeftButtonSl, Converter={StaticResource Key}}"
                                    TextAlignment="Center" />
                            </ToggleButton>
                        </StackPanel>
                        <StackPanel
                            Margin="0,4,0,0"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            IsVisible="{Binding IsRight}"
                            Orientation="Horizontal">
                            <TextBlock
                                Width="20"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Text="{locale:Locale ControllerSettingsRightSR}"
                                TextAlignment="Center" />
                            <ToggleButton Name="RightButtonSr">
                                <TextBlock
                                    Text="{Binding Config.RightButtonSr, Converter={StaticResource Key}}"
                                    TextAlignment="Center" />
                            </ToggleButton>
                        </StackPanel>
                        <StackPanel
                            Margin="0,4,0,0"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            IsVisible="{Binding IsRight}"
                            Orientation="Horizontal">
                            <TextBlock
                                Width="20"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Text="{locale:Locale ControllerSettingsRightSL}"
                                TextAlignment="Center" />
                            <ToggleButton Name="RightButtonSl">
                                <TextBlock
                                    Text="{Binding Config.RightButtonSl, Converter={StaticResource Key}}"
                                    TextAlignment="Center" />
                            </ToggleButton>
                        </StackPanel>
                    </StackPanel>
                </Border>
            </StackPanel>
            <!-- Right Controls -->
            <StackPanel
                Orientation="Vertical"
                Margin="5,0,0,0"
                Grid.Column="2">
                <!-- Right Triggers -->
                <Border
                    BorderBrush="{DynamicResource ThemeControlBorderColor}"
                    BorderThickness="1"
                    IsVisible="{Binding IsRight}"
                    MinHeight="90"
                    CornerRadius="5">
                    <Grid
                        Margin="10"
                        HorizontalAlignment="Stretch">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <StackPanel
                            Grid.Column="1"
                            Grid.Row="0"
                            Orientation="Horizontal">
                            <TextBlock
                                Width="20"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Text="{locale:Locale ControllerSettingsTriggerZR}"
                                TextAlignment="Center" />
                            <ToggleButton Name="ButtonZr">
                                <TextBlock
                                    Text="{Binding Config.ButtonZr, Converter={StaticResource Key}}"
                                    TextAlignment="Center" />
                            </ToggleButton>
                        </StackPanel>
                        <StackPanel
                            Grid.Column="1"
                            Grid.Row="1"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            Orientation="Horizontal">
                            <TextBlock
                                Width="20"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Text="{locale:Locale ControllerSettingsTriggerR}"
                                TextAlignment="Center" />
                            <ToggleButton Name="ButtonR">
                                <TextBlock
                                    Text="{Binding Config.ButtonR, Converter={StaticResource Key}}"
                                    TextAlignment="Center" />
                            </ToggleButton>
                        </StackPanel>
                        <StackPanel
                            Grid.Column="0"
                            Grid.Row="1"
                            HorizontalAlignment="Right"
                            VerticalAlignment="Center"
                            Orientation="Horizontal">
                            <TextBlock
                                Width="20"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Text="{locale:Locale ControllerSettingsButtonPlus}"
                                TextAlignment="Center" />
                            <ToggleButton Name="ButtonPlus">
                                <TextBlock
                                    Text="{Binding Config.ButtonPlus, Converter={StaticResource Key}}"
                                    TextAlignment="Center" />
                            </ToggleButton>
                        </StackPanel>
                    </Grid>
                </Border>
                <!-- Right Buttons -->
                <Border
                    BorderBrush="{DynamicResource ThemeControlBorderColor}"
                    BorderThickness="1"
                    IsVisible="{Binding IsRight}"
                    Margin="0,5,0,0"
                    CornerRadius="5">
                    <StackPanel
                        Margin="10"
                        Orientation="Vertical">
                        <TextBlock
                            Margin="0,0,0,10"
                            HorizontalAlignment="Center"
                            Text="{locale:Locale ControllerSettingsButtons}" />
                        <StackPanel
                            Orientation="Vertical">
                            <!-- Right Buttons A -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Width="120"
                                    Margin="0,0,10,0"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsButtonA}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="ButtonA">
                                    <TextBlock
                                        Text="{Binding Config.ButtonA, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Right Buttons B -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Width="120"
                                    Margin="0,0,10,0"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsButtonB}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="ButtonB">
                                    <TextBlock
                                        Text="{Binding Config.ButtonB, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Right Buttons X -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Width="120"
                                    Margin="0,0,10,0"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsButtonX}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="ButtonX">
                                    <TextBlock
                                        Text="{Binding Config.ButtonX, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Right Buttons Y -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Width="120"
                                    Margin="0,0,10,0"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsButtonY}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="ButtonY">
                                    <TextBlock
                                        Text="{Binding Config.ButtonY, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                        </StackPanel>
                    </StackPanel>
                </Border>
                <!-- Right DPad -->
                <Border
                    Padding="10"
                    BorderBrush="{DynamicResource ThemeControlBorderColor}"
                    BorderThickness="1"
                    CornerRadius="5"
                    IsVisible="{Binding IsRight}"
                    Margin="0,5,0,0">
                    <StackPanel Orientation="Vertical">
                        <TextBlock
                            Margin="0,0,0,10"
                            HorizontalAlignment="Center"
                            Text="{locale:Locale ControllerSettingsRStick}" />
                        <!-- Right Joystick Keyboard -->
                        <StackPanel Orientation="Vertical">
                            <!-- Right Joystick Button -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsStickButton}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="RightStickButton">
                                    <TextBlock
                                        Text="{Binding Config.RightStickButton, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Right Joystick Up -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsStickUp}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="RightStickUp">
                                    <TextBlock
                                        Text="{Binding Config.RightStickUp, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Right Joystick Down -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsStickDown}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="RightStickDown">
                                    <TextBlock
                                        Text="{Binding Config.RightStickDown, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Right Joystick Left -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsStickLeft}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="RightStickLeft">
                                    <TextBlock
                                        Text="{Binding Config.RightStickLeft, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                            <!-- Right Joystick Right -->
                            <StackPanel
                                Margin="0,0,0,4"
                                Orientation="Horizontal">
                                <TextBlock
                                    Margin="0,0,10,0"
                                    Width="120"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Text="{locale:Locale ControllerSettingsStickRight}"
                                    TextAlignment="Center" />
                                <ToggleButton Name="RightStickRight">
                                    <TextBlock
                                        Text="{Binding Config.RightStickRight, Converter={StaticResource Key}}"
                                        TextAlignment="Center" />
                                </ToggleButton>
                            </StackPanel>
                        </StackPanel>
                    </StackPanel>
                </Border>
            </StackPanel>
        </Grid>
    </StackPanel>
</UserControl>
