Skip to content

Commit 81cb149

Browse files
committed
Generate INotifyPropertyChanged interface for Enum localize Display property
1 parent 4edbef5 commit 81cb149

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

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

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ private void GenerateSource(
202202
sourceBuilder.AppendLine($"/// Data class for <see cref=\"{enumFullName}\"/>");
203203
sourceBuilder.AppendLine($"/// </summary>");
204204
sourceBuilder.AppendLine($"[System.CodeDom.Compiler.GeneratedCode(\"{nameof(EnumSourceGenerator)}\", \"{PackageVersion}\")]");
205-
sourceBuilder.AppendLine($"public class {enumDataClassName}");
205+
sourceBuilder.AppendLine($"public class {enumDataClassName} : global::System.ComponentModel.INotifyPropertyChanged");
206206
sourceBuilder.AppendLine("{");
207207

208208
// Generate properties
@@ -212,10 +212,23 @@ private void GenerateSource(
212212
sourceBuilder.AppendLine($"{tabString}public {enumName} Value {{ get; private init; }}");
213213
sourceBuilder.AppendLine();
214214

215+
sourceBuilder.AppendLine($"{tabString}private string _display;");
216+
sourceBuilder.AppendLine();
215217
sourceBuilder.AppendLine($"{tabString}/// <summary>");
216218
sourceBuilder.AppendLine($"{tabString}/// The display text of the enum value");
217219
sourceBuilder.AppendLine($"{tabString}/// </summary>");
218-
sourceBuilder.AppendLine($"{tabString}public string Display {{ get; set; }}");
220+
sourceBuilder.AppendLine($"{tabString}public string Display");
221+
sourceBuilder.AppendLine($"{tabString}{{");
222+
sourceBuilder.AppendLine($"{tabString}{tabString}get => _display;");
223+
sourceBuilder.AppendLine($"{tabString}{tabString}set");
224+
sourceBuilder.AppendLine($"{tabString}{tabString}{{");
225+
sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}if (_display != value)");
226+
sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}{{");
227+
sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}{tabString}_display = value;");
228+
sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}{tabString}OnPropertyChanged(nameof(Display));");
229+
sourceBuilder.AppendLine($"{tabString}{tabString}{tabString}}}");
230+
sourceBuilder.AppendLine($"{tabString}{tabString}}}");
231+
sourceBuilder.AppendLine($"{tabString}}}");
219232
sourceBuilder.AppendLine();
220233

221234
sourceBuilder.AppendLine($"{tabString}/// <summary>");
@@ -262,6 +275,16 @@ private void GenerateSource(
262275

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

266289
sourceBuilder.AppendLine($"}}");
267290

0 commit comments

Comments
 (0)