From f7d634642cbad6a4472516197916e47b9771bf99 Mon Sep 17 00:00:00 2001 From: Michael Nadeau Date: Thu, 8 Aug 2024 13:02:21 -0400 Subject: [PATCH 01/10] WIP --- .../Converters/NegativeValueConverter.cs | 28 ++ .../PowerLauncher/Converters/SumConverter.cs | 41 ++ .../launcher/PowerLauncher/ResultList.xaml | 373 ++++++++++-------- .../launcher/PowerLauncher/SettingsReader.cs | 7 +- .../ViewModel/ResultViewModel.cs | 4 +- .../ViewModel/ResultsViewModel.cs | 2 + .../UserSettings/PowerToysRunSettings.cs | 2 + .../PowerLauncherProperties.cs | 4 + 8 files changed, 294 insertions(+), 167 deletions(-) create mode 100644 src/modules/launcher/PowerLauncher/Converters/NegativeValueConverter.cs create mode 100644 src/modules/launcher/PowerLauncher/Converters/SumConverter.cs diff --git a/src/modules/launcher/PowerLauncher/Converters/NegativeValueConverter.cs b/src/modules/launcher/PowerLauncher/Converters/NegativeValueConverter.cs new file mode 100644 index 00000000000..9e03d627002 --- /dev/null +++ b/src/modules/launcher/PowerLauncher/Converters/NegativeValueConverter.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Globalization; +using System.Windows.Data; + +namespace PowerLauncher.Converters +{ + public class NegativeValueConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is double doubleValue) + { + return -doubleValue; + } + + return value; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/src/modules/launcher/PowerLauncher/Converters/SumConverter.cs b/src/modules/launcher/PowerLauncher/Converters/SumConverter.cs new file mode 100644 index 00000000000..2dec99a7aa5 --- /dev/null +++ b/src/modules/launcher/PowerLauncher/Converters/SumConverter.cs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Globalization; +using System.Windows.Data; + +namespace PowerLauncher.Converters +{ + public class SumConverter : IMultiValueConverter + { + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + var sum = 0.0d; + + foreach (var value in values) + { + if (value is double number) + { + sum += number; + } + else if (value is string strNumber) + { + sum += double.Parse(strNumber, NumberStyles.Any, CultureInfo.InvariantCulture); + } + else + { + throw new NotImplementedException(); + } + } + + return sum; + } + + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/src/modules/launcher/PowerLauncher/ResultList.xaml b/src/modules/launcher/PowerLauncher/ResultList.xaml index 7eda85a709f..b79475f79e0 100644 --- a/src/modules/launcher/PowerLauncher/ResultList.xaml +++ b/src/modules/launcher/PowerLauncher/ResultList.xaml @@ -8,7 +8,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:p="clr-namespace:PowerLauncher.Properties" xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" - xmlns:viewmodel="clr-namespace:PowerLauncher.ViewModel" + xmlns:viewmodel="clr-namespace:PowerLauncher.ViewModel" xmlns:sys="clr-namespace:System;assembly=mscorlib" d:DesignHeight="300" d:DesignWidth="720" mc:Ignorable="d"> @@ -16,6 +16,8 @@ + + + + + { + OnPropertyChanged(nameof(ShowPreview)); + }); + } }; } @@ -54,6 +63,11 @@ public int MaxHeight } } + public bool ShowPreview + { + get => _settings.ShowPreview; + } + private int _selectedIndex; public int SelectedIndex diff --git a/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs b/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs index 870863ac3c1..6d59f23f700 100644 --- a/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs +++ b/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs @@ -269,7 +269,21 @@ public ShowPluginsOverviewMode ShowPluginsOverview [JsonConverter(typeof(JsonStringEnumConverter))] public LastQueryMode LastQueryMode { get; set; } = LastQueryMode.Selected; - public bool ShowPreview { get; set; } + private bool _showPreview; + + public bool ShowPreview + { + get => _showPreview; + + set + { + if (_showPreview != value) + { + _showPreview = value; + OnPropertyChanged(nameof(ShowPreview)); + } + } + } } public enum LastQueryMode From 99bb5d07b110b407022fbce89e54660218bb1141 Mon Sep 17 00:00:00 2001 From: Michael Nadeau Date: Fri, 9 Aug 2024 06:23:41 -0400 Subject: [PATCH 03/10] Add show preview settings --- .../SettingsXAML/Views/PowerLauncherPage.xaml | 4 ++++ .../Settings.UI/Strings/en-us/Resources.resw | 6 ++++++ .../ViewModels/PowerLauncherViewModel.cs | 17 +++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml index a0b4bca9662..5b6caf508bf 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml @@ -448,6 +448,10 @@ + + + + - -36 - - - - - - + + + + + + -36 + + + + + + From 65f1bb3adac0b04dd755bab46f754ba4a4595a65 Mon Sep 17 00:00:00 2001 From: Michael Nadeau Date: Fri, 9 Aug 2024 08:24:02 -0400 Subject: [PATCH 05/10] Remove image from cache when showPreview changes --- .../PowerLauncher/ViewModel/ResultViewModel.cs | 11 +++++++++++ .../launcher/Wox.Infrastructure/Image/ImageCache.cs | 6 ++++++ .../launcher/Wox.Infrastructure/Image/ImageLoader.cs | 5 +++++ 3 files changed, 22 insertions(+) diff --git a/src/modules/launcher/PowerLauncher/ViewModel/ResultViewModel.cs b/src/modules/launcher/PowerLauncher/ViewModel/ResultViewModel.cs index 893cb893a65..900f0fc8dc6 100644 --- a/src/modules/launcher/PowerLauncher/ViewModel/ResultViewModel.cs +++ b/src/modules/launcher/PowerLauncher/ViewModel/ResultViewModel.cs @@ -80,6 +80,17 @@ public ResultViewModel(Result result, IMainViewModel mainViewModel, PowerToysRun } _settings = settings; + _settings.PropertyChanged += (s, e) => + { + if (e.PropertyName == nameof(_settings.ShowPreview)) + { + if (!string.IsNullOrEmpty(Result.IcoPath)) + { + _imageLoaded = false; + ImageLoader.Unload(Result.IcoPath); + } + } + }; ContextMenuSelectedIndex = NoSelectionIndex; LoadContextMenu(); diff --git a/src/modules/launcher/Wox.Infrastructure/Image/ImageCache.cs b/src/modules/launcher/Wox.Infrastructure/Image/ImageCache.cs index 0415c074d0b..021a093b289 100644 --- a/src/modules/launcher/Wox.Infrastructure/Image/ImageCache.cs +++ b/src/modules/launcher/Wox.Infrastructure/Image/ImageCache.cs @@ -69,6 +69,12 @@ public ImageSource this[string path] } } + public void Remove(string path) + { + Usage.TryRemove(path, out _); + _data.TryRemove(path, out _); + } + public void Cleanup() { var images = Usage diff --git a/src/modules/launcher/Wox.Infrastructure/Image/ImageLoader.cs b/src/modules/launcher/Wox.Infrastructure/Image/ImageLoader.cs index b3f27a94274..5510003ce67 100644 --- a/src/modules/launcher/Wox.Infrastructure/Image/ImageLoader.cs +++ b/src/modules/launcher/Wox.Infrastructure/Image/ImageLoader.cs @@ -258,6 +258,11 @@ private static ImageResult GetThumbnailResult(ref string path, bool generateThum private const bool _enableImageHash = true; + public static void Unload(string path) + { + ImageCache.Remove(path); + } + public static async ValueTask LoadAsync(string path, bool generateThumbnailsFromFiles, bool loadFullImage = false) { var imageResult = await LoadInternalAsync(path, generateThumbnailsFromFiles, loadFullImage); From 10cc00aceef7d1003fdff0d8421d9d074984c3a5 Mon Sep 17 00:00:00 2001 From: Michael Nadeau Date: Thu, 8 Aug 2024 13:02:21 -0400 Subject: [PATCH 06/10] WIP --- .../Converters/NegativeValueConverter.cs | 28 ++ .../PowerLauncher/Converters/SumConverter.cs | 41 ++ .../launcher/PowerLauncher/ResultList.xaml | 373 ++++++++++-------- .../launcher/PowerLauncher/SettingsReader.cs | 7 +- .../ViewModel/ResultViewModel.cs | 4 +- .../ViewModel/ResultsViewModel.cs | 2 + .../UserSettings/PowerToysRunSettings.cs | 2 + .../PowerLauncherProperties.cs | 4 + 8 files changed, 294 insertions(+), 167 deletions(-) create mode 100644 src/modules/launcher/PowerLauncher/Converters/NegativeValueConverter.cs create mode 100644 src/modules/launcher/PowerLauncher/Converters/SumConverter.cs diff --git a/src/modules/launcher/PowerLauncher/Converters/NegativeValueConverter.cs b/src/modules/launcher/PowerLauncher/Converters/NegativeValueConverter.cs new file mode 100644 index 00000000000..9e03d627002 --- /dev/null +++ b/src/modules/launcher/PowerLauncher/Converters/NegativeValueConverter.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Globalization; +using System.Windows.Data; + +namespace PowerLauncher.Converters +{ + public class NegativeValueConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is double doubleValue) + { + return -doubleValue; + } + + return value; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/src/modules/launcher/PowerLauncher/Converters/SumConverter.cs b/src/modules/launcher/PowerLauncher/Converters/SumConverter.cs new file mode 100644 index 00000000000..2dec99a7aa5 --- /dev/null +++ b/src/modules/launcher/PowerLauncher/Converters/SumConverter.cs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Globalization; +using System.Windows.Data; + +namespace PowerLauncher.Converters +{ + public class SumConverter : IMultiValueConverter + { + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + var sum = 0.0d; + + foreach (var value in values) + { + if (value is double number) + { + sum += number; + } + else if (value is string strNumber) + { + sum += double.Parse(strNumber, NumberStyles.Any, CultureInfo.InvariantCulture); + } + else + { + throw new NotImplementedException(); + } + } + + return sum; + } + + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/src/modules/launcher/PowerLauncher/ResultList.xaml b/src/modules/launcher/PowerLauncher/ResultList.xaml index 7eda85a709f..b79475f79e0 100644 --- a/src/modules/launcher/PowerLauncher/ResultList.xaml +++ b/src/modules/launcher/PowerLauncher/ResultList.xaml @@ -8,7 +8,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:p="clr-namespace:PowerLauncher.Properties" xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" - xmlns:viewmodel="clr-namespace:PowerLauncher.ViewModel" + xmlns:viewmodel="clr-namespace:PowerLauncher.ViewModel" xmlns:sys="clr-namespace:System;assembly=mscorlib" d:DesignHeight="300" d:DesignWidth="720" mc:Ignorable="d"> @@ -16,6 +16,8 @@ + + + + + { + OnPropertyChanged(nameof(ShowPreview)); + }); + } }; } @@ -54,6 +63,11 @@ public int MaxHeight } } + public bool ShowPreview + { + get => _settings.ShowPreview; + } + private int _selectedIndex; public int SelectedIndex diff --git a/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs b/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs index 870863ac3c1..6d59f23f700 100644 --- a/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs +++ b/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs @@ -269,7 +269,21 @@ public ShowPluginsOverviewMode ShowPluginsOverview [JsonConverter(typeof(JsonStringEnumConverter))] public LastQueryMode LastQueryMode { get; set; } = LastQueryMode.Selected; - public bool ShowPreview { get; set; } + private bool _showPreview; + + public bool ShowPreview + { + get => _showPreview; + + set + { + if (_showPreview != value) + { + _showPreview = value; + OnPropertyChanged(nameof(ShowPreview)); + } + } + } } public enum LastQueryMode From 78b3077ae039e4d3ab80704c66db4d207474443a Mon Sep 17 00:00:00 2001 From: Michael Nadeau Date: Fri, 9 Aug 2024 06:23:41 -0400 Subject: [PATCH 08/10] Add show preview settings --- .../SettingsXAML/Views/PowerLauncherPage.xaml | 4 ++++ .../Settings.UI/Strings/en-us/Resources.resw | 6 ++++++ .../ViewModels/PowerLauncherViewModel.cs | 17 +++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml index a0b4bca9662..5b6caf508bf 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml @@ -448,6 +448,10 @@ + + + + - -36 - - - - - - + + + + + + -36 + + + + + + From 7789ce165095812383f6b2da9960edd2697f105e Mon Sep 17 00:00:00 2001 From: Michael Nadeau Date: Fri, 9 Aug 2024 08:24:02 -0400 Subject: [PATCH 10/10] Remove image from cache when showPreview changes --- .../PowerLauncher/ViewModel/ResultViewModel.cs | 11 +++++++++++ .../launcher/Wox.Infrastructure/Image/ImageCache.cs | 6 ++++++ .../launcher/Wox.Infrastructure/Image/ImageLoader.cs | 5 +++++ 3 files changed, 22 insertions(+) diff --git a/src/modules/launcher/PowerLauncher/ViewModel/ResultViewModel.cs b/src/modules/launcher/PowerLauncher/ViewModel/ResultViewModel.cs index 893cb893a65..900f0fc8dc6 100644 --- a/src/modules/launcher/PowerLauncher/ViewModel/ResultViewModel.cs +++ b/src/modules/launcher/PowerLauncher/ViewModel/ResultViewModel.cs @@ -80,6 +80,17 @@ public ResultViewModel(Result result, IMainViewModel mainViewModel, PowerToysRun } _settings = settings; + _settings.PropertyChanged += (s, e) => + { + if (e.PropertyName == nameof(_settings.ShowPreview)) + { + if (!string.IsNullOrEmpty(Result.IcoPath)) + { + _imageLoaded = false; + ImageLoader.Unload(Result.IcoPath); + } + } + }; ContextMenuSelectedIndex = NoSelectionIndex; LoadContextMenu(); diff --git a/src/modules/launcher/Wox.Infrastructure/Image/ImageCache.cs b/src/modules/launcher/Wox.Infrastructure/Image/ImageCache.cs index 0415c074d0b..021a093b289 100644 --- a/src/modules/launcher/Wox.Infrastructure/Image/ImageCache.cs +++ b/src/modules/launcher/Wox.Infrastructure/Image/ImageCache.cs @@ -69,6 +69,12 @@ public ImageSource this[string path] } } + public void Remove(string path) + { + Usage.TryRemove(path, out _); + _data.TryRemove(path, out _); + } + public void Cleanup() { var images = Usage diff --git a/src/modules/launcher/Wox.Infrastructure/Image/ImageLoader.cs b/src/modules/launcher/Wox.Infrastructure/Image/ImageLoader.cs index b3f27a94274..5510003ce67 100644 --- a/src/modules/launcher/Wox.Infrastructure/Image/ImageLoader.cs +++ b/src/modules/launcher/Wox.Infrastructure/Image/ImageLoader.cs @@ -258,6 +258,11 @@ private static ImageResult GetThumbnailResult(ref string path, bool generateThum private const bool _enableImageHash = true; + public static void Unload(string path) + { + ImageCache.Remove(path); + } + public static async ValueTask LoadAsync(string path, bool generateThumbnailsFromFiles, bool loadFullImage = false) { var imageResult = await LoadInternalAsync(path, generateThumbnailsFromFiles, loadFullImage);