Rework main menu UI

This commit is contained in:
trawzified 2023-11-26 20:15:53 +01:00
parent 3cdbfe490f
commit 1222280643
31 changed files with 423 additions and 151 deletions

View File

@ -9,6 +9,7 @@ public static class Consts
public static RelativePath MO2IniName = "ModOrganizer.ini".ToRelativePath();
public static string AppName = "Wabbajack";
public static Uri WabbajackBuildServerUri => new("https://build.wabbajack.org");
public static Uri WabbajackModlistWizardUri => new("https://wizard.wabbajack.org");
public static Version CurrentMinimumWabbajackVersion { get; set; } = Version.Parse("2.3.0.0");
public static bool UseNetworkWorkaroundMode { get; set; } = false;
public static AbsolutePath CefCacheLocation { get; } = KnownFolders.WabbajackAppLocal.Combine("Cef");

View File

@ -0,0 +1,25 @@
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
namespace Wabbajack
{
public class WidthHeightRectConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
double rectWidth = 0;
double rectHeight = 0;
if (values[0] is not null && double.TryParse(values[0].ToString(), out var width))
rectWidth = width;
else return null;
if (values[1] is not null && double.TryParse(values[1].ToString(), out var height))
rectHeight = height;
else return null;
return new Rect(0, 0, rectWidth, rectHeight);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
=> throw new NotImplementedException();
}
}

View File

@ -10,7 +10,7 @@
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d">
<FontFamily x:Key="AtkinsonHyperlegible">pack://application:,,,/Resources/Fonts/#Atkinson Hyperlegible</FontFamily>
<FontFamily x:Key="PrimaryFont">pack://application:,,,/Resources/Fonts/#Gabarito</FontFamily>
<!-- Converters -->
<local:BoolToVisibilityConverter x:Key="bool2VisibilityConverter" />
@ -21,13 +21,14 @@
<local:IsTypeVisibilityConverter x:Key="IsTypeVisibilityConverter" />
<local:AbsolutePathToStringConverter x:Key="AbsolutePathToStringConverter" />
<local:FileSizeConverter x:Key="FileSizeConverter"/>
<local:WidthHeightRectConverter x:Key="WidthHeightRectConverter" />
<!-- Colors -->
<Color x:Key="WindowBackgroundColor">#121212</Color>
<Color x:Key="DarkBackgroundColor">#222222</Color>
<Color x:Key="DarkHoverBackgroundColor">#272727</Color>
<Color x:Key="WindowBackgroundColor">#222531</Color>
<Color x:Key="DarkBackgroundColor">#222531</Color>
<Color x:Key="DarkHoverBackgroundColor">#2A2B41</Color>
<Color x:Key="LightBackgroundColor">#424242</Color>
<Color x:Key="BackgroundColor">#323232</Color>
<Color x:Key="BackgroundColor">#222531</Color>
<Color x:Key="DisabledBackgroundColor">#424242</Color>
<Color x:Key="PressedBackgroundColor">#323232</Color>
<Color x:Key="LightDisabledBackgroundColor">#666666</Color>
@ -46,7 +47,7 @@
<Color x:Key="Primary">#D9BBF9</Color>
<Color x:Key="PrimaryTransparent">#00BB86FC</Color>
<Color x:Key="PrimaryVariant">#3700B3</Color>
<Color x:Key="PrimaryVariant">#8866ad</Color>
<Color x:Key="DarkPrimaryVariant">#270080</Color>
<Color x:Key="DarkerPrimaryVariant">#1b0059</Color>
<Color x:Key="Secondary">#03DAC6</Color>
@ -236,21 +237,21 @@
<!-- FontStyle -->
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontFamily" Value="{StaticResource AtkinsonHyperlegible}" />
<Setter Property="FontFamily" Value="{StaticResource PrimaryFont}" />
<!--<Setter Property="Foreground" Value="{StaticResource ForegroundBrush}"/>-->
</Style>
<Style TargetType="{x:Type Control}">
<Setter Property="FontFamily" Value="{StaticResource AtkinsonHyperlegible}" />
<Setter Property="FontFamily" Value="{StaticResource PrimaryFont}" />
<Setter Property="Foreground" Value="{StaticResource ForegroundBrush}" />
</Style>
<Style TargetType="{x:Type Window}">
<Setter Property="FontFamily" Value="{StaticResource AtkinsonHyperlegible}" />
<Setter Property="FontFamily" Value="{StaticResource PrimaryFont}" />
<Setter Property="Foreground" Value="{StaticResource ForegroundBrush}" />
<Setter Property="Background" Value="{StaticResource WindowBackgroundBrush}" />
</Style>
<!-- Necessary for Blend designer for UserControls -->
<Style TargetType="{x:Type UserControl}">
<Setter Property="FontFamily" Value="{StaticResource AtkinsonHyperlegible}" />
<Setter Property="FontFamily" Value="{StaticResource PrimaryFont}" />
<Setter Property="Foreground" Value="{StaticResource ForegroundBrush}" />
</Style>
@ -1176,13 +1177,13 @@
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="{StaticResource DarkHoverBackgroundBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource DarkComplementaryBrush}" />
<Setter Property="Foreground" Value="{StaticResource ComplementaryBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource MahApps.Brushes.Transparent}" />
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}" />
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" Value="{StaticResource PressedButtonBackground}" />
<Setter Property="BorderBrush" Value="{StaticResource ComplementaryBrush}" />
<Setter Property="Foreground" Value="{StaticResource IntenseComplementaryBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource MahApps.Brushes.Transparent}" />
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{StaticResource DisabledButtonForeground}" />
@ -1241,13 +1242,13 @@
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="{StaticResource DarkHoverBackgroundBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource DarkComplementaryBrush}" />
<Setter Property="Foreground" Value="{StaticResource ComplementaryBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource MahApps.Brushes.Transparent}" />
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}" />
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" Value="{StaticResource PressedButtonBackground}" />
<Setter Property="BorderBrush" Value="{StaticResource ComplementaryBrush}" />
<Setter Property="Foreground" Value="{StaticResource IntenseComplementaryBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource MahApps.Brushes.Transparent}" />
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{StaticResource DisabledButtonForeground}" />
@ -1288,8 +1289,8 @@
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#333333" />
<Setter Property="BorderBrush" Value="{StaticResource MahApps.Brushes.Gray7}" />
<Setter Property="Foreground" Value="{StaticResource IntenseComplementaryBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource MahApps.Brushes.Transparent}" />
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}" />
</Trigger>
</Style.Triggers>
</Style>
@ -1319,7 +1320,7 @@
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="{StaticResource MahApps.Brushes.Gray7}" />
<Setter Property="Foreground" Value="{StaticResource IntenseComplementaryBrush}" />
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}" />
<Setter Property="Background" Value="Transparent" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
@ -1341,12 +1342,12 @@
<Setter Property="Background" Value="Transparent" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="{StaticResource MahApps.Brushes.Gray7}" />
<Setter Property="Foreground" Value="{StaticResource IntenseComplementaryBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource MahApps.Brushes.Transparent}" />
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}" />
<Setter Property="Background" Value="{StaticResource DarkBackgroundBrush}" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="BorderBrush" Value="{StaticResource DarkComplementaryBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource PrimaryBrush}" />
<Setter Property="Background" Value="{StaticResource DarkBackgroundBrush}" />
</Trigger>
</Style.Triggers>
@ -1622,7 +1623,7 @@
</Style>
<Style TargetType="{x:Type Expander}">
<Setter Property="Foreground" Value="{StaticResource Expander.MouseOver.Arrow.Stroke}" />
<Setter Property="FontFamily" Value="{StaticResource AtkinsonHyperlegible}" />
<Setter Property="FontFamily" Value="{StaticResource PrimaryFont}" />
<Setter Property="Padding" Value="2" />
<Setter Property="Background" Value="{StaticResource Expander.Background}" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
@ -2353,7 +2354,7 @@
<Setter Property="Height" Value="18" />
<Setter Property="Background" Value="{StaticResource WindowBackgroundBrush}" />
<Setter Property="Foreground" Value="{StaticResource ForegroundBrush}" />
<Setter Property="FontFamily" Value="{StaticResource AtkinsonHyperlegible}" />
<Setter Property="FontFamily" Value="{StaticResource PrimaryFont}" />
<Setter Property="FontSize" Value="{DynamicResource {x:Static SystemFonts.StatusFontSizeKey}}" />
<Setter Property="FontStyle" Value="{DynamicResource {x:Static SystemFonts.StatusFontStyleKey}}" />
<Setter Property="FontWeight" Value="{DynamicResource {x:Static SystemFonts.StatusFontWeightKey}}" />

View File

@ -59,6 +59,9 @@ namespace Wabbajack
public ICommand CopyVersionCommand { get; }
public ICommand ShowLoginManagerVM { get; }
public ICommand OpenSettingsCommand { get; }
public ICommand MinimizeCommand { get; }
public ICommand MaximizeCommand { get; }
public ICommand CloseCommand { get; }
public string VersionDisplay { get; }
@ -135,7 +138,7 @@ namespace Wabbajack
var fvi = FileVersionInfo.GetVersionInfo(string.IsNullOrWhiteSpace(assemblyLocation) ? processLocation : assemblyLocation);
Consts.CurrentMinimumWabbajackVersion = Version.Parse(fvi.FileVersion);
VersionDisplay = $"v{fvi.FileVersion}";
AppName = "WABBAJACK " + VersionDisplay;
AppName = $"{Consts.AppName} {VersionDisplay}";
_logger.LogInformation("Wabbajack Version: {FileVersion}", fvi.FileVersion);
Task.Run(() => _wjClient.SendMetric("started_wabbajack", fvi.FileVersion)).FireAndForget();
@ -168,6 +171,26 @@ namespace Wabbajack
canExecute: this.WhenAny(x => x.ActivePane)
.Select(active => !object.ReferenceEquals(active, SettingsPane)),
execute: () => NavigateToGlobal.Send(NavigateToGlobal.ScreenType.Settings));
MinimizeCommand = ReactiveCommand.Create(Minimize);
MaximizeCommand = ReactiveCommand.Create(Maximize);
CloseCommand = ReactiveCommand.Create(Close);
}
private void Minimize()
{
var mainWindow = _serviceProvider.GetRequiredService<MainWindow>();
mainWindow.WindowState = WindowState.Minimized;
}
private void Maximize()
{
var mainWindow = _serviceProvider.GetRequiredService<MainWindow>();
mainWindow.WindowState = WindowState.Maximized;
}
private void Close()
{
Environment.Exit(0);
}
private void HandleNavigateTo(ViewModel objViewModel)

View File

@ -10,19 +10,23 @@ using Wabbajack.Common;
using Wabbajack;
using Wabbajack.Messages;
using Wabbajack.Paths.IO;
using Wabbajack.Networking.WabbajackClientApi;
using System.Threading.Tasks;
using Wabbajack.DTOs;
using Microsoft.Extensions.Logging;
using System.Reactive.Disposables;
using System.Diagnostics;
namespace Wabbajack
{
public class ModeSelectionVM : ViewModel
{
public ICommand BrowseCommand { get; }
public ICommand InstallCommand { get; }
public ICommand CompileCommand { get; }
private readonly ILogger<ModeSelectionVM> _logger;
private readonly Client _wjClient;
public ReactiveCommand<Unit, Unit> UpdateCommand { get; }
public ModeSelectionVM()
public ModeSelectionVM(Client wjClient)
{
_wjClient = wjClient;
InstallCommand = ReactiveCommand.Create(() =>
{
LoadLastLoadedModlist.Send();
@ -30,6 +34,33 @@ namespace Wabbajack
});
CompileCommand = ReactiveCommand.Create(() => NavigateToGlobal.Send(NavigateToGlobal.ScreenType.Compiler));
BrowseCommand = ReactiveCommand.Create(() => NavigateToGlobal.Send(NavigateToGlobal.ScreenType.ModListGallery));
VisitModlistWizardCommand = ReactiveCommand.Create(() =>
{
ProcessStartInfo processStartInfo = new(Consts.WabbajackModlistWizardUri.ToString())
{
UseShellExecute = true
};
Process.Start(processStartInfo);
});
this.WhenActivated(async disposables =>
{
try
{
Modlists = await _wjClient.LoadLists().DisposeWith(disposables);
}
catch (Exception ex)
{
_logger.LogError(ex, "While loading lists");
}
});
}
public ICommand BrowseCommand { get; }
public ICommand InstallCommand { get; }
public ICommand CompileCommand { get; }
public ICommand VisitModlistWizardCommand { get; }
public ReactiveCommand<Unit, Unit> UpdateCommand { get; }
[Reactive]
public ModlistMetadata[] Modlists { get; set; }
}
}

View File

@ -23,7 +23,7 @@
WindowTitleBrush="{StaticResource MahApps.Brushes.Accent}"
ContentRendered="BrowserWindow_OnActivated"
mc:Ignorable="d">
<Grid Background="#121212" MouseDown="UIElement_OnMouseDown">
<Grid Background="{StaticResource BackgroundBrush}" MouseDown="UIElement_OnMouseDown">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>

View File

@ -75,7 +75,7 @@
Padding="40,20"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="65"
FontWeight="Bold"
Style="{StaticResource BackgroundBlurStyle}"
@ -89,7 +89,7 @@
Margin="35,-10,-10,10"
Padding="30,10"
HorizontalAlignment="Left"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="30"
FontWeight="Bold"
Style="{StaticResource BackgroundBlurStyle}"
@ -105,7 +105,7 @@
Margin="20,25,20,0"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="65"
FontWeight="Bold"
TextWrapping="WrapWithOverflow">
@ -116,7 +116,7 @@
<TextBlock Grid.Row="3" Grid.Column="0"
x:Name="AuthorTextBlock"
Margin="55,0,20,20"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="30"
FontWeight="Bold"
TextWrapping="Wrap">
@ -132,7 +132,7 @@
Padding="30,10"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="16"
Style="{StaticResource BackgroundBlurStyle}"
TextAlignment="Right"
@ -146,7 +146,7 @@
Margin="20,25,25,25"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="16"
TextAlignment="Right"
TextWrapping="Wrap">

View File

@ -78,7 +78,7 @@
Width="130"
Margin="0,0,0,0"
VerticalAlignment="Center"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontWeight="Black"
Foreground="{StaticResource ComplementaryBrush}"
TextAlignment="Right" />
@ -89,7 +89,7 @@
x:Name="TitleText"
Margin="15,0,0,0"
VerticalAlignment="Center"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="25"
FontWeight="Black" />
<ContentControl Grid.Column="2" />

View File

@ -45,13 +45,13 @@
</Grid.RowDefinitions>
<TextBlock Grid.Row="0"
Margin="0,0,0,10"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="30"
FontWeight="Bold"
Foreground="{StaticResource YellowBrush}"
Text="UNDER MAINTENANCE" />
<TextBlock Grid.Row="1"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="15"
FontWeight="Bold"
Foreground="{StaticResource YellowBrush}"
@ -72,7 +72,7 @@
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="100"
FontWeight="Bold"
Foreground="{StaticResource YellowBrush}"
@ -102,7 +102,7 @@
Kind="HelpCircle" />
</Button>
<TextBlock Grid.Row="1"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="100"
FontWeight="Bold"
Foreground="{StaticResource YellowBrush}"

View File

@ -26,7 +26,7 @@
x:Name="TitleText"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="22"
FontWeight="Black">
<TextBlock.Effect>

View File

@ -29,7 +29,7 @@
x:Name="TitleText"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="22"
FontWeight="Black">
<TextBlock.Effect>

View File

@ -41,7 +41,7 @@
TextAlignment="Center" />
<TextBlock x:Name="errorTextBox"
Grid.Row="3"
FontFamily="{StaticResource AtkinsonHyperlegible}" FontSize="10" FontWeight="ExtraBold"
FontFamily="{StaticResource PrimaryFont}" FontSize="10" FontWeight="ExtraBold"
Background="{StaticResource WindowBackgroundBrush}"
Foreground="Red"
Text=""

View File

@ -152,7 +152,7 @@
Margin="4"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="9"
FontWeight="Bold"
Text="NSFW" />

View File

@ -24,7 +24,7 @@
<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3"
x:Name="ShortDescription"
Margin="0,0,0,5"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="14"
FontWeight="Bold"
TextWrapping="WrapWithOverflow" />

View File

@ -14,13 +14,6 @@
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock
Text="Wabbajack is free, but supported by users like you. Please consider supporting us on Patreon to help offset the costs of hosting these modlists."
TextWrapping="Wrap"
FontWeight="Bold"
FontSize="14"
MouseDown="Patreon_Click"
/>
<Button Grid.Column="1"
Width="40"
Height="35"

View File

@ -9,68 +9,83 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:Wabbajack.View_Models"
xmlns:views="clr-namespace:Wabbajack.Views"
xmlns:ic="clr-namespace:FluentIcons.WPF;assembly=FluentIcons.WPF"
ShowTitleBar="False"
Title="WABBAJACK"
Width="1280"
Height="960"
MinWidth="850"
MinHeight="650"
ShowCloseButton="False"
ShowMinButton="False"
ShowMaxRestoreButton="False"
Title="Wabbajack"
Width="1424"
Height="686"
MinWidth="712"
MinHeight="343"
Closing="Window_Closing"
RenderOptions.BitmapScalingMode="HighQuality"
ResizeMode="CanResize"
Style="{StaticResource {x:Type Window}}"
TitleBarHeight="25"
UseLayoutRounding="True"
WindowTitleBrush="{StaticResource MahApps.Brushes.Accent}"
WindowTitleBrush="{StaticResource BackgroundBrush}"
mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="140"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" FontSize="16" Margin="0, 0, 8, 0" Name="AppName"></TextBlock>
<TextBlock Grid.Column="1" FontSize="16" Margin="5, 0" Name="ResourceUsage" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<Button Grid.Column="2" Name="SettingsButton" ToolTip="Open Wabbajack settings">
<icon:Material Kind="Cog"></icon:Material>
</Button>
</Grid>
<ContentPresenter Grid.Row="1" Content="{Binding ActivePane}">
<ContentPresenter.Resources>
<DataTemplate DataType="{x:Type local:CompilerVM}">
<local:CompilerView ViewModel="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:InstallerVM}">
<local:InstallationView ViewModel="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ModeSelectionVM}">
<local:ModeSelectionView ViewModel="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ModListGalleryVM}">
<local:ModListGalleryView ViewModel="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:WebBrowserVM}">
<local:WebBrowserView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:SettingsVM}">
<local:SettingsView ViewModel="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:ModListContentsVM}">
<local:ModListContentsView ViewModel="{Binding}" />
</DataTemplate>
</ContentPresenter.Resources>
</ContentPresenter>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" FontSize="16" Padding="8, 8" Name="AppName"></TextBlock>
<TextBlock Grid.Column="1" FontSize="16" Padding="8, 8" Name="ResourceUsage" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<Button Grid.Column="2" Name="SettingsButton" Padding="12, 8" ToolTip="Open Wabbajack settings">
<ic:SymbolIcon Symbol="Settings"/>
</Button>
<Button Grid.Column="3" Name="MinimizeButton" Padding="12, 8">
<ic:SymbolIcon Symbol="Subtract"/>
</Button>
<Button Grid.Column="4" Name="MaximizeButton" Padding="12, 8">
<ic:SymbolIcon Symbol="Maximize"/>
</Button>
<Button Grid.Column="5" Name="CloseButton" Padding="12, 8">
<ic:SymbolIcon Symbol="ArrowExit"/>
</Button>
</Grid>
<ContentPresenter Grid.Row="1" Content="{Binding ActivePane}">
<ContentPresenter.Resources>
<DataTemplate DataType="{x:Type local:CompilerVM}">
<local:CompilerView ViewModel="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:InstallerVM}">
<local:InstallationView ViewModel="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ModeSelectionVM}">
<local:ModeSelectionView ViewModel="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ModListGalleryVM}">
<local:ModListGalleryView ViewModel="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:WebBrowserVM}">
<local:WebBrowserView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:SettingsVM}">
<local:SettingsView ViewModel="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:ModListContentsVM}">
<local:ModListContentsView ViewModel="{Binding}" />
</DataTemplate>
</ContentPresenter.Resources>
</ContentPresenter>
</Grid>
</Grid>
<mahapps:MetroWindow.RightWindowCommands>
<mahapps:WindowCommands>
@ -94,6 +109,30 @@
Height="17"
Kind="Cog" />
</Button>
<Button Grid.Column="1"
Margin="5,0"
Command="{Binding MinimizeCommand}">
<icon:PackIconMaterial
Width="17"
Height="17"
Kind="WindowMinimize" />
</Button>
<Button Grid.Column="1"
Margin="5,0"
Command="{Binding MaximizeCommand}">
<icon:PackIconMaterial
Width="17"
Height="17"
Kind="WindowMaximize" />
</Button>
<Button Grid.Column="1"
Margin="5,0"
Command="{Binding CloseCommand}">
<icon:PackIconMaterial
Width="17"
Height="17"
Kind="WindowClose" />
</Button>
</mahapps:WindowCommands>
</mahapps:MetroWindow.RightWindowCommands>
<Window.TaskbarItemInfo>

View File

@ -119,6 +119,15 @@ namespace Wabbajack
((MainWindowVM) DataContext).WhenAnyValue(vm => vm.OpenSettingsCommand)
.BindTo(this, view => view.SettingsButton.Command);
((MainWindowVM) DataContext).WhenAnyValue(vm => vm.MinimizeCommand)
.BindTo(this, view => view.MinimizeButton.Command);
((MainWindowVM) DataContext).WhenAnyValue(vm => vm.MaximizeCommand)
.BindTo(this, view => view.MaximizeButton.Command);
((MainWindowVM) DataContext).WhenAnyValue(vm => vm.CloseCommand)
.BindTo(this, view => view.CloseButton.Command);
((MainWindowVM)DataContext).WhenAnyValue(vm => vm.Installer.InstallState)
.ObserveOn(RxApp.MainThreadScheduler)
.Select(v => v == InstallState.Installing ? Visibility.Collapsed : Visibility.Visible)

View File

@ -294,7 +294,7 @@
Margin="5"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="30"
FontWeight="Bold"
Style="{StaticResource BackgroundBlurStyle}"
@ -308,7 +308,7 @@
Margin="5"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="30"
FontWeight="Bold"
TextWrapping="Wrap">

View File

@ -7,6 +7,7 @@
xmlns:local="clr-namespace:Wabbajack"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:rxui="http://reactiveui.net"
xmlns:ic="clr-namespace:FluentIcons.WPF;assembly=FluentIcons.WPF"
d:DesignHeight="700"
d:DesignWidth="1000"
x:TypeArguments="local:ModeSelectionVM"
@ -15,26 +16,173 @@
<Grid.RowDefinitions>
<RowDefinition Height="3*" />
<RowDefinition Height="1*" />
<RowDefinition Height="15" />
<RowDefinition Height="0.05*" />
</Grid.RowDefinitions>
<Rectangle Grid.Row="0" Grid.RowSpan="3">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Offset="0" Color="#121212" />
<GradientStop Offset="1" Color="#121212" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<!--
<Viewbox Grid.Row="0" Grid.RowSpan="3"
Name="Banner"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Stretch="UniformToFill">
<Image Margin="40,20,40,240" Source="../Resources/Wabba_Mouth.png" />
</Viewbox>
-->
<Label Content="Welcome to Wabbajack" FontSize="36" FontWeight="Bold"/>
<Grid Grid.Row="0" Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition Height="10*" />
<RowDefinition Height="4*" />
<RowDefinition Height="2*" />
<RowDefinition Height="22*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Viewbox Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top">
<Label Grid.Row="0" FontSize="86.7" FontWeight="Bold" Padding="0" Margin="0">
<StackPanel Orientation="Horizontal">
<TextBlock Foreground="{StaticResource ForegroundBrush}" Text="Welcome to " />
<TextBlock Foreground="{StaticResource PrimaryBrush}" Text="Wabbajack" />
</StackPanel>
</Label>
</Viewbox>
<Viewbox Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Top">
<Label FontSize="16" Foreground="{StaticResource ForegroundBrush}" Padding="0, 4, 0, 4" Margin="0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="The home of " />
<TextBlock x:Name="ModlistAmountTextBlock" Foreground="{StaticResource PrimaryBrush}" />
<TextBlock Text=" ready-made modlists spanning " />
<TextBlock x:Name="GameAmountTextBlock" Foreground="{StaticResource PrimaryBrush}" />
<TextBlock Text=" games." />
</StackPanel>
</Label>
</Viewbox>
<Grid Grid.Row="3" Grid.RowSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="581*" />
<ColumnDefinition Width="20*" />
<ColumnDefinition Width="581*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="81*" />
<RowDefinition Height="14*" />
<RowDefinition Height="81*" />
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="0" BorderBrush="{StaticResource PrimaryVariantBrush}" CornerRadius="8" BorderThickness="16">
<Grid Grid.Row="0" Grid.Column="0" Background="{StaticResource PrimaryVariantBrush}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock
Grid.Column="0"
Grid.Row="0"
Text="Find a modlist that suits your playstyle"
FontWeight="DemiBold"
FontSize="28"
/>
<ic:SymbolIcon
Grid.Row="0"
Grid.Column="1"
VerticalAlignment="Top"
Symbol="Search"
IsFilled="True"
FontSize="28"
/>
<TextBlock Grid.Column="0" Grid.Row="1" Grid.RowSpan="2" LineHeight="24" FontSize="14" VerticalAlignment="Bottom">
Go through a series of questions to find a modlist that works for you through <Hyperlink Command="{Binding VisitModlistWizardCommand}"> our<LineBreak />
Wabbakinator quiz</Hyperlink>, or <Hyperlink Command="{Binding BrowseCommand}">navigate the gallery</Hyperlink> yourself and pick something that looks fun.
</TextBlock>
</Grid>
</Border>
<Border Grid.Row="0" Grid.Column="2" BorderBrush="{StaticResource PrimaryVariantBrush}" CornerRadius="8" BorderThickness="16">
<Grid Grid.Row="0" Grid.Column="0" Background="{StaticResource PrimaryVariantBrush}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock
Grid.Column="0"
Grid.Row="0"
Text="Follow the usually short documentation"
FontWeight="DemiBold"
FontSize="28"
/>
<ic:SymbolIcon
Grid.Row="0"
Grid.Column="1"
VerticalAlignment="Top"
Symbol="DocumentOnePageMultiple"
IsFilled="True"
FontSize="28"
/>
<TextBlock Grid.Column="0" Grid.Row="1" Grid.RowSpan="2" LineHeight="24" FontSize="14" VerticalAlignment="Bottom">
Some modlists have steps that you need to take before you install the list, some don't.<LineBreak/>
Check your list's documentation on how to get started.
</TextBlock>
</Grid>
</Border>
<Border Grid.Row="2" Grid.Column="0" BorderBrush="{StaticResource PrimaryVariantBrush}" CornerRadius="8" BorderThickness="16">
<Grid Grid.Row="0" Grid.Column="0" Background="{StaticResource PrimaryVariantBrush}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock
Grid.Column="0"
Grid.Row="0"
Text="Start downloading your chosen list"
FontWeight="DemiBold"
FontSize="28"
/>
<ic:SymbolIcon
Grid.Row="0"
Grid.Column="1"
VerticalAlignment="Top"
Symbol="DrawerArrowDownload"
IsFilled="True"
FontSize="28"
/>
<TextBlock Grid.Column="0" Grid.Row="1" Grid.RowSpan="2" LineHeight="24" FontSize="14" VerticalAlignment="Bottom">
Pick a destination with enough free space and click the "Start download" button. You might<LineBreak/>
have to log into Nexus first, but rest assured it will just work™.
</TextBlock>
</Grid>
</Border>
<Border Grid.Row="2" Grid.Column="2" BorderBrush="{StaticResource PrimaryVariantBrush}" CornerRadius="8" BorderThickness="16">
<Grid Grid.Row="0" Grid.Column="0" Background="{StaticResource PrimaryVariantBrush}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock
Grid.Column="0"
Grid.Row="0"
Text="Ready to start playing!"
FontWeight="DemiBold"
FontSize="28"
/>
<ic:SymbolIcon
Grid.Row="0"
Grid.Column="1"
VerticalAlignment="Top"
Symbol="PlayCircle"
IsFilled="True"
FontSize="28"
/>
<TextBlock Grid.Column="0" Grid.Row="1" Grid.RowSpan="2" LineHeight="24" FontSize="14" VerticalAlignment="Bottom">
If your install completed successfully and you're done with the documentation as well, you're<LineBreak/>
now ready to launch the modlist and play!
</TextBlock>
</Grid>
</Border>
</Grid>
</Grid>
<Grid Grid.Row="1" Margin="5,15">
<Grid.ColumnDefinitions>
@ -64,14 +212,14 @@
<Viewbox Grid.Row="1">
<Grid>
<Grid>
<icon:PackIconFontAwesome
<ic:SymbolIcon
Width="140"
Height="140"
Margin="0,0,0,10"
HorizontalAlignment="Center"
ClipToBounds="False"
Foreground="{StaticResource PrimaryVariantBrush}"
Kind="CloudDownloadAltSolid"
Symbol="ClockArrowDownload"
Opacity="0.6" />
<Grid.Style>
<Style TargetType="Grid">

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reactive.Disposables;
using System.Reactive.Linq;
@ -37,6 +38,14 @@ namespace Wabbajack
this.WhenAny(x => x.ViewModel.CompileCommand)
.BindToStrict(this, x => x.CompileButton.Command)
.DisposeWith(dispose);
this.WhenAnyValue(x => x.ViewModel.Modlists)
.Select(x => x?.Length.ToString() ?? "0")
.BindToStrict(this, x => x.ModlistAmountTextBlock.Text)
.DisposeWith(dispose);
this.WhenAnyValue(x => x.ViewModel.Modlists)
.Select(x => x?.GroupBy(y => y.Game).Count().ToString() ?? "0")
.BindToStrict(this, x => x.GameAmountTextBlock.Text)
.DisposeWith(dispose);
});
}
}

View File

@ -33,7 +33,7 @@
</Grid.ColumnDefinitions>
<TextBlock Grid.ColumnSpan="3"
Margin="5,0"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="20"
FontWeight="Bold"
Text="File Uploader" />

View File

@ -34,7 +34,7 @@
</Grid.Resources>
<TextBlock
Margin="5,0"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="20"
FontWeight="Bold"
Text="Logins" />

View File

@ -34,7 +34,7 @@
<TextBlock
Grid.Column="0"
Grid.ColumnSpan="2"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="20"
FontWeight="Bold"
Text="Misc Settings" />

View File

@ -40,7 +40,7 @@
<TextBlock
Grid.Column="0"
Grid.ColumnSpan="3"
FontFamily="{StaticResource AtkinsonHyperlegible}"
FontFamily="{StaticResource PrimaryFont}"
FontSize="20"
FontWeight="Bold"
Text="Performance" />

View File

@ -13,7 +13,7 @@
mc:Ignorable="d">
<UserControl.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="{StaticResource AtkinsonHyperlegible}" />
<Setter Property="FontFamily" Value="{StaticResource PrimaryFont}" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="FontSize" Value="12" />
</Style>

View File

@ -53,10 +53,11 @@
<None Remove="Readme.md" />
<None Remove="Resources\Fonts\Atkinson-Hyperlegible-Italic-102.ttf" />
<None Remove="Resources\Fonts\Atkinson-Hyperlegible-Regular-102.ttf" />
<None Remove="Resources\Fonts\AtkinsonHyperlegible-Bold.ttf" />
<None Remove="Resources\Fonts\AtkinsonHyperlegible-BoldItalic.ttf" />
<None Remove="Resources\Fonts\AtkinsonHyperlegible-Italic.ttf" />
<None Remove="Resources\Fonts\AtkinsonHyperlegible-Regular.ttf" />
<None Remove="Resources\Fonts\Gabarito-VariableFont_wght-BF651cdf1f55e6c.ttf" />
<None Remove="Resources\Fonts\PrimaryFont-Bold.ttf" />
<None Remove="Resources\Fonts\PrimaryFont-BoldItalic.ttf" />
<None Remove="Resources\Fonts\PrimaryFont-Italic.ttf" />
<None Remove="Resources\Fonts\PrimaryFont-Regular.ttf" />
<None Remove="Resources\GameGridIcons\Fallout4.png" />
<None Remove="Resources\GameGridIcons\SkyrimSpecialEdition.png" />
<None Remove="Resources\Icons\middle_mouse_button.png" />
@ -85,6 +86,7 @@
<NoWarn>NU1701</NoWarn>
</PackageReference>
<PackageReference Include="Fizzler.Systems.HtmlAgilityPack" Version="1.2.1" />
<PackageReference Include="FluentIcons.WPF" Version="1.1.223" />
<PackageReference Include="Fody" Version="6.8.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
@ -117,16 +119,7 @@
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\Fonts\AtkinsonHyperlegible-Bold.ttf">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Resource>
<Resource Include="Resources\Fonts\AtkinsonHyperlegible-BoldItalic.ttf">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Resource>
<Resource Include="Resources\Fonts\AtkinsonHyperlegible-Italic.ttf">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Resource>
<Resource Include="Resources\Fonts\AtkinsonHyperlegible-Regular.ttf">
<Resource Include="Resources\Fonts\Gabarito-VariableFont_wght-BF651cdf1f55e6c.ttf">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Resource>
<Resource Include="Resources\middle_mouse_button.png" />