0
0
mirror of https://github.com/sp-tarkov/launcher.git synced 2025-02-12 22:30:43 -05:00

add mod info page

This commit is contained in:
IsWaffle 2024-01-26 12:35:57 -05:00
parent 9a57b67766
commit fa8284da52
6 changed files with 199 additions and 171 deletions

View File

@ -14,9 +14,9 @@
> >
<StackPanel Grid.Row="1" Grid.ColumnSpan="3" Grid.Column="1" <StackPanel Grid.Row="1" Grid.ColumnSpan="3" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Orientation="Horizontal" Spacing="5" Orientation="Horizontal" Spacing="5"
> >
<Path Data="{StaticResource Server}" Fill="{StaticResource AKI_Brush_DarkGrayBlue}" <Path Data="{StaticResource Server}" Fill="{StaticResource AKI_Brush_DarkGrayBlue}"
IsVisible="{Binding IsInServer, RelativeSource={RelativeSource AncestorType=UserControl}}" IsVisible="{Binding IsInServer, RelativeSource={RelativeSource AncestorType=UserControl}}"
/> />

View File

@ -0,0 +1,10 @@
using ReactiveUI;
namespace Aki.Launcher.ViewModels;
public class ModInfoViewModel : ViewModelBase
{
public ModInfoViewModel(IScreen Host) : base(Host)
{
}
}

View File

@ -104,7 +104,8 @@ namespace Aki.Launcher.ViewModels
} }
} }
public void ToggleModsListCommand() => ModsListIsVisible = !ModsListIsVisible; public void OpenModsInfoCommand() =>
NavigateTo(new ModInfoViewModel(HostScreen));
public void LogoutCommand() public void LogoutCommand()
{ {

View File

@ -0,0 +1,14 @@
<UserControl 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"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Aki.Launcher.Views.ModInfoView">
<Grid RowDefinitions="10, Auto, *, 10" ColumnDefinitions="10, *, 10">
<Button Grid.Row="1" Grid.Column="1" Content="Back"
Command="{Binding NavigateBack}"
/>
<Label Grid.Row="2" Grid.Column="1" Content="Welcome to Avalonia!"
/>
</Grid>
</UserControl>

View File

@ -0,0 +1,20 @@
using Aki.Launcher.ViewModels;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.ReactiveUI;
namespace Aki.Launcher.Views;
public partial class ModInfoView : ReactiveUserControl<ModInfoViewModel>
{
public ModInfoView()
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@ -4,183 +4,166 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:helpers="using:Aki.Launcher.Helpers" xmlns:helpers="using:Aki.Launcher.Helpers"
xmlns:cvt="using:Aki.Launcher.Converters" xmlns:cvt="using:Aki.Launcher.Converters"
xmlns:cc="using:Aki.Launcher.CustomControls" xmlns:cc="using:Aki.Launcher.CustomControls"
xmlns:launcher="using:Aki.Launcher.Models.Aki" xmlns:launcher="using:Aki.Launcher.Models.Aki"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Aki.Launcher.Views.ProfileView"> x:Class="Aki.Launcher.Views.ProfileView">
<UserControl.Resources>
<cvt:ImageSourceConverter x:Key="imageSourceCvt"/>
</UserControl.Resources>
<Grid RowDefinitions="10,AUTO,10,AUTO,10,*,10,AUTO,10" ColumnDefinitions="10,AUTO,10,*,10"> <UserControl.Resources>
<cvt:ImageSourceConverter x:Key="imageSourceCvt" />
</UserControl.Resources>
<!-- profile info --> <Grid RowDefinitions="10,AUTO,10,AUTO,10,*,10,AUTO,10" ColumnDefinitions="10,AUTO,10,*,10">
<Border Grid.Row="1" Grid.Column="1" CornerRadius="5"
BorderBrush="{StaticResource AKI_Background_Dark}"
BorderThickness="5">
<Grid RowDefinitions="10,AUTO,AUTO,AUTO,AUTO,10" ColumnDefinitions="10,AUTO,*,10"
Background="{StaticResource AKI_Background_Dark}"
>
<StackPanel Orientation="Horizontal" Grid.Row="1" Grid.Column="1">
<Label Content="{Binding CurrentUsername}" Margin="5 0"/>
<!-- profile name and version --> <!-- profile info -->
<Label x:Name="akiVersion" <Border Grid.Row="1" Grid.Column="1" CornerRadius="5"
Background="Transparent" BorderBrush="{StaticResource AKI_Background_Dark}"
ToolTip.Tip="{Binding ProfileInfo.MismatchMessage}" BorderThickness="5">
Classes.versionMismatch="{Binding ProfileInfo.VersionMismatch}" <Grid RowDefinitions="10,AUTO,AUTO,AUTO,AUTO,10" ColumnDefinitions="10,AUTO,*,10"
> Background="{StaticResource AKI_Background_Dark}">
<StackPanel Orientation="Horizontal" Background="Transparent"> <StackPanel Orientation="Horizontal" Grid.Row="1" Grid.Column="1">
<TextBlock Text="{Binding ProfileInfo.Aki.version}"/> <Label Content="{Binding CurrentUsername}" Margin="5 0" />
<Path Data="{StaticResource Alert}" Fill="{Binding ElementName=akiVersion, Path=Foreground}"
Margin="10 0"
IsVisible="{Binding ProfileInfo.VersionMismatch}"
/>
</StackPanel>
</Label>
</StackPanel>
<!-- delete profile button --> <!-- profile name and version -->
<Button HorizontalAlignment="Right" Grid.Row="1" Grid.Column="2" <Label x:Name="akiVersion"
Classes="icon" Background="Transparent"
Command="{Binding RemoveProfileCommand}" ToolTip.Tip="{Binding ProfileInfo.MismatchMessage}"
IsEnabled="{Binding Source={x:Static helpers:LauncherSettingsProvider.Instance}, Path=!GameRunning}" Classes.versionMismatch="{Binding ProfileInfo.VersionMismatch}">
> <StackPanel Orientation="Horizontal" Background="Transparent">
<Path Data="{StaticResource Delete}" Fill="IndianRed"/> <TextBlock Text="{Binding ProfileInfo.Aki.version}" />
</Button> <Path Data="{StaticResource Alert}"
Fill="{Binding ElementName=akiVersion, Path=Foreground}"
Margin="10 0"
IsVisible="{Binding ProfileInfo.VersionMismatch}" />
</StackPanel>
</Label>
</StackPanel>
<!-- profile id button --> <!-- delete profile button -->
<Button Content="{Binding CurrentID}" Classes="link" <Button HorizontalAlignment="Right" Grid.Row="1" Grid.Column="2"
Grid.Row="2" Grid.Column="1" Classes="icon"
Command="{Binding CopyCommand}" Command="{Binding RemoveProfileCommand}"
CommandParameter="{Binding CurrentID}" IsEnabled="{Binding Source={x:Static helpers:LauncherSettingsProvider.Instance}, Path=!GameRunning}">
/> <Path Data="{StaticResource Delete}" Fill="IndianRed" />
</Button>
<!-- profile edition button --> <!-- profile id button -->
<Button Content="{Binding CurrentEdition}" Classes="link" <Button Content="{Binding CurrentID}" Classes="link"
Grid.Row="3" Grid.Column="1" Grid.Row="2" Grid.Column="1"
Command="{Binding ChangeEditionCommand}" Command="{Binding CopyCommand}"
IsEnabled="{Binding Source={x:Static helpers:LauncherSettingsProvider.Instance}, Path=!GameRunning}" CommandParameter="{Binding CurrentID}" />
/>
<!-- wipe profile checkbox --> <!-- profile edition button -->
<CheckBox Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=wipe_on_start}" <Button Content="{Binding CurrentEdition}" Classes="link"
Grid.Row="4" Grid.Column="1" Grid.Row="3" Grid.Column="1"
IsChecked="{Binding WipeProfileOnStart}" Command="{Binding ChangeEditionCommand}"
IsEnabled="{Binding Source={x:Static helpers:LauncherSettingsProvider.Instance}, Path=!GameRunning}" IsEnabled="{Binding Source={x:Static helpers:LauncherSettingsProvider.Instance}, Path=!GameRunning}" />
IsVisible="{Binding !ProfileWipePending}"
/>
</Grid>
</Border>
<!-- Total Mods Info -->
<Border Grid.Row="3" Grid.Column="1" CornerRadius="5"
BorderBrush="{StaticResource AKI_Background_Dark}"
BorderThickness="5" IsVisible="{Binding ModInfoCollection.HasMods}"
>
<Grid RowDefinitions="10,AUTO,AUTO,10" ColumnDefinitions="10,AUTO,*,AUTO,AUTO,AUTO,10"
Background="{StaticResource AKI_Background_Dark}">
<Label Grid.Row="1" Grid.Column="1" Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=server_mods}"
/>
<Label Grid.Row="2" Grid.Column="1" Content="{Binding ModInfoCollection.ServerModsCount}"
/>
<Label Grid.Row="1" Grid.Column="3" Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=profile_mods}"
/>
<Path Grid.Row="1" Grid.Column="4" Margin="10 4 0 0" IsVisible="{Binding ModInfoCollection.HasProfileOnlyMods}"
Data="{StaticResource Alert}" Fill="{StaticResource AKI_Brush_Yellow}"
/>
<Label Grid.Row="2" Grid.Column="3" Content="{Binding ModInfoCollection.ProfileModsCount}"
/>
<Button Grid.Row="0" Grid.RowSpan="4" Grid.Column="5" Grid.ColumnSpan="2"
VerticalAlignment="Stretch" FontSize="18" Margin="10 0 0 0"
Command="{Binding ToggleModsListCommand}"
Classes="icon"
>
<Button.Content>
<DockPanel LastChildFill="True">
<Path Data="{StaticResource Visible}" Fill="{StaticResource AKI_Foreground_Light}"
VerticalAlignment="Center"
IsVisible="{Binding !ModsListIsVisible}"
/>
<Path Data="{StaticResource Hide}" Fill="{StaticResource AKI_Foreground_Light}"
VerticalAlignment="Center"
IsVisible="{Binding ModsListIsVisible}"
/>
</DockPanel>
</Button.Content>
</Button>
</Grid>
</Border>
<!-- Mods List --> <!-- wipe profile checkbox -->
<ScrollViewer Grid.Row="1" Grid.RowSpan="5" Grid.Column="3" IsVisible="{Binding ModsListIsVisible}"> <CheckBox
<ItemsControl Items="{Binding ModInfoCollection.Mods}"> Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=wipe_on_start}"
<ItemsControl.ItemTemplate> Grid.Row="4" Grid.Column="1"
<DataTemplate DataType="{x:Type launcher:AkiMod}"> IsChecked="{Binding WipeProfileOnStart}"
<cc:ModInfoCard ModName="{Binding Name}" IsEnabled="{Binding Source={x:Static helpers:LauncherSettingsProvider.Instance}, Path=!GameRunning}"
Author="{Binding Author}" IsVisible="{Binding !ProfileWipePending}" />
Version="{Binding Version}"
IsInServer="{Binding InServer}"
IsInProfile="{Binding InProfile}"
Margin="0 0 0 10"
/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
<!-- Bottom bar -->
<Border Grid.Row="7" Grid.Column="1" Grid.ColumnSpan="3" CornerRadius="5"
BorderBrush="{StaticResource AKI_Background_Dark}"
BorderThickness="5"
>
<DockPanel Background="{StaticResource AKI_Background_Dark}">
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Stretch"
Spacing="10"
IsVisible="{Binding ProfileInfo.HasData}"
>
<Grid RowDefinitions="AUTO,AUTO" ColumnDefinitions="AUTO,AUTO">
<Image Source="{Binding SideImage.Path, Converter={StaticResource imageSourceCvt}}"
Grid.RowSpan="2" Height="40" Margin="10 0"/>
<Label Content="{Binding ProfileInfo.Nickname}" Grid.Row="0" Grid.Column="2"/>
<Label Content="{Binding ProfileInfo.Side}" Grid.Row="1" Grid.Column="2"/>
</Grid> </Grid>
<Label Content="{Binding ProfileInfo.Level}" VerticalAlignment="Center" </Border>
FontSize="22"/>
<ProgressBar Value="{Binding ProfileInfo.XPLevelProgress}"/> <!-- Total Mods Info -->
<StackPanel> <Border Grid.Row="3" Grid.Column="1" CornerRadius="5"
<Label Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=next_level_in}" BorderBrush="{StaticResource AKI_Background_Dark}"
HorizontalAlignment="Center" BorderThickness="5" IsVisible="{Binding ModInfoCollection.HasMods}">
/> <Grid RowDefinitions="10,AUTO,AUTO,10" ColumnDefinitions="10,AUTO,*,AUTO,AUTO,AUTO,10"
<Label Content="{Binding ProfileInfo.RemainingExp, StringFormat={}{0} xp}" Background="{StaticResource AKI_Background_Dark}">
HorizontalAlignment="Center" <Label Grid.Row="1" Grid.Column="1"
/> Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=server_mods}" />
</StackPanel> <Label Grid.Row="2" Grid.Column="1" Content="{Binding ModInfoCollection.ServerModsCount}" />
</StackPanel> <Label Grid.Row="1" Grid.Column="3"
Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=profile_mods}" />
<Path Grid.Row="1" Grid.Column="4" Margin="10 4 0 0"
IsVisible="{Binding ModInfoCollection.HasProfileOnlyMods}"
Data="{StaticResource Alert}" Fill="{StaticResource AKI_Brush_Yellow}" />
<Label Grid.Row="2" Grid.Column="3" Content="{Binding ModInfoCollection.ProfileModsCount}" />
<Button Grid.Row="0" Grid.RowSpan="4" Grid.Column="5" Grid.ColumnSpan="2"
VerticalAlignment="Stretch" FontSize="18" Margin="10 0 0 0"
Command="{Binding OpenModsInfoCommand}"
Classes="icon">
<Button.Content>
<DockPanel LastChildFill="True">
<Path Data="{StaticResource Visible}" Fill="{StaticResource AKI_Foreground_Light}"
VerticalAlignment="Center"
IsVisible="{Binding !ModsListIsVisible}" />
<Path Data="{StaticResource Hide}" Fill="{StaticResource AKI_Foreground_Light}"
VerticalAlignment="Center"
IsVisible="{Binding ModsListIsVisible}" />
</DockPanel>
</Button.Content>
</Button>
</Grid>
</Border>
<!-- Mods List -->
<!-- <ScrollViewer Grid.Row="1" Grid.RowSpan="5" Grid.Column="3" IsVisible="{Binding ModsListIsVisible}"> -->
<!-- <ItemsControl Items="{Binding ModInfoCollection.Mods}"> -->
<!-- <ItemsControl.ItemTemplate> -->
<!-- <DataTemplate DataType="{x:Type launcher:AkiMod}"> -->
<!-- <cc:ModInfoCard ModName="{Binding Name}" -->
<!-- Author="{Binding Author}" -->
<!-- Version="{Binding Version}" -->
<!-- IsInServer="{Binding InServer}" -->
<!-- IsInProfile="{Binding InProfile}" -->
<!-- Margin="0 0 0 10" /> -->
<!-- </DataTemplate> -->
<!-- </ItemsControl.ItemTemplate> -->
<!-- </ItemsControl> -->
<!-- </ScrollViewer> -->
<!-- Bottom bar -->
<Border Grid.Row="7" Grid.Column="1" Grid.ColumnSpan="3" CornerRadius="5"
BorderBrush="{StaticResource AKI_Background_Dark}"
BorderThickness="5">
<DockPanel Background="{StaticResource AKI_Background_Dark}">
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Stretch"
Spacing="10"
IsVisible="{Binding ProfileInfo.HasData}">
<Grid RowDefinitions="AUTO,AUTO" ColumnDefinitions="AUTO,AUTO">
<Image Source="{Binding SideImage.Path, Converter={StaticResource imageSourceCvt}}"
Grid.RowSpan="2" Height="40" Margin="10 0" />
<Label Content="{Binding ProfileInfo.Nickname}" Grid.Row="0" Grid.Column="2" />
<Label Content="{Binding ProfileInfo.Side}" Grid.Row="1" Grid.Column="2" />
</Grid>
<Label Content="{Binding ProfileInfo.Level}" VerticalAlignment="Center"
FontSize="22" />
<ProgressBar Value="{Binding ProfileInfo.XPLevelProgress}" />
<StackPanel>
<Label
Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=next_level_in}"
HorizontalAlignment="Center" />
<Label Content="{Binding ProfileInfo.RemainingExp, StringFormat={}{0} xp}"
HorizontalAlignment="Center" />
</StackPanel>
</StackPanel>
<Button Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=start_game}" <Button Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=start_game}"
HorizontalAlignment="Right" HorizontalAlignment="Right"
VerticalContentAlignment="Center" VerticalContentAlignment="Center"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
DockPanel.Dock="Right" DockPanel.Dock="Right"
Command="{Binding StartGameCommand}" Command="{Binding StartGameCommand}"
IsEnabled="{Binding Source={x:Static helpers:LauncherSettingsProvider.Instance}, Path=!GameRunning}" IsEnabled="{Binding Source={x:Static helpers:LauncherSettingsProvider.Instance}, Path=!GameRunning}"
Classes="yellow" Classes="yellow" />
/>
<Button Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=logout}"
<Button Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=logout}" Command="{Binding LogoutCommand}"
Command="{Binding LogoutCommand}" Margin="10 0"
Margin="10 0" Classes="link"
Classes="link" DockPanel.Dock="Right"
DockPanel.Dock="Right" HorizontalAlignment="Right" />
HorizontalAlignment="Right"
/> </DockPanel>
</Border>
</DockPanel> </Grid>
</Border> </UserControl>
</Grid>
</UserControl>