From f57abbb64a5001f783b81ce3cc6dcc8505bcf032 Mon Sep 17 00:00:00 2001 From: "waffle.lord" Date: Wed, 22 Dec 2021 23:15:14 -0500 Subject: [PATCH] updating avalonia, WIP patch generator --- .../Patcher/PatchClient/PatchClient.csproj | 8 +- .../PatchClient/Views/MainWindow.axaml | 3 +- .../_port/Patcher/PatchGenerator/App.axaml | 16 ++++ .../PatchGenerator/Assets/Styles.axaml | 71 ++++++++++++++++++ .../CustomControls/TitleBar.axaml | 44 +++++++++++ .../CustomControls/TitleBar.axaml.cs | 67 +++++++++++++++++ .../PatchGenerator/Models/ViewNavigator.cs | 14 ++++ .../PatchGenerator/PatchGenerator.csproj | 18 +++-- .../References/Aki.ByteBanger.dll | Bin 10240 -> 0 bytes .../ComponentAce.Compression.Libs.zlib.dll | Bin 55296 -> 0 bytes .../ViewModels/MainWindowViewModel.cs | 24 +++++- .../ViewModels/OptionsViewModel.cs | 12 +++ .../ViewModels/PatchGenerationViewModel.cs | 12 +++ .../PatchGenerator/Views/MainWindow.axaml | 24 +++++- .../PatchGenerator/Views/OptionsView.axaml | 10 +++ .../PatchGenerator/Views/OptionsView.axaml.cs | 19 +++++ .../Views/PatchGenerationView.axaml | 8 ++ .../Views/PatchGenerationView.axaml.cs | 19 +++++ 18 files changed, 353 insertions(+), 16 deletions(-) create mode 100644 Patcher/_port/Patcher/PatchGenerator/Assets/Styles.axaml create mode 100644 Patcher/_port/Patcher/PatchGenerator/CustomControls/TitleBar.axaml create mode 100644 Patcher/_port/Patcher/PatchGenerator/CustomControls/TitleBar.axaml.cs create mode 100644 Patcher/_port/Patcher/PatchGenerator/Models/ViewNavigator.cs delete mode 100644 Patcher/_port/Patcher/PatchGenerator/References/Aki.ByteBanger.dll delete mode 100644 Patcher/_port/Patcher/PatchGenerator/References/ComponentAce.Compression.Libs.zlib.dll create mode 100644 Patcher/_port/Patcher/PatchGenerator/ViewModels/OptionsViewModel.cs create mode 100644 Patcher/_port/Patcher/PatchGenerator/ViewModels/PatchGenerationViewModel.cs create mode 100644 Patcher/_port/Patcher/PatchGenerator/Views/OptionsView.axaml create mode 100644 Patcher/_port/Patcher/PatchGenerator/Views/OptionsView.axaml.cs create mode 100644 Patcher/_port/Patcher/PatchGenerator/Views/PatchGenerationView.axaml create mode 100644 Patcher/_port/Patcher/PatchGenerator/Views/PatchGenerationView.axaml.cs diff --git a/Patcher/_port/Patcher/PatchClient/PatchClient.csproj b/Patcher/_port/Patcher/PatchClient/PatchClient.csproj index c846b55..183610d 100644 --- a/Patcher/_port/Patcher/PatchClient/PatchClient.csproj +++ b/Patcher/_port/Patcher/PatchClient/PatchClient.csproj @@ -19,11 +19,11 @@ - - + + - - + + diff --git a/Patcher/_port/Patcher/PatchClient/Views/MainWindow.axaml b/Patcher/_port/Patcher/PatchClient/Views/MainWindow.axaml index a9720f9..2c3cde2 100644 --- a/Patcher/_port/Patcher/PatchClient/Views/MainWindow.axaml +++ b/Patcher/_port/Patcher/PatchClient/Views/MainWindow.axaml @@ -3,7 +3,7 @@ xmlns:vm="using:PatchClient.ViewModels" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:cc="using:PatchClient.CustomControls" + xmlns:cc="using:PatchClient.CustomControls" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="PatchClient.Views.MainWindow" Icon="/Assets/avalonia-logo.ico" @@ -32,5 +32,6 @@ + diff --git a/Patcher/_port/Patcher/PatchGenerator/App.axaml b/Patcher/_port/Patcher/PatchGenerator/App.axaml index e1327a6..75ef4ad 100644 --- a/Patcher/_port/Patcher/PatchGenerator/App.axaml +++ b/Patcher/_port/Patcher/PatchGenerator/App.axaml @@ -9,4 +9,20 @@ + + + + #121212 + #FFC107 + #FFFFFF + #282828 + #323947 + + + + + + + + diff --git a/Patcher/_port/Patcher/PatchGenerator/Assets/Styles.axaml b/Patcher/_port/Patcher/PatchGenerator/Assets/Styles.axaml new file mode 100644 index 0000000..41b1c96 --- /dev/null +++ b/Patcher/_port/Patcher/PatchGenerator/Assets/Styles.axaml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Patcher/_port/Patcher/PatchGenerator/CustomControls/TitleBar.axaml b/Patcher/_port/Patcher/PatchGenerator/CustomControls/TitleBar.axaml new file mode 100644 index 0000000..c131dc6 --- /dev/null +++ b/Patcher/_port/Patcher/PatchGenerator/CustomControls/TitleBar.axaml @@ -0,0 +1,44 @@ + + + + + + + diff --git a/Patcher/_port/Patcher/PatchGenerator/CustomControls/TitleBar.axaml.cs b/Patcher/_port/Patcher/PatchGenerator/CustomControls/TitleBar.axaml.cs new file mode 100644 index 0000000..b8a3df0 --- /dev/null +++ b/Patcher/_port/Patcher/PatchGenerator/CustomControls/TitleBar.axaml.cs @@ -0,0 +1,67 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using Avalonia.Media; +using System.Windows.Input; + +namespace PatchGenerator.CustomControls +{ + public partial class TitleBar : UserControl + { + public TitleBar() + { + InitializeComponent(); + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } + + public static readonly StyledProperty TitleProperty = + AvaloniaProperty.Register(nameof(Title)); + + public string Title + { + get => GetValue(TitleProperty); + set => SetValue(TitleProperty, value); + } + + public static readonly StyledProperty XButtonForegroundProperty = + AvaloniaProperty.Register(nameof(XButtonForeground)); + + public IBrush XButtonForeground + { + get => GetValue(XButtonForegroundProperty); + set => SetValue(XButtonForegroundProperty, value); + } + + public static new readonly StyledProperty ForegroundProperty = + AvaloniaProperty.Register(nameof(Foreground)); + + public new IBrush Foreground + { + get => GetValue(ForegroundProperty); + set => SetValue(ForegroundProperty, value); + } + + public static new readonly StyledProperty BackgroundProperty = + AvaloniaProperty.Register(nameof(Background)); + + public new IBrush Background + { + get => GetValue(BackgroundProperty); + set => SetValue(BackgroundProperty, value); + } + + //Close Button Command (X Button) Property + public static readonly StyledProperty XButtonCommandProperty = + AvaloniaProperty.Register(nameof(XButtonCommand)); + + public ICommand XButtonCommand + { + get => GetValue(XButtonCommandProperty); + set => SetValue(XButtonCommandProperty, value); + } + } +} diff --git a/Patcher/_port/Patcher/PatchGenerator/Models/ViewNavigator.cs b/Patcher/_port/Patcher/PatchGenerator/Models/ViewNavigator.cs new file mode 100644 index 0000000..9886f0b --- /dev/null +++ b/Patcher/_port/Patcher/PatchGenerator/Models/ViewNavigator.cs @@ -0,0 +1,14 @@ +using ReactiveUI; + +namespace PatchGenerator.Models +{ + public class ViewNavigator : ReactiveObject + { + private object _SelectedViewModel; + public object SelectedViewModel + { + get => _SelectedViewModel; + set => this.RaiseAndSetIfChanged(ref _SelectedViewModel, value); + } + } +} diff --git a/Patcher/_port/Patcher/PatchGenerator/PatchGenerator.csproj b/Patcher/_port/Patcher/PatchGenerator/PatchGenerator.csproj index 1a06c10..e35d971 100644 --- a/Patcher/_port/Patcher/PatchGenerator/PatchGenerator.csproj +++ b/Patcher/_port/Patcher/PatchGenerator/PatchGenerator.csproj @@ -16,15 +16,23 @@ - + - - + + - - + + + + + + %(Filename) + + + + diff --git a/Patcher/_port/Patcher/PatchGenerator/References/Aki.ByteBanger.dll b/Patcher/_port/Patcher/PatchGenerator/References/Aki.ByteBanger.dll deleted file mode 100644 index b9fd68106ac22d9de3793389effb56c0bf0991cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10240 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 diff --git a/Patcher/_port/Patcher/PatchGenerator/References/ComponentAce.Compression.Libs.zlib.dll b/Patcher/_port/Patcher/PatchGenerator/References/ComponentAce.Compression.Libs.zlib.dll deleted file mode 100644 index 52b6775fc2c673ad795a6d699962b54601c0c01a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55296 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 X8@+kwZD3%7`NMkug8zg6LJRx}&_{ks diff --git a/Patcher/_port/Patcher/PatchGenerator/ViewModels/MainWindowViewModel.cs b/Patcher/_port/Patcher/PatchGenerator/ViewModels/MainWindowViewModel.cs index f3e6bf1..5c66bae 100644 --- a/Patcher/_port/Patcher/PatchGenerator/ViewModels/MainWindowViewModel.cs +++ b/Patcher/_port/Patcher/PatchGenerator/ViewModels/MainWindowViewModel.cs @@ -1,11 +1,27 @@ -using System; -using System.Collections.Generic; -using System.Text; +using Avalonia; +using PatchGenerator.Models; +using ReactiveUI; +using Splat; +using System.Windows.Input; namespace PatchGenerator.ViewModels { public class MainWindowViewModel : ViewModelBase { - public string Greeting => "Welcome to Avalonia!"; + public ICommand CloseCommand => ReactiveCommand.Create(() => + { + if (Application.Current.ApplicationLifetime is Avalonia.Controls.ApplicationLifetimes.IClassicDesktopStyleApplicationLifetime desktopApp) + { + desktopApp.MainWindow.Close(); + } + }); + + public ViewNavigator navigator { get; set; } = new ViewNavigator(); + public MainWindowViewModel() + { + navigator.SelectedViewModel = new OptionsViewModel(); + + Locator.CurrentMutable.RegisterConstant(navigator, typeof(ViewNavigator)); + } } } diff --git a/Patcher/_port/Patcher/PatchGenerator/ViewModels/OptionsViewModel.cs b/Patcher/_port/Patcher/PatchGenerator/ViewModels/OptionsViewModel.cs new file mode 100644 index 0000000..7d11f9f --- /dev/null +++ b/Patcher/_port/Patcher/PatchGenerator/ViewModels/OptionsViewModel.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PatchGenerator.ViewModels +{ + public class OptionsViewModel : ViewModelBase + { + } +} diff --git a/Patcher/_port/Patcher/PatchGenerator/ViewModels/PatchGenerationViewModel.cs b/Patcher/_port/Patcher/PatchGenerator/ViewModels/PatchGenerationViewModel.cs new file mode 100644 index 0000000..7747290 --- /dev/null +++ b/Patcher/_port/Patcher/PatchGenerator/ViewModels/PatchGenerationViewModel.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PatchGenerator.ViewModels +{ + public class PatchGenerationViewModel : ViewModelBase + { + } +} diff --git a/Patcher/_port/Patcher/PatchGenerator/Views/MainWindow.axaml b/Patcher/_port/Patcher/PatchGenerator/Views/MainWindow.axaml index fe99cf0..4e9c849 100644 --- a/Patcher/_port/Patcher/PatchGenerator/Views/MainWindow.axaml +++ b/Patcher/_port/Patcher/PatchGenerator/Views/MainWindow.axaml @@ -3,15 +3,35 @@ xmlns:vm="using:PatchGenerator.ViewModels" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:cc="using:PatchGenerator.CustomControls" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="PatchGenerator.Views.MainWindow" Icon="/Assets/avalonia-logo.ico" - Title="PatchGenerator"> + Title="PatchGenerator" + Height="400" Width="800" + WindowStartupLocation="CenterScreen" + ExtendClientAreaToDecorationsHint="True" + ExtendClientAreaChromeHints="NoChrome" + ExtendClientAreaTitleBarHeightHint="-1" + Background="{StaticResource AKI_Background_Light}" + > + + + - + + + + + + + + + diff --git a/Patcher/_port/Patcher/PatchGenerator/Views/OptionsView.axaml b/Patcher/_port/Patcher/PatchGenerator/Views/OptionsView.axaml new file mode 100644 index 0000000..de7c1ff --- /dev/null +++ b/Patcher/_port/Patcher/PatchGenerator/Views/OptionsView.axaml @@ -0,0 +1,10 @@ + + + + + diff --git a/Patcher/_port/Patcher/PatchGenerator/Views/OptionsView.axaml.cs b/Patcher/_port/Patcher/PatchGenerator/Views/OptionsView.axaml.cs new file mode 100644 index 0000000..44033b0 --- /dev/null +++ b/Patcher/_port/Patcher/PatchGenerator/Views/OptionsView.axaml.cs @@ -0,0 +1,19 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace PatchGenerator.Views +{ + public partial class OptionsView : UserControl + { + public OptionsView() + { + InitializeComponent(); + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } + } +} diff --git a/Patcher/_port/Patcher/PatchGenerator/Views/PatchGenerationView.axaml b/Patcher/_port/Patcher/PatchGenerator/Views/PatchGenerationView.axaml new file mode 100644 index 0000000..118acd2 --- /dev/null +++ b/Patcher/_port/Patcher/PatchGenerator/Views/PatchGenerationView.axaml @@ -0,0 +1,8 @@ + + Welcome to Avalonia! + diff --git a/Patcher/_port/Patcher/PatchGenerator/Views/PatchGenerationView.axaml.cs b/Patcher/_port/Patcher/PatchGenerator/Views/PatchGenerationView.axaml.cs new file mode 100644 index 0000000..4822239 --- /dev/null +++ b/Patcher/_port/Patcher/PatchGenerator/Views/PatchGenerationView.axaml.cs @@ -0,0 +1,19 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace PatchGenerator.Views +{ + public partial class PatchGenerationView : UserControl + { + public PatchGenerationView() + { + InitializeComponent(); + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } + } +}