From cb90f665f69a1e067df5446bc953e37c4ff7b8f7 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed, 18 Dec 2024 15:12:36 +0100 Subject: [PATCH] Implement settings and add icon --- InvLock/Assets/logo.ico | Bin 0 -> 265118 bytes InvLock/DataContexts/MainWindowDataContext.cs | 12 ++- InvLock/InvLock.csproj | 9 +++ InvLock/LockWindow.xaml.cs | 14 ++-- InvLock/MainWindow.xaml | 17 +++-- InvLock/MainWindow.xaml.cs | 7 +- InvLock/Settings.cs | 71 ++++++++++++++++-- 7 files changed, 109 insertions(+), 21 deletions(-) create mode 100644 InvLock/Assets/logo.ico diff --git a/InvLock/Assets/logo.ico b/InvLock/Assets/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..1ae5705ef918d61d2624d6be3a1f94bd20bb3eff GIT binary patch literal 265118 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 literal 0 HcmV?d00001 diff --git a/InvLock/DataContexts/MainWindowDataContext.cs b/InvLock/DataContexts/MainWindowDataContext.cs index a23cc3d..65e5860 100644 --- a/InvLock/DataContexts/MainWindowDataContext.cs +++ b/InvLock/DataContexts/MainWindowDataContext.cs @@ -1,16 +1,22 @@ -using System.Reflection; +using System.ComponentModel; +using System.Reflection; namespace InvLock.DataContexts; -internal class MainWindowDataContext +internal class MainWindowDataContext : INotifyPropertyChanged { #if DEBUG public string Title => $"{App.AppName} - Dev {AppVersion}"; #else - public string Title => $"{App.AppName} - {AppVersion}"; + + public event PropertyChangedEventHandler? PropertyChanged; + + public string Title => $"{App.AppName} - {AppVersion}"; #endif public string AppName => App.AppName; public string AppVersion => Assembly.GetExecutingAssembly().GetName().Version?.ToString() ?? "Unknown"; + + public Settings Settings { get; } = Settings.Load(); } \ No newline at end of file diff --git a/InvLock/InvLock.csproj b/InvLock/InvLock.csproj index e303716..f523019 100644 --- a/InvLock/InvLock.csproj +++ b/InvLock/InvLock.csproj @@ -7,13 +7,22 @@ enable true true + Assets\logo.ico + + + + + + + + diff --git a/InvLock/LockWindow.xaml.cs b/InvLock/LockWindow.xaml.cs index ab76645..ce1ea40 100644 --- a/InvLock/LockWindow.xaml.cs +++ b/InvLock/LockWindow.xaml.cs @@ -15,14 +15,14 @@ namespace InvLock; /// public partial class LockWindow : Window { - private const bool HideWindows = false; private readonly SimpleGlobalHook hook = new SimpleGlobalHook(); private readonly Dictionary pressedKeys = []; + private readonly Settings settings; private List windows = []; private bool isOpen = true; private bool suppressInput = false; - public LockWindow() + public LockWindow(Settings settings) { InitializeComponent(); @@ -42,6 +42,8 @@ public partial class LockWindow : Window Owner = w; + this.settings = settings; + hook.MouseMoved += Hook_Mouse; hook.MouseDragged += Hook_Mouse; hook.MousePressed += Hook_Mouse; @@ -59,7 +61,7 @@ public partial class LockWindow : Window private void ActivateLockScreen() { - if (HideWindows) + if (settings.HideWindows) { MinimizeWindows(); } @@ -71,7 +73,7 @@ public partial class LockWindow : Window { _ = Activate(); - textBlock.Text = "Lock Screen Active"; + textBlock.Text = settings.LockText; textBlock.Stroke = (Brush)FindResource("PaletteRedBrush"); Animation(); @@ -120,7 +122,7 @@ public partial class LockWindow : Window { if (e.Reason == Microsoft.Win32.SessionSwitchReason.SessionUnlock) { - if (HideWindows) + if (settings.HideWindows) { RestoreWindows(); } @@ -131,7 +133,7 @@ public partial class LockWindow : Window await Task.Delay(500); - textBlock.Text = "Lock Screen Inactive"; + textBlock.Text = settings.UnlockText; textBlock.Stroke = (Brush)FindResource("PaletteGreenBrush"); Animation(); diff --git a/InvLock/MainWindow.xaml b/InvLock/MainWindow.xaml index 0a978fb..e2b90ba 100644 --- a/InvLock/MainWindow.xaml +++ b/InvLock/MainWindow.xaml @@ -31,15 +31,22 @@ - + + + + + - + + + + @@ -80,21 +87,21 @@ - + - + - + diff --git a/InvLock/MainWindow.xaml.cs b/InvLock/MainWindow.xaml.cs index 856c523..4bc68f3 100644 --- a/InvLock/MainWindow.xaml.cs +++ b/InvLock/MainWindow.xaml.cs @@ -12,12 +12,13 @@ namespace InvLock; /// public partial class MainWindow : FluentWindow { + private readonly MainWindowDataContext mainWindowDataContext = new MainWindowDataContext(); private LockWindow? lockWindow; private bool blockWindowClosing = true; public MainWindow() { - DataContext = new MainWindowDataContext(); + DataContext = mainWindowDataContext; InitializeComponent(); @@ -51,7 +52,7 @@ public partial class MainWindow : FluentWindow { Close(); - lockWindow = new LockWindow(); + lockWindow = new LockWindow(mainWindowDataContext.Settings); lockWindow.Show(); } @@ -62,6 +63,8 @@ public partial class MainWindow : FluentWindow private void FluentWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + mainWindowDataContext.Settings.Save(); + if (blockWindowClosing) { e.Cancel = true; diff --git a/InvLock/Settings.cs b/InvLock/Settings.cs index c0ef541..33a03ee 100644 --- a/InvLock/Settings.cs +++ b/InvLock/Settings.cs @@ -1,8 +1,69 @@ -namespace InvLock; +using System.ComponentModel; +using System.IO; +using System.Runtime.CompilerServices; +using System.Text.Json; -internal class Settings +namespace InvLock; + +public class Settings : INotifyPropertyChanged { - public bool HideWindows { get; set; } = false; - public string LockText { get; set; } = "Lock Screen Active"; - public string UnlockText { get; set; } = "Lock Screen Inactive"; + public event PropertyChangedEventHandler? PropertyChanged; + + private static readonly string settingsPath = Path.Combine(App.ApplicationDataPath, "settings.json"); + private bool hideWindows = false; + private string lockText = "Lock Screen Active"; + + private string unlockText = "Lock Screen Inactive"; + + public bool HideWindows + { + get => hideWindows; + set + { + hideWindows = value; + OnPropertyChanged(); + } + } + + public string LockText + { + get => lockText; + set + { + lockText = value; + OnPropertyChanged(); + } + } + + public string UnlockText + { + get => unlockText; + set + { + unlockText = value; + OnPropertyChanged(); + } + } + + public static Settings Load() + { + if (File.Exists(settingsPath)) + { + string json = File.ReadAllText(settingsPath); + return JsonSerializer.Deserialize(json) ?? new Settings(); + } + + return new Settings(); + } + + public void Save() + { + string json = JsonSerializer.Serialize(this); + File.WriteAllText(settingsPath, json); + } + + protected void OnPropertyChanged([CallerMemberName] string? name = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); + } } \ No newline at end of file