From 81cb149b0a39c3f0cdb55cc6034bfa5e0f02d82d Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Tue, 12 Aug 2025 13:40:40 +0800 Subject: [PATCH 1/3] Generate INotifyPropertyChanged interface for Enum localize Display property --- .../Localize/EnumSourceGenerator.cs | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs b/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs index 67ab9c9..2d87875 100644 --- a/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs +++ b/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs @@ -202,7 +202,7 @@ private void GenerateSource( sourceBuilder.AppendLine($"/// Data class for "); sourceBuilder.AppendLine($"/// "); sourceBuilder.AppendLine($"[System.CodeDom.Compiler.GeneratedCode(\"{nameof(EnumSourceGenerator)}\", \"{PackageVersion}\")]"); - sourceBuilder.AppendLine($"public class {enumDataClassName}"); + sourceBuilder.AppendLine($"public class {enumDataClassName} : global::System.ComponentModel.INotifyPropertyChanged"); sourceBuilder.AppendLine("{"); // Generate properties @@ -212,10 +212,23 @@ private void GenerateSource( sourceBuilder.AppendLine($"{tabString}public {enumName} Value {{ get; private init; }}"); sourceBuilder.AppendLine(); + sourceBuilder.AppendLine($"{tabString}private string _display;"); + sourceBuilder.AppendLine(); sourceBuilder.AppendLine($"{tabString}/// "); sourceBuilder.AppendLine($"{tabString}/// The display text of the enum value"); sourceBuilder.AppendLine($"{tabString}/// "); - sourceBuilder.AppendLine($"{tabString}public string Display {{ get; set; }}"); + sourceBuilder.AppendLine($"{tabString}public string Display"); + sourceBuilder.AppendLine($"{tabString}{{"); + sourceBuilder.AppendLine($"{tabString}{tabString}get => _display;"); + sourceBuilder.AppendLine($"{tabString}{tabString}set"); + sourceBuilder.AppendLine($"{tabString}{tabString}{{"); + sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}if (_display != value)"); + sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}{{"); + sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}{tabString}_display = value;"); + sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}{tabString}OnPropertyChanged(nameof(Display));"); + sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}}}"); + sourceBuilder.AppendLine($"{tabString}{tabString}}}"); + sourceBuilder.AppendLine($"{tabString}}}"); sourceBuilder.AppendLine(); sourceBuilder.AppendLine($"{tabString}/// "); @@ -262,6 +275,16 @@ private void GenerateSource( // Generate UpdateLabels method GenerateUpdateLabelsMethod(sourceBuilder, getTranslation, enumDataClassName, tabString); + sourceBuilder.AppendLine(); + + // Generate INotifyPropertyChanged implementation + sourceBuilder.AppendLine($"{tabString}/// "); + sourceBuilder.AppendLine($"{tabString}public event global::System.ComponentModel.PropertyChangedEventHandler? PropertyChanged;"); + sourceBuilder.AppendLine(); + sourceBuilder.AppendLine($"{tabString}protected void OnPropertyChanged([global::System.Runtime.CompilerServices.CallerMemberName] string? propertyName = null)"); + sourceBuilder.AppendLine($"{tabString}{{"); + sourceBuilder.AppendLine($"{tabString}{tabString}PropertyChanged?.Invoke(this, new global::System.ComponentModel.PropertyChangedEventArgs(propertyName));"); + sourceBuilder.AppendLine($"{tabString}}}"); sourceBuilder.AppendLine($"}}"); From ab674be97c2a8589d0c0efd283c9332fbb83d99e Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Tue, 12 Aug 2025 13:42:45 +0800 Subject: [PATCH 2/3] Use global namespace for List type --- .../Localize/EnumSourceGenerator.cs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs b/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs index 2d87875..0d6cdc6 100644 --- a/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs +++ b/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs @@ -185,10 +185,6 @@ private void GenerateSource( GeneratedHeaderFromPath(sourceBuilder, enumFullName); sourceBuilder.AppendLine(); - // Generate using directives - sourceBuilder.AppendLine("using System.Collections.Generic;"); - sourceBuilder.AppendLine(); - // Generate namespace sourceBuilder.AppendLine($"namespace {enumNamespace};"); sourceBuilder.AppendLine(); @@ -259,9 +255,9 @@ private void GenerateSource( sourceBuilder.AppendLine($"{tabString}/// "); sourceBuilder.AppendLine($"{tabString}/// Get all values of "); sourceBuilder.AppendLine($"{tabString}/// "); - sourceBuilder.AppendLine($"{tabString}public static List<{enumDataClassName}> GetValues()"); + sourceBuilder.AppendLine($"{tabString}public static global::System.Collections.Generic.List<{enumDataClassName}> GetValues()"); sourceBuilder.AppendLine($"{tabString}{{"); - sourceBuilder.AppendLine($"{tabString}{tabString}return new List<{enumDataClassName}>"); + sourceBuilder.AppendLine($"{tabString}{tabString}return new global::System.Collections.Generic.List<{enumDataClassName}>"); sourceBuilder.AppendLine($"{tabString}{tabString}{{"); var enumFields = GetEnumFields(spc, enumSymbol, enumFullName); if (enumFields.Length == 0) return; @@ -340,9 +336,9 @@ private static void GenerateUpdateLabelsMethod( { sb.AppendLine($"{tabString}/// "); sb.AppendLine($"{tabString}/// Update the labels of the enum values when culture info changes."); - sb.AppendLine($"{tabString}/// See for more details"); + sb.AppendLine($"{tabString}/// See for more details"); sb.AppendLine($"{tabString}/// "); - sb.AppendLine($"{tabString}public static void UpdateLabels(List<{enumDataClassName}> options)"); + sb.AppendLine($"{tabString}public static void UpdateLabels(global::System.Collections.Generic.List<{enumDataClassName}> options)"); sb.AppendLine($"{tabString}{{"); sb.AppendLine($"{tabString}{tabString}foreach (var item in options)"); sb.AppendLine($"{tabString}{tabString}{{"); From bacfa907d304c070165d8f673557aa5c7b507345 Mon Sep 17 00:00:00 2001 From: Jack Ye <1160210343@qq.com> Date: Tue, 12 Aug 2025 13:53:25 +0800 Subject: [PATCH 3/3] Fix typos Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../Localize/EnumSourceGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs b/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs index 0d6cdc6..2685bb9 100644 --- a/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs +++ b/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs @@ -336,7 +336,7 @@ private static void GenerateUpdateLabelsMethod( { sb.AppendLine($"{tabString}/// "); sb.AppendLine($"{tabString}/// Update the labels of the enum values when culture info changes."); - sb.AppendLine($"{tabString}/// See for more details"); + sb.AppendLine($"{tabString}/// See for more details"); sb.AppendLine($"{tabString}/// "); sb.AppendLine($"{tabString}public static void UpdateLabels(global::System.Collections.Generic.List<{enumDataClassName}> options)"); sb.AppendLine($"{tabString}{{");