From 460c2544d2afb1fb40e75ea95c2efd1c0ffbf566 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Fri, 12 Sep 2025 18:32:22 +1000 Subject: [PATCH] display diagnostics --- .../Features/Problems/ProblemsPanel.cs | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/SharpIDE.Godot/Features/Problems/ProblemsPanel.cs b/src/SharpIDE.Godot/Features/Problems/ProblemsPanel.cs index 805e44e..615e2c2 100644 --- a/src/SharpIDE.Godot/Features/Problems/ProblemsPanel.cs +++ b/src/SharpIDE.Godot/Features/Problems/ProblemsPanel.cs @@ -30,25 +30,55 @@ public partial class ProblemsPanel : Control }); BindToTree(_projects); } - + + private class TreeItemContainer + { + public TreeItem? Value { get; set; } + } public void BindToTree(ObservableHashSet list) { var view = list.CreateView(x => { var treeItem = _tree.CreateItem(_rootItem); treeItem.SetText(0, x.Name); + var projectDiagnosticsView = x.Diagnostics.CreateView(y => + { + return new TreeItemContainer(); + }); + var test = projectDiagnosticsView.ObserveChanged().SubscribeOnCurrentSynchronizationContext() + .SubscribeAwait(async (e, ct) => + { + if (e.Action is NotifyCollectionChangedAction.Add) + { + await this.InvokeAsync(() => + { + var diagItem = _tree.CreateItem(treeItem); + diagItem.SetText(0, e.NewItem.Value.GetMessage()); + e.NewItem.View.Value = diagItem; + }); + } + if (e.Action is NotifyCollectionChangedAction.Remove) + { + await this.InvokeAsync(() => + { + e.OldItem.View.Value?.Free(); + }); + } + }); Observable.EveryValueChanged(x, s => s.Diagnostics.Count) .Subscribe(s => treeItem.Visible = s is not 0); return treeItem; }); view.ViewChanged += OnViewChanged; } + private static void OnViewChanged(in SynchronizedViewChangedEventArgs eventArgs) { GD.Print("View changed: " + eventArgs.Action); if (eventArgs.Action == NotifyCollectionChangedAction.Remove) { - eventArgs.OldItem.View.Free(); + var treeItem = eventArgs.OldItem.View; + Callable.From(() => treeItem.Free()).CallDeferred(); } } } \ No newline at end of file