Skip to content

Commit f45b53f

Browse files
authored
Merge pull request #38 from Flow-Launcher/display_property_change
Generate INotifyPropertyChanged for Display property & Use global namespace for List type
2 parents 4edbef5 + bacfa90 commit f45b53f

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

Flow.Launcher.Localization.SourceGenerators/Localize/EnumSourceGenerator.cs

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,6 @@ private void GenerateSource(
185185
GeneratedHeaderFromPath(sourceBuilder, enumFullName);
186186
sourceBuilder.AppendLine();
187187

188-
// Generate using directives
189-
sourceBuilder.AppendLine("using System.Collections.Generic;");
190-
sourceBuilder.AppendLine();
191-
192188
// Generate namespace
193189
sourceBuilder.AppendLine($"namespace {enumNamespace};");
194190
sourceBuilder.AppendLine();
@@ -202,7 +198,7 @@ private void GenerateSource(
202198
sourceBuilder.AppendLine($"/// Data class for <see cref=\"{enumFullName}\"/>");
203199
sourceBuilder.AppendLine($"/// </summary>");
204200
sourceBuilder.AppendLine($"[System.CodeDom.Compiler.GeneratedCode(\"{nameof(EnumSourceGenerator)}\", \"{PackageVersion}\")]");
205-
sourceBuilder.AppendLine($"public class {enumDataClassName}");
201+
sourceBuilder.AppendLine($"public class {enumDataClassName} : global::System.ComponentModel.INotifyPropertyChanged");
206202
sourceBuilder.AppendLine("{");
207203

208204
// Generate properties
@@ -212,10 +208,23 @@ private void GenerateSource(
212208
sourceBuilder.AppendLine($"{tabString}public {enumName} Value {{ get; private init; }}");
213209
sourceBuilder.AppendLine();
214210

211+
sourceBuilder.AppendLine($"{tabString}private string _display;");
212+
sourceBuilder.AppendLine();
215213
sourceBuilder.AppendLine($"{tabString}/// <summary>");
216214
sourceBuilder.AppendLine($"{tabString}/// The display text of the enum value");
217215
sourceBuilder.AppendLine($"{tabString}/// </summary>");
218-
sourceBuilder.AppendLine($"{tabString}public string Display {{ get; set; }}");
216+
sourceBuilder.AppendLine($"{tabString}public string Display");
217+
sourceBuilder.AppendLine($"{tabString}{{");
218+
sourceBuilder.AppendLine($"{tabString}{tabString}get => _display;");
219+
sourceBuilder.AppendLine($"{tabString}{tabString}set");
220+
sourceBuilder.AppendLine($"{tabString}{tabString}{{");
221+
sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}if (_display != value)");
222+
sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}{{");
223+
sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}{tabString}_display = value;");
224+
sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}{tabString}OnPropertyChanged(nameof(Display));");
225+
sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}}}");
226+
sourceBuilder.AppendLine($"{tabString}{tabString}}}");
227+
sourceBuilder.AppendLine($"{tabString}}}");
219228
sourceBuilder.AppendLine();
220229

221230
sourceBuilder.AppendLine($"{tabString}/// <summary>");
@@ -246,9 +255,9 @@ private void GenerateSource(
246255
sourceBuilder.AppendLine($"{tabString}/// <summary>");
247256
sourceBuilder.AppendLine($"{tabString}/// Get all values of <see cref=\"{enumFullName}\"/>");
248257
sourceBuilder.AppendLine($"{tabString}/// </summary>");
249-
sourceBuilder.AppendLine($"{tabString}public static List<{enumDataClassName}> GetValues()");
258+
sourceBuilder.AppendLine($"{tabString}public static global::System.Collections.Generic.List<{enumDataClassName}> GetValues()");
250259
sourceBuilder.AppendLine($"{tabString}{{");
251-
sourceBuilder.AppendLine($"{tabString}{tabString}return new List<{enumDataClassName}>");
260+
sourceBuilder.AppendLine($"{tabString}{tabString}return new global::System.Collections.Generic.List<{enumDataClassName}>");
252261
sourceBuilder.AppendLine($"{tabString}{tabString}{{");
253262
var enumFields = GetEnumFields(spc, enumSymbol, enumFullName);
254263
if (enumFields.Length == 0) return;
@@ -262,6 +271,16 @@ private void GenerateSource(
262271

263272
// Generate UpdateLabels method
264273
GenerateUpdateLabelsMethod(sourceBuilder, getTranslation, enumDataClassName, tabString);
274+
sourceBuilder.AppendLine();
275+
276+
// Generate INotifyPropertyChanged implementation
277+
sourceBuilder.AppendLine($"{tabString}/// <inheritdoc />");
278+
sourceBuilder.AppendLine($"{tabString}public event global::System.ComponentModel.PropertyChangedEventHandler? PropertyChanged;");
279+
sourceBuilder.AppendLine();
280+
sourceBuilder.AppendLine($"{tabString}protected void OnPropertyChanged([global::System.Runtime.CompilerServices.CallerMemberName] string? propertyName = null)");
281+
sourceBuilder.AppendLine($"{tabString}{{");
282+
sourceBuilder.AppendLine($"{tabString}{tabString}PropertyChanged?.Invoke(this, new global::System.ComponentModel.PropertyChangedEventArgs(propertyName));");
283+
sourceBuilder.AppendLine($"{tabString}}}");
265284

266285
sourceBuilder.AppendLine($"}}");
267286

@@ -319,7 +338,7 @@ private static void GenerateUpdateLabelsMethod(
319338
sb.AppendLine($"{tabString}/// Update the labels of the enum values when culture info changes.");
320339
sb.AppendLine($"{tabString}/// See <see cref=\"Flow.Launcher.Plugin.PluginInitContext.CultureInfoChanged\"/> for more details");
321340
sb.AppendLine($"{tabString}/// </summary>");
322-
sb.AppendLine($"{tabString}public static void UpdateLabels(List<{enumDataClassName}> options)");
341+
sb.AppendLine($"{tabString}public static void UpdateLabels(global::System.Collections.Generic.List<{enumDataClassName}> options)");
323342
sb.AppendLine($"{tabString}{{");
324343
sb.AppendLine($"{tabString}{tabString}foreach (var item in options)");
325344
sb.AppendLine($"{tabString}{tabString}{{");

0 commit comments

Comments
 (0)