From 239c47c06e42a17c0180c2fbc51dcf632822852d Mon Sep 17 00:00:00 2001 From: Alexey Golub Date: Mon, 5 Oct 2020 17:10:00 +0300 Subject: [PATCH] [GUI] Clean up theme management --- DiscordChatExporter.Gui/App.xaml | 2 + DiscordChatExporter.Gui/App.xaml.cs | 29 +++++++++++++ DiscordChatExporter.Gui/Bootstrapper.cs | 8 ++++ .../Internal/MediaColor.cs | 9 ++++ DiscordChatExporter.Gui/Theme.cs | 42 ------------------- .../ViewModels/RootViewModel.cs | 11 ++++- .../Views/Dialogs/SettingsView.xaml.cs | 17 +++----- 7 files changed, 62 insertions(+), 56 deletions(-) create mode 100644 DiscordChatExporter.Gui/Internal/MediaColor.cs delete mode 100644 DiscordChatExporter.Gui/Theme.cs diff --git a/DiscordChatExporter.Gui/App.xaml b/DiscordChatExporter.Gui/App.xaml index 7d44e5f..d4eef8d 100644 --- a/DiscordChatExporter.Gui/App.xaml +++ b/DiscordChatExporter.Gui/App.xaml @@ -14,10 +14,12 @@ + + diff --git a/DiscordChatExporter.Gui/App.xaml.cs b/DiscordChatExporter.Gui/App.xaml.cs index a0ba95a..2420703 100644 --- a/DiscordChatExporter.Gui/App.xaml.cs +++ b/DiscordChatExporter.Gui/App.xaml.cs @@ -1,5 +1,7 @@ using System; using System.Reflection; +using DiscordChatExporter.Gui.Internal; +using MaterialDesignThemes.Wpf; namespace DiscordChatExporter.Gui { @@ -13,4 +15,31 @@ namespace DiscordChatExporter.Gui public static string VersionString => Version.ToString(3); } + + public partial class App + { + private static Theme LightTheme { get; } = Theme.Create( + new MaterialDesignLightTheme(), + MediaColor.FromHex("#343838"), + MediaColor.FromHex("#F9A825") + ); + + private static Theme DarkTheme { get; } = Theme.Create( + new MaterialDesignDarkTheme(), + MediaColor.FromHex("#E8E8E8"), + MediaColor.FromHex("#F9A825") + ); + + public static void SetLightTheme() + { + var paletteHelper = new PaletteHelper(); + paletteHelper.SetTheme(LightTheme); + } + + public static void SetDarkTheme() + { + var paletteHelper = new PaletteHelper(); + paletteHelper.SetTheme(DarkTheme); + } + } } \ No newline at end of file diff --git a/DiscordChatExporter.Gui/Bootstrapper.cs b/DiscordChatExporter.Gui/Bootstrapper.cs index 2691ec6..a6f0460 100644 --- a/DiscordChatExporter.Gui/Bootstrapper.cs +++ b/DiscordChatExporter.Gui/Bootstrapper.cs @@ -13,6 +13,14 @@ namespace DiscordChatExporter.Gui { public class Bootstrapper : Bootstrapper { + protected override void OnStart() + { + base.OnStart(); + + // Light theme is the default + App.SetLightTheme(); + } + protected override void ConfigureIoC(IStyletIoCBuilder builder) { base.ConfigureIoC(builder); diff --git a/DiscordChatExporter.Gui/Internal/MediaColor.cs b/DiscordChatExporter.Gui/Internal/MediaColor.cs new file mode 100644 index 0000000..8971696 --- /dev/null +++ b/DiscordChatExporter.Gui/Internal/MediaColor.cs @@ -0,0 +1,9 @@ +using System.Windows.Media; + +namespace DiscordChatExporter.Gui.Internal +{ + internal static class MediaColor + { + public static Color FromHex(string hex) => (Color) ColorConverter.ConvertFromString(hex); + } +} \ No newline at end of file diff --git a/DiscordChatExporter.Gui/Theme.cs b/DiscordChatExporter.Gui/Theme.cs deleted file mode 100644 index df80ada..0000000 --- a/DiscordChatExporter.Gui/Theme.cs +++ /dev/null @@ -1,42 +0,0 @@ -using MaterialDesignThemes.Wpf; -using System.Windows.Media; - -namespace DiscordChatExporter.Gui -{ - public sealed class Theme - { - public static Theme Light { get; } = new Theme(new MaterialDesignLightTheme(), HexToColor.Convert("#343838"), HexToColor.Convert("#F9A825")); - public static Theme Dark { get; } = new Theme(new MaterialDesignDarkTheme(), HexToColor.Convert("#E8E8E8"), HexToColor.Convert("#F9A825")); - - public static void SetCurrent(Theme theme) - { - var paletteHelper = new PaletteHelper(); - - var materialTheme = paletteHelper.GetTheme(); - materialTheme.SetBaseTheme(theme.BaseTheme); - materialTheme.SetPrimaryColor(theme.PrimaryColor); - materialTheme.SetSecondaryColor(theme.SecondaryColor); - - paletteHelper.SetTheme(materialTheme); - } - - public Theme(IBaseTheme baseTheme, Color primaryColor, Color secondaryColor) - { - BaseTheme = baseTheme; - PrimaryColor = primaryColor; - SecondaryColor = secondaryColor; - } - - public IBaseTheme BaseTheme { get; } - public Color PrimaryColor { get; } - public Color SecondaryColor { get; } - - class HexToColor - { - public static Color Convert(string hex) - { - return (Color)ColorConverter.ConvertFromString(hex); - } - } - } -} diff --git a/DiscordChatExporter.Gui/ViewModels/RootViewModel.cs b/DiscordChatExporter.Gui/ViewModels/RootViewModel.cs index 8038048..4a1d238 100644 --- a/DiscordChatExporter.Gui/ViewModels/RootViewModel.cs +++ b/DiscordChatExporter.Gui/ViewModels/RootViewModel.cs @@ -107,8 +107,15 @@ namespace DiscordChatExporter.Gui.ViewModels IsBotToken = _settingsService.LastToken.Type == AuthTokenType.Bot; TokenValue = _settingsService.LastToken.Value; } - - Theme.SetCurrent(_settingsService.IsDarkThemeEnabled ? Theme.Dark : Theme.Light); + + if (_settingsService.IsDarkThemeEnabled) + { + App.SetDarkTheme(); + } + else + { + App.SetLightTheme(); + } await HandleAutoUpdateAsync(); } diff --git a/DiscordChatExporter.Gui/Views/Dialogs/SettingsView.xaml.cs b/DiscordChatExporter.Gui/Views/Dialogs/SettingsView.xaml.cs index b5d7081..5cee244 100644 --- a/DiscordChatExporter.Gui/Views/Dialogs/SettingsView.xaml.cs +++ b/DiscordChatExporter.Gui/Views/Dialogs/SettingsView.xaml.cs @@ -1,6 +1,4 @@ -using MaterialDesignThemes; -using MaterialDesignThemes.Wpf; -using System.Windows.Media.Media3D; +using System.Windows; namespace DiscordChatExporter.Gui.Views.Dialogs { @@ -11,19 +9,14 @@ namespace DiscordChatExporter.Gui.Views.Dialogs InitializeComponent(); } - private void ToggleButton_Checked(object sender, System.Windows.RoutedEventArgs e) + private void ToggleButton_Checked(object sender, RoutedEventArgs e) { - setBaseTheme(Theme.Dark); + App.SetDarkTheme(); } - private void ToggleButton_Unchecked(object sender, System.Windows.RoutedEventArgs e) + private void ToggleButton_Unchecked(object sender, RoutedEventArgs e) { - setBaseTheme(Theme.Light); - } - - private void setBaseTheme(Theme theme) - { - Theme.SetCurrent(theme); + App.SetLightTheme(); } } } \ No newline at end of file