<UserControl
    x:Class="PowerLauncher.ResultList"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    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:Behaviors="http://schemas.microsoft.com/xaml/behaviors"
    xmlns:p="clr-namespace:PowerLauncher.Properties"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="720">

    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/Styles/ModernScrollBarStyle.xaml" />
            </ResourceDictionary.MergedDictionaries>

            <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
            <Style x:Key="FocusVisual">
                <Setter Property="Control.Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Rectangle Margin="2"
                                       StrokeDashArray="1 2"
                                       SnapsToDevicePixels="true"
                                       StrokeThickness="1"
                                       Stroke="{DynamicResource ControlTextBrushKey}"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

            <Style x:Key="IconButtonStyle" TargetType="{x:Type Button}">
                <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
                <Setter Property="Foreground" Value="{DynamicResource ControlTextBrushKey}"/>
                <Setter Property="BorderThickness" Value="1"/>
                <Setter Property="Focusable" Value="False"/>
                <Setter Property="HorizontalContentAlignment" Value="Center"/>
                <Setter Property="VerticalContentAlignment" Value="Center"/>
                <Setter Property="Padding" Value="1"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border x:Name="border"
                                    CornerRadius="2"
                                    Background="Transparent"
                                    BorderThickness="{TemplateBinding BorderThickness}"
                                    BorderBrush="Transparent"
                                    SnapsToDevicePixels="true">
                                <ContentPresenter x:Name="contentPresenter"
                                                  Focusable="False"
                                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                  Margin="{TemplateBinding Padding}"
                                                  RecognizesAccessKey="True"
                                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsDefaulted" Value="true">
                                    <Setter Property="Background" TargetName="border" Value="Transparent"/>
                                    <Setter Property="BorderBrush" TargetName="border" Value="Transparent"/>
                                </Trigger>
                                <Trigger Property="IsMouseOver" Value="true">
                                    <Setter Property="Background" TargetName="border" Value="{DynamicResource ButtonBackgroundPointerOver}"/>
                                    <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource ButtonBorderPointerOver}"/>
                                </Trigger>
                                <Trigger Property="IsPressed" Value="true">
                                    <Setter Property="Background" TargetName="border" Value="{DynamicResource ButtonBackgroundPressed}"/>
                                    <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource ButtonBorderPressed}"/>
                                </Trigger>
                                <Trigger Property="IsEnabled" Value="false">
                                    <!--<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
                                <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
                                <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/>-->
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

            <Style x:Key="ResultsListViewItemContainerStyle"  TargetType="ListViewItem">
                <Setter Property="Background" Value="Transparent" />
                <Setter Property="Foreground" Value="{DynamicResource ControlTextBrushKey}" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <Grid Background="Transparent">
                                <Border x:Name="HighlightBorder"
                                        BorderThickness="0"
                                        Background="{DynamicResource SystemChromeLow}"
                                        BorderBrush="Transparent"
                                        SnapsToDevicePixels="true"/>
                                <ContentPresenter x:Name="contentPresenter"
                                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                  Margin="{TemplateBinding Padding}" RecognizesAccessKey="True"
                                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <!-- Setting the opacity of the highlight border to improve the contrast of the AccentColorbrush when selected. In UWP we could call a different brush, in WPF we need to play with the opacity of the WindowGlassBrush-->
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="Opacity" TargetName="HighlightBorder" Value="1" />
                                    <Setter Property="Background" TargetName="HighlightBorder" Value="{DynamicResource ListViewItemBackgroundPointerOver}"/>
                                </Trigger>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter Property="Opacity" TargetName="HighlightBorder" Value="0.4" />
                                    <Setter Property="Background" TargetName="HighlightBorder" Value="{Binding Source={x:Static SystemParameters.WindowGlassBrush}}"/>
                                    <!-- Accent color brush -->
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="Focusable" Value="False" />
            </Style>

            <Style x:Key="CommandButtonListViewItemContainerStyle"  TargetType="ListViewItem">
                <Setter Property="Background" Value="Transparent" />
                <Setter Property="Padding" Value="0" />
                <Setter Property="Margin" Value="1" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <Border x:Name="border"
                                    CornerRadius="4"
                                    Background="Transparent"
                                    BorderBrush="Transparent"
                                    SnapsToDevicePixels="true">
                                <ContentPresenter x:Name="contentPresenter"
                                                  Focusable="False"
                                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                  Margin="{TemplateBinding Padding}"
                                                  RecognizesAccessKey="True"
                                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="true">
                                    <Setter Property="Background" TargetName="border" Value="Transparent"/>
                                    <Setter Property="BorderBrush" TargetName="border" Value="Transparent"/>
                                </Trigger>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter Property="Background" TargetName="border" Value="{DynamicResource ButtonBackgroundPressed}"/>
                                    <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource ButtonBorderPressed}"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            <Style x:Key="CollapsableTextblock" TargetType="TextBlock">
                <Style.Triggers>
                    <Trigger Property="Text" Value="">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </Trigger>
                </Style.Triggers>
            </Style>

            <Style TargetType="{x:Type ToolTip}" >
                <Setter Property="OverridesDefaultStyle" Value="true" />
                <Setter Property="HasDropShadow" Value="True" />
                <Setter Property="FontSize" Value="12" />
                <Setter Property="Placement" Value="Bottom" />
                <Setter Property="VerticalOffset" Value="0" />
                <Setter Property="Padding" Value="8" />
                <Setter Property="HorizontalContentAlignment" Value="Center" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ToolTip}" >
                            <Grid Margin="8,2" >
                                <Rectangle
                                    Fill="{DynamicResource ToolTipBackgroundBrushKey}"
                                    RadiusX="4"
                                    RadiusY="4"
                                    Stroke="{DynamicResource ToolTipBorderBrushKey}"
                                    StrokeThickness="1"/>
                                <ContentPresenter
                                    Margin="4"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Top" />
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ResourceDictionary>
    </UserControl.Resources>

    <Grid VerticalAlignment="Top">
        <ListView
            x:Name="SuggestionsList"
            x:FieldModifier="public"
            Background="Transparent"
            BorderThickness="0"
            MaxHeight="{Binding Results.MaxHeight}"
            Margin="0"
            ItemsSource="{Binding Results.Results, Mode=OneWay}"
            Padding="0, 0"
            ScrollViewer.HorizontalScrollBarVisibility="Disabled"       
            ScrollViewer.VerticalScrollBarVisibility="Auto"       
            SelectionMode="Single"
            SelectedIndex="{Binding Results.SelectedIndex, Mode=TwoWay}"
            ItemContainerStyle="{StaticResource ResultsListViewItemContainerStyle}"
            AutomationProperties.Name="{x:Static p:Resources.Results}">
            
            <!--AllowFocusOnInteraction="False"
            IsItemClickEnabled="True"-->
            <!--Style="{StaticResource ListViewNoAnimations}"-->
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid 
                        Height="72" 
                        Width="642" 
                        Background="Transparent"
                        ToolTipService.BetweenShowDelay="0"
                        ToolTipService.InitialShowDelay="1000">
                        <Behaviors:Interaction.Triggers>
                            <Behaviors:EventTrigger EventName="MouseEnter">
                                <Behaviors:InvokeCommandAction Command="{Binding ActivateContextButtonsHoverCommand}"/>
                            </Behaviors:EventTrigger>
                            <Behaviors:EventTrigger EventName="MouseLeave">
                                <Behaviors:InvokeCommandAction Command="{Binding DeactivateContextButtonsHoverCommand}"/>
                            </Behaviors:EventTrigger>
                        </Behaviors:Interaction.Triggers>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="64" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions >
                            <RowDefinition Height="*"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        <Grid.ToolTip>
                            <ToolTip Visibility="{Binding Result.ToolTipVisibility}">
                                <StackPanel Margin="8,6">
                                    <TextBlock 
                                        Style="{DynamicResource CollapsableTextblock}"
                                        Foreground="{DynamicResource ToolTipForegroundBrushKey}" FontWeight="Bold" FontSize="12"
                                        Text="{Binding Result.ToolTipData.Title}"
                                        TextWrapping="Wrap" 
                                        RenderOptions.ClearTypeHint="Enabled" />
                                    <TextBlock 
                                        Style="{DynamicResource CollapsableTextblock}"
                                        Foreground="{DynamicResource ToolTipForegroundBrushKey}" FontSize="12"
                                        Text="{Binding Result.ToolTipData.Text}"                               
                                        TextWrapping="Wrap" 
                                        RenderOptions.ClearTypeHint="Enabled" />
                                </StackPanel>
                            </ToolTip>
                        </Grid.ToolTip>
                        <Image
                            AutomationProperties.Name="{x:Static p:Resources.AppIcon}"
                               x:Name="AppIcon"
                               Height="36"
                               MaxWidth="56"
                               Grid.RowSpan="2"
                               Margin="-6,-2,0,0"
                               HorizontalAlignment="Center"
                               Source="{Binding Image}" />
                        <TextBlock
                            AutomationProperties.Name="{x:Static p:Resources.Title}"
                            x:Name="Title" Grid.Column="1"
                            Text="{Binding Result.Title}"
                            FontWeight="SemiBold"
                            FontSize="20"
                            Margin="0,0,0,-2"
                            VerticalAlignment="Bottom"
                            RenderOptions.ClearTypeHint="Enabled"/>
                        <TextBlock
                            AutomationProperties.Name="{x:Static p:Resources.Subtitle}"
                            x:Name="Path"
                            Grid.Column="1"
                            Text= "{Binding Result.SubTitle}"
                            Grid.Row="1"
                            Foreground="{DynamicResource SecondaryTextForeground}"
                            Margin="0,2,0,0"
                            VerticalAlignment="Top"
                            RenderOptions.ClearTypeHint="Enabled"/>
                        <ListView      
                            AutomationProperties.Name="{x:Static p:Resources.ContextMenuItemsCollection}"
                            HorizontalAlignment="Right" 
                            VerticalAlignment="Center"                                  
                            Background="Transparent"
                            BorderThickness="0"
                            Grid.RowSpan="2" 
                            Grid.Column="2"
                            ScrollViewer.VerticalScrollBarVisibility="Disabled"
                            ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                            ItemsSource="{Binding ContextMenuItems}" 
                            SelectionMode="Single"
                            Margin="0,0,-8,0"
                            SelectedIndex="{Binding ContextMenuSelectedIndex}"
                            Visibility="{Binding AreContextButtonsActive, Converter={StaticResource BooleanToVisibilityConverter}}"
                            ItemContainerStyle="{StaticResource CommandButtonListViewItemContainerStyle}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel Orientation="Horizontal"
                                        VerticalAlignment="Center"
                                        HorizontalAlignment="Center"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <Button
                                        AutomationProperties.Name="{x:Static p:Resources.ContextMenuItem}"
                                        Style="{StaticResource IconButtonStyle}"
                                        Command="{Binding Command}"
                                        VerticalAlignment="Center"
                                        Height="42"
                                        Width="42"
                                        BorderThickness="1" >
                                        <ToolTipService.ToolTip>
                                            <ToolTip >
                                                <TextBlock
                                                    AutomationProperties.Name="{x:Static p:Resources.ContextMenuItemAdditionalInformation}"
                                                    Text="{Binding Title}"
                                                    Foreground="{DynamicResource ToolTipForegroundBrushKey}"
                                                    Margin="8,5"
                                                    FontSize="12"
                                                    RenderOptions.ClearTypeHint="Enabled"/>
                                            </ToolTip>
                                        </ToolTipService.ToolTip>
                                        <Button.Content>
                                            <TextBlock
                                                AutomationProperties.Name="{x:Static p:Resources.ContextMenuIcon}"
                                                FontFamily="{Binding FontFamily}"
                                                FontSize="16"
                                                Text="{Binding Glyph}"
                                                RenderOptions.ClearTypeHint="Enabled"/>
                                        </Button.Content>
                                    </Button>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</UserControl>