JD2022-TU1/main/tools/modules/JD.Guinness.WPF.Module/View/ChallengeView.xaml

343 lines
22 KiB
XML

<DockPanel
x:Class="JD.Guinness.WPF.Module.View.ChallengeView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:editors="http://schemas.actiprosoftware.com/winfx/xaml/editors"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dataGrid="clr-namespace:ActiproSoftware.Windows.Controls.DataGrid;assembly=DataGrid.Contrib"
xmlns:behavior="clr-namespace:JD.Guinness.WPF.Module.Behavior"
xmlns:control="clr-namespace:JD.Guinness.WPF.Module.Control"
xmlns:ps4="clr-namespace:JD.Guinness.WPF.Module.Model.Ps4"
xmlns:ps5="clr-namespace:JD.Guinness.WPF.Module.Model.Ps5"
xmlns:stadia="clr-namespace:JD.Guinness.WPF.Module.Model.Stadia"
xmlns:xBoxOne="clr-namespace:JD.Guinness.WPF.Module.Model.XBoxOne"
xmlns:xBoxSeriesX="clr-namespace:JD.Guinness.WPF.Module.Model.XBoxSeriesX"
Name="This"
Margin="5">
<DockPanel.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Resource/Icons.xaml"/>
<ResourceDictionary Source="../Resource/Converters.xaml"/>
</ResourceDictionary.MergedDictionaries>
<control:DataGridHeaderTemplateSelector x:Key="DataGridHeaderTemplateSelector" />
<Style TargetType="ToggleButton">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Opacity" Value=".25"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid Background="Transparent">
<ContentPresenter Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Opacity" Value="1"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="0.5"/>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</DockPanel.Resources>
<DockPanel DockPanel.Dock="Bottom" Margin="0,5,0,0">
<Button DockPanel.Dock="Right" Command="{Binding GenerateCommand}" Height="40" Margin="5,0,0,0" Padding="5">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Generate " VerticalAlignment="Center"/>
<ContentPresenter ContentTemplate="{StaticResource GenerateIcon}"/>
</StackPanel>
</Button>
<UniformGrid Rows="1" VerticalAlignment="Center" IsEnabled="{Binding Game.IsAvailable}" Height="30">
<ToggleButton ToolTip="PS4" IsChecked="{Binding Game.Ps4Configuration.Generate}">
<ContentPresenter ContentTemplate="{StaticResource PS4Icon}"/>
</ToggleButton>
<ToggleButton ToolTip="PS5" IsChecked="{Binding Game.Ps5Configuration.Generate}">
<ContentPresenter ContentTemplate="{StaticResource PS5Icon}"/>
</ToggleButton>
<ToggleButton ToolTip="XBOX ONE" IsChecked="{Binding Game.XBoxOneConfiguration.Generate}">
<ContentPresenter ContentTemplate="{StaticResource XBOXONEIcon}"/>
</ToggleButton>
<ToggleButton ToolTip="XBOX SERIES X" IsChecked="{Binding Game.XBoxSeriesXConfiguration.Generate}">
<ContentPresenter ContentTemplate="{StaticResource XBOXSERIESXIcon}"/>
</ToggleButton>
<ToggleButton ToolTip="Stadia" IsChecked="{Binding Game.StadiaConfiguration.Generate}">
<ContentPresenter ContentTemplate="{StaticResource StadiaIcon}"/>
</ToggleButton>
</UniformGrid>
</DockPanel>
<Grid DockPanel.Dock="Top" Margin="0,0,0,5">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<StackPanel.Resources>
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Width" Value="30"/>
<Setter Property="Height" Value="30"/>
<Setter Property="Padding" Value="0"/>
</Style>
</StackPanel.Resources>
<Button ToolTip="Add challenge" Command="{Binding AddChallengeCommand}">
<ContentPresenter ContentTemplate="{StaticResource AddIcon}"/>
</Button>
<Button ToolTip="Remove challenge" Command="{Binding RemoveChallengeCommand}" CommandParameter="{Binding SelectedItems, ElementName=DataGrid}" Margin="5,0,0,0">
<ContentPresenter ContentTemplate="{StaticResource RemoveIcon}"/>
</Button>
<Button ToolTip="Duplicate challenge" Command="{Binding DuplicateChallengeCommand}" CommandParameter="{Binding SelectedItems, ElementName=DataGrid}" Margin="5,0,0,0">
<ContentPresenter ContentTemplate="{StaticResource DuplicateIcon}"/>
</Button>
</StackPanel>
<TextBlock Text="{Binding Game.Challenges.Count, StringFormat={}{0} challenges}" VerticalAlignment="Center" HorizontalAlignment="Right" FontSize="15"/>
</Grid>
<dataGrid:ThemedDataGrid
Name="DataGrid"
ItemsSource="{Binding Game.Challenges}"
behavior:DataGridBehavior.ShowCustomColumns="True"
AutoGenerateColumns="False"
IsReadOnly="{Binding Game.IsAvailable, Converter={StaticResource InverseBooleanConverter}}"
SelectionMode="Extended"
GridLinesVisibility="None"
HeadersVisibility="Column"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeRows="False"
CanUserSortColumns="True"
CanUserReorderColumns="True"
ColumnWidth="Auto">
<dataGrid:ThemedDataGrid.Resources>
<Style TargetType="editors:AutoCompleteBox" BasedOn="{StaticResource {x:Type editors:AutoCompleteBox}}">
<Setter Property="ItemsSource" Value="{Binding DataContext.Game.OasisLines, ElementName=This}"/>
<Setter Property="PlaceholderText" Value="Select an oasis line"/>
<Setter Property="DataFilter">
<Setter.Value>
<editors:AutoCompleteBoxStringFilter />
</Setter.Value>
</Setter>
<Setter Property="behavior:AutoCompleteBoxBehavior.ShowAllOnOpen" Value="True" />
</Style>
</dataGrid:ThemedDataGrid.Resources>
<dataGrid:ThemedDataGrid.InputBindings>
<KeyBinding Key="Insert" Command="{Binding AddChallengeCommand}"/>
<KeyBinding Key="Delete" Command="{Binding RemoveChallengeCommand}" CommandParameter="{Binding SelectedItems, ElementName=DataGrid}"/>
<KeyBinding
Key="F2"
Command="{Binding Game.ItemFocuser.GoToItemCommand}"
CommandParameter="{Binding SelectedItem, ElementName=DataGrid, Converter={StaticResource ChallengeToPlatformChallengeConverter}, ConverterParameter={x:Type ps4:Ps4Trophy}}"/>
<KeyBinding
Key="F3"
Command="{Binding Game.ItemFocuser.GoToItemCommand}"
CommandParameter="{Binding SelectedItem, ElementName=DataGrid, Converter={StaticResource ChallengeToPlatformChallengeConverter}, ConverterParameter={x:Type ps5:Ps5Trophy}}"/>
<KeyBinding
Key="F4"
Command="{Binding Game.ItemFocuser.GoToItemCommand}"
CommandParameter="{Binding SelectedItem, ElementName=DataGrid, Converter={StaticResource ChallengeToPlatformChallengeConverter}, ConverterParameter={x:Type xBoxOne:XBoxOneAchievement}}"/>
<KeyBinding
Key="F5"
Command="{Binding Game.ItemFocuser.GoToItemCommand}"
CommandParameter="{Binding SelectedItem, ElementName=DataGrid, Converter={StaticResource ChallengeToPlatformChallengeConverter}, ConverterParameter={x:Type xBoxSeriesX:XBoxSeriesXAchievement}}"/>
<KeyBinding
Key="F6"
Command="{Binding Game.ItemFocuser.GoToItemCommand}"
CommandParameter="{Binding SelectedItem, ElementName=DataGrid, Converter={StaticResource ChallengeToPlatformChallengeConverter}, ConverterParameter={x:Type stadia:StadiaAchievement}}"/>
</dataGrid:ThemedDataGrid.InputBindings>
<dataGrid:ThemedDataGrid.ContextMenu>
<ContextMenu>
<MenuItem
Header="Add new column"
Command="{Binding Source={x:Static behavior:DataGridBehavior.AddColumnCommand}}"
CommandParameter="{Binding PlacementTarget, RelativeSource={RelativeSource AncestorType=ContextMenu}}">
<MenuItem.Icon>
<ContentPresenter ContentTemplate="{StaticResource AddColumnIcon}"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem
Header="Shown columns"
ItemsSource="{Binding PlacementTarget.Columns, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
ItemTemplateSelector="{StaticResource DataGridHeaderTemplateSelector}">
<MenuItem.Icon>
<ContentPresenter ContentTemplate="{StaticResource ColumnsIcon}"/>
</MenuItem.Icon>
</MenuItem>
<Separator/>
<MenuItem Header="Go to platform challenge" ItemsSource="{Binding PlacementTarget.SelectedItem.PlatformChallenges, RelativeSource={RelativeSource AncestorType=ContextMenu}}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
<Setter Property="Command" Value="{Binding PlacementTarget.DataContext.Game.ItemFocuser.GoToItemCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
<Setter Property="CommandParameter" Value="{Binding}"/>
<Setter Property="Header" Value="PS4"/>
<Setter Property="InputGestureText" Value="F2"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Converter={StaticResource IsOfTypeConverter}, ConverterParameter={x:Type ps5:Ps5Trophy}}" Value="True">
<Setter Property="Header" Value="PS5"/>
<Setter Property="InputGestureText" Value="F3"/>
</DataTrigger>
<DataTrigger Binding="{Binding Converter={StaticResource IsOfTypeConverter}, ConverterParameter={x:Type xBoxOne:XBoxOneAchievement}}" Value="True">
<Setter Property="Header" Value="XBOX ONE"/>
<Setter Property="InputGestureText" Value="F4"/>
</DataTrigger>
<DataTrigger Binding="{Binding Converter={StaticResource IsOfTypeConverter}, ConverterParameter={x:Type xBoxSeriesX:XBoxSeriesXAchievement}}" Value="True">
<Setter Property="Header" Value="XBOX SERIES X"/>
<Setter Property="InputGestureText" Value="F5"/>
</DataTrigger>
<DataTrigger Binding="{Binding Converter={StaticResource IsOfTypeConverter}, ConverterParameter={x:Type stadia:StadiaAchievement}}" Value="True">
<Setter Property="Header" Value="Stadia"/>
<Setter Property="InputGestureText" Value="F6"/>
</DataTrigger>
</Style.Triggers>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<Separator/>
<MenuItem
Header="Add challenge"
Command="{Binding AddChallengeCommand}"
InputGestureText="Insert">
<MenuItem.Icon>
<ContentPresenter ContentTemplate="{StaticResource AddIcon}"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem
Header="Remove challenge"
Command="{Binding RemoveChallengeCommand}"
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
InputGestureText="Delete">
<MenuItem.Icon>
<ContentPresenter ContentTemplate="{StaticResource RemoveIcon}"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem
Header="Duplicate challenge"
Command="{Binding DuplicateChallengeCommand}"
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}">
<MenuItem.Icon>
<ContentPresenter ContentTemplate="{StaticResource DuplicateIcon}"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</dataGrid:ThemedDataGrid.ContextMenu>
<dataGrid:ThemedDataGrid.Columns>
<DataGridTemplateColumn Header="Warnings" IsReadOnly="True" SortMemberPath="Warnings">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl ToolTip="{Binding Warnings}" Margin="0,0,5,0">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Warnings}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
<ContentPresenter Height="24" ContentTemplate="{StaticResource WarningIcon}"/>
</ContentControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Name (Oasis id)" SortMemberPath="Name.Id">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name.Id}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<editors:AutoCompleteBox SelectedItem="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Id" TextMemberPath="Id"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Name (Oasis path)" SortMemberPath="Name.Path" Visibility="Collapsed">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name.Path}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<editors:AutoCompleteBox SelectedItem="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Path" TextMemberPath="Path"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Name" IsReadOnly="True" Binding="{Binding Name, Converter={StaticResource LocalizedLineToMasterConverter}, FallbackValue=..., IsAsync=True}"/>
<DataGridTemplateColumn Header="Objective (Oasis id)" SortMemberPath="Objective.Id">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Objective.Id}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<editors:AutoCompleteBox SelectedItem="{Binding Objective, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Id" TextMemberPath="Id"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Objective (Oasis path)" SortMemberPath="Objective.Path" Visibility="Collapsed">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Objective.Path}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<editors:AutoCompleteBox SelectedItem="{Binding Objective, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Path" TextMemberPath="Path"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Objective" IsReadOnly="True" Binding="{Binding Objective, Converter={StaticResource LocalizedLineToMasterConverter}, FallbackValue=..., IsAsync=True}"/>
<DataGridTemplateColumn Header="Platforms" CanUserSort="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Background="Transparent" IsHitTestVisible="True">
<StackPanel Orientation="Horizontal" Height="30">
<ToggleButton
Margin="0,0,10,0"
ToolTip="PS4"
IsChecked="{Binding PlatformChallenges, Mode=OneWay, Converter={StaticResource ChallengeHasPlatformConverter}, ConverterParameter={x:Type ps4:Ps4Trophy}}"
Command="{Binding DataContext.TogglePs4TropyCommand, ElementName=This}"
CommandParameter="{Binding}">
<ContentPresenter ContentTemplate="{StaticResource PS4Icon}"/>
</ToggleButton>
<ToggleButton
Margin="0,0,10,0"
ToolTip="PS5"
IsChecked="{Binding PlatformChallenges, Mode=OneWay, Converter={StaticResource ChallengeHasPlatformConverter}, ConverterParameter={x:Type ps5:Ps5Trophy}}"
Command="{Binding DataContext.TogglePs5TropyCommand, ElementName=This}"
CommandParameter="{Binding}">
<ContentPresenter ContentTemplate="{StaticResource PS5Icon}"/>
</ToggleButton>
<ToggleButton
Margin="0,0,10,0"
ToolTip="XBOX ONE"
IsChecked="{Binding PlatformChallenges, Mode=OneWay, Converter={StaticResource ChallengeHasPlatformConverter}, ConverterParameter={x:Type xBoxOne:XBoxOneAchievement}}"
Command="{Binding DataContext.ToggleXBoxOneAchievementCommand, ElementName=This}"
CommandParameter="{Binding}">
<ContentPresenter ContentTemplate="{StaticResource XBOXONEIcon}"/>
</ToggleButton>
<ToggleButton
Margin="0,0,10,0"
ToolTip="XBOX SERIES X"
IsChecked="{Binding PlatformChallenges, Mode=OneWay, Converter={StaticResource ChallengeHasPlatformConverter}, ConverterParameter={x:Type xBoxSeriesX:XBoxSeriesXAchievement}}"
Command="{Binding DataContext.ToggleXBoxSeriesXAchievementCommand, ElementName=This}"
CommandParameter="{Binding}">
<ContentPresenter ContentTemplate="{StaticResource XBOXSERIESXIcon}"/>
</ToggleButton>
<ToggleButton
ToolTip="Stadia"
IsChecked="{Binding PlatformChallenges, Mode=OneWay, Converter={StaticResource ChallengeHasPlatformConverter}, ConverterParameter={x:Type stadia:StadiaAchievement}}"
Command="{Binding DataContext.ToggleStadiaAchievementCommand, ElementName=This}"
CommandParameter="{Binding}">
<ContentPresenter ContentTemplate="{StaticResource StadiaIcon}"/>
</ToggleButton>
</StackPanel>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</dataGrid:ThemedDataGrid.Columns>
</dataGrid:ThemedDataGrid>
</DockPanel>