diff --git a/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs b/Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs index 67ab9c9..2685bb9 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(); @@ -202,7 +198,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 +208,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}/// "); @@ -246,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; @@ -262,6 +271,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($"}}"); @@ -319,7 +338,7 @@ private static void GenerateUpdateLabelsMethod( sb.AppendLine($"{tabString}/// Update the labels of the enum values when culture info changes."); 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}{{");