<UserControl x:Class="PixiEditor.AvaloniaUI.Views.Layers.LayerControl"
             x:ClassModifier="internal"
             xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:sys="clr-namespace:System;assembly=mscorlib"
             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
             xmlns:helpers="clr-namespace:PixiEditor.AvaloniaUI.Helpers.UI"
             xmlns:converters="clr-namespace:PixiEditor.AvaloniaUI.Helpers.Converters"
             xmlns:behaviours="clr-namespace:PixiEditor.AvaloniaUI.Helpers.Behaviours"
             xmlns:input="clr-namespace:PixiEditor.AvaloniaUI.Views.Input"
             xmlns:xaml="clr-namespace:PixiEditor.AvaloniaUI.Models.Commands.XAML"
             xmlns:visuals="clr-namespace:PixiEditor.AvaloniaUI.Views.Visuals"
             xmlns:input1="clr-namespace:PixiEditor.AvaloniaUI.Views.Input;assembly=PixiEditor.UI.Common"
             mc:Ignorable="d" 
             Focusable="True"
             d:DesignHeight="35" d:DesignWidth="250" Name="uc"
             PointerExited="LayerItem_OnMouseLeave" PointerEntered="LayerItem_OnMouseEnter">
    <UserControl.Resources>
        <converters:BoolToBrushConverter x:Key="LayerBorderConverter" FalseBrush="White" TrueBrush="Black"/>
        <converters:BoolToBrushConverter x:Key="MaskBorderConverter" FalseBrush="Black" TrueBrush="White"/>
    </UserControl.Resources>
    <Border BorderThickness="0 0 0 0.5" BorderBrush="Gray" MinWidth="60" Focusable="True" Tag="{Binding ElementName=uc}">
        <Border.Background>
            <Binding ElementName="uc" Path="Layer.Selection">
                <Binding.Converter>
                    <converters:StructureMemberSelectionTypeToColorConverter
                        SoftColor="{StaticResource SoftSelectedLayerBrush}"
                        HardColor="{StaticResource SelectedLayerBrush}"
                        NoneColor="Transparent"
                        />
                </Binding.Converter>
            </Binding>
        </Border.Background>
        <Interaction.Behaviors>
            <behaviours:ClearFocusOnClickBehavior/>
        </Interaction.Behaviors>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="10"/>
                <RowDefinition Height="26"/>
            </Grid.RowDefinitions>
            <Grid DragDrop.AllowDrop="True" helpers:DragDropEvents.DragEnter="Grid_DragEnter" helpers:DragDropEvents.Drop="Grid_Drop_Top" helpers:DragDropEvents.DragLeave="Grid_DragLeave" Grid.Row="0" Grid.ColumnSpan="3" Background="Transparent"/>
            <Grid Grid.Row="1" Margin="0,-17,0,0" VerticalAlignment="Center" DragDrop.AllowDrop="False">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="24"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <CheckBox Classes="ImageCheckBox" VerticalAlignment="Center"
                      IsThreeState="False" HorizontalAlignment="Center"
                      IsChecked="{Binding Path=Layer.IsVisibleBindable, ElementName=uc, Mode=TwoWay}"
                      Grid.Column="0" Height="16" />
                <StackPanel Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Left">
                    <Rectangle Width="{Binding Path=(helpers:TreeViewItemHelper.Indent).Value, Mode=OneWay, RelativeSource={RelativeSource AncestorType=ItemsPresenter}}" Fill="Transparent" StrokeThickness="0"/>
                    <Border
                        IsVisible="{Binding Layer.ClipToMemberBelowEnabledBindable, ElementName=uc}"
                        Background="{DynamicResource ThemeAccentBrush}" Width="3" Margin="1,1,2,1" CornerRadius="1"/>
                    <Border
                        Width="32" Height="32"
                        BorderThickness="1"
                        RenderOptions.BitmapInterpolationMode="None"
                        PointerPressed="LayerMouseDown">
                        <Border.Background>
                            <ImageBrush Source="/Images/CheckerTile.png" TileMode="Tile">
                                <ImageBrush.Transform>
                                    <ScaleTransform ScaleX="0.4" ScaleY="0.4"/>
                                </ImageBrush.Transform>
                            </ImageBrush>
                        </Border.Background>
                        <Border.BorderBrush>
                            <MultiBinding Converter="{StaticResource LayerBorderConverter}">
                                <Binding ElementName="uc" Path="Layer.ShouldDrawOnMask"/>
                                <Binding ElementName="uc" Path="Layer.HasMaskBindable"/>
                            </MultiBinding>
                        </Border.BorderBrush>
                        <visuals:SurfaceControl Surface="{Binding Layer.PreviewSurface, ElementName=uc}"
                                                Stretch="Uniform" Width="30"
                                                Height="30"
                           RenderOptions.BitmapInterpolationMode="None" IsHitTestVisible="False"/>
                    </Border>
                    <Border
                        Width="32" Height="32"
                        BorderThickness="1"
                        Margin="3,0,0,0"
                        RenderOptions.BitmapInterpolationMode="None"
                        IsVisible="{Binding Layer.HasMaskBindable, ElementName=uc}"
                        PointerPressed="MaskMouseDown">
                        <Border.Background>
                            <ImageBrush Source="/Images/CheckerTile.png" TileMode="Tile">
                                <ImageBrush.Transform>
                                    <ScaleTransform ScaleX="0.4" ScaleY="0.4"/>
                                </ImageBrush.Transform>
                            </ImageBrush>
                        </Border.Background>
                        <Border.BorderBrush>
                            <MultiBinding Converter="{StaticResource MaskBorderConverter}">
                                <Binding ElementName="uc" Path="Layer.ShouldDrawOnMask"/>
                            </MultiBinding>
                        </Border.BorderBrush>
                        <Grid IsHitTestVisible="False">
                            <visuals:SurfaceControl Surface="{Binding Layer.MaskPreviewSurface,ElementName=uc}" Stretch="Uniform" Width="30" Height="30"
                           RenderOptions.BitmapInterpolationMode="None" IsHitTestVisible="False"/>
                            <Path
                                Data="M 2 0 L 10 8 L 18 0 L 20 2 L 12 10 L 20 18 L 18 20 L 10 12 L 2 20 L 0 18 L 8 10 L 0 2 Z"
                                Fill="{DynamicResource ThemeAccentBrush}" HorizontalAlignment="Center" VerticalAlignment="Center"
                                IsVisible="{Binding !Layer.MaskIsVisibleBindable, ElementName=uc}"/>
                        </Grid>
                    </Border>
                    <StackPanel Margin="3,0,5,0">
                        <input:EditableTextBlock
                            x:Name="editableTextBlock"
                            VerticalAlignment="Center"
                            d:Text="New Layer" FontSize="14"
                            Text="{Binding Layer.NameBindable, ElementName=uc, Mode=TwoWay}" />

                        <StackPanel Orientation="Horizontal">
                            <TextBlock d:Text="100" Foreground="White" FontSize="11">
                                <TextBlock.Text>
                                    <Binding ElementName="uc" Path="Layer.OpacityBindable" Converter="{converters:MultiplyConverter}" StringFormat="N0">
                                        <Binding.ConverterParameter>
                                            <sys:Double>100.0</sys:Double>
                                        </Binding.ConverterParameter>
                                    </Binding>
                                </TextBlock.Text>
                            </TextBlock>
                            <TextBlock Foreground="White" FontSize="11">%</TextBlock>
                            <TextBlock  FontSize="11"
                                        Margin="5,0,0,0"
                                        d:Text="Normal"
                                        Foreground="White"
                                        Text="{Binding Layer.BlendModeBindable, ElementName=uc, Converter={converters:BlendModeToStringConverter}}"/>
                        </StackPanel>
                    </StackPanel>
                    <WrapPanel Orientation="Vertical" Margin="0,3,3,3">
                        <TextBlock
                            Text="{DynamicResource icon-alpha-lock}" FontSize="14" Width="14" Height="14"
                            Classes="pixi-icon"
                            IsVisible="{Binding Layer.LockTransparencyBindable, ElementName=uc}"/>
                    </WrapPanel>
                </StackPanel>
                <Grid Margin="0, 0, 0, -2.5"
                      helpers:DragDropEvents.DragEnter="Grid_DragEnter"
                      VerticalAlignment="Bottom"
                      helpers:DragDropEvents.Drop="Grid_Drop_Below"
                      helpers:DragDropEvents.DragLeave="Grid_DragLeave"
                      Height="10" Grid.Row="2" Grid.Column="0"
                      DragDrop.AllowDrop="True"  Background="Transparent" Name="dropBelowGrid"/>
                <Grid Margin="0, 0, 0, -2.5"
                      VerticalAlignment="Bottom"
                      Height="10" Grid.Row="2"
                      Grid.Column="1"
                      Background="{Binding ElementName=dropBelowGrid, Path=Background}"/>

                <Grid Margin="0, 0, 0, -2.5" VerticalAlignment="Bottom"
                      Height="10" Grid.Row="2" Grid.Column="2"
                      helpers:DragDropEvents.DragEnter="Grid_DragEnter"
                      helpers:DragDropEvents.Drop="Grid_Drop_Bottom"
                      helpers:DragDropEvents.DragLeave="Grid_DragLeave"
                      DragDrop.AllowDrop="True" Background="Transparent"/>
            </Grid>
        </Grid>
        <Border.ContextMenu>
            <ContextMenu>
                <MenuItem ui:Translator.Key="DUPLICATE" Command="{xaml:Command PixiEditor.Layer.DuplicateSelectedLayer}"/>
                <MenuItem ui:Translator.Key="DELETE" Command="{xaml:Command PixiEditor.Layer.DeleteAllSelected}"/>
                <MenuItem ui:Translator.Key="RENAME" Click="RenameMenuItem_Click"/>
                <input1:ToggleableMenuItem
                    IsChecked="{Binding $parent[UserControl].Layer.ClipToMemberBelowEnabledBindable, Mode=TwoWay}" 
                    ui:Translator.Key="CLIP_TO_BELOW"/>
                <input1:ToggleableMenuItem
                    IsChecked="{Binding $parent[UserControl].Layer.LockTransparencyBindable, Mode=TwoWay}" 
                    ui:Translator.Key="LOCK_TRANSPARENCY"/>
                <Separator/>
                <MenuItem ui:Translator.Key="MOVE_UPWARDS" Command="{xaml:Command PixiEditor.Layer.MoveSelectedMemberUpwards}"/>
                <MenuItem ui:Translator.Key="MOVE_DOWNWARDS" Command="{xaml:Command PixiEditor.Layer.MoveSelectedMemberDownwards}"/>
                <Separator/>
                <MenuItem ui:Translator.Key="CREATE_MASK" Command="{xaml:Command PixiEditor.Layer.CreateMask}"/>
                <MenuItem ui:Translator.Key="DELETE_MASK" Command="{xaml:Command PixiEditor.Layer.DeleteMask}"/>
                <input1:ToggleableMenuItem
                    IsChecked="{Binding $parent[UserControl].Layer.MaskIsVisibleBindable, Mode=TwoWay}" 
                    IsEnabled="{Binding $parent[UserControl].Layer.HasMaskBindable}"
                    ui:Translator.Key="ENABLE_MASK"/>
                <MenuItem ui:Translator.Key="APPLY_MASK" Command="{xaml:Command PixiEditor.Layer.ApplyMask}"/>
                <Separator/>
                <MenuItem ui:Translator.Key="MERGE_SELECTED" Command="{xaml:Command PixiEditor.Layer.MergeSelected}"/>
                <MenuItem ui:Translator.Key="MERGE_WITH_ABOVE" Command="{xaml:Command PixiEditor.Layer.MergeWithAbove}"/>
                <MenuItem ui:Translator.Key="MERGE_WITH_BELOW" Command="{xaml:Command PixiEditor.Layer.MergeWithBelow}"/>
            </ContextMenu>
        </Border.ContextMenu>
    </Border>
</UserControl>
