From f396b9532b7119dcc09cdd9f3a9507bf7457ad0b Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Sat, 1 Nov 2025 21:54:19 +1000 Subject: [PATCH] display package details on select --- .../Features/Nuget/NugetPanel.cs | 13 +++++++++++++ .../Features/Nuget/NugetPanel.tscn | 18 +++++++++++------- .../Features/Nuget/PackageEntry.cs | 5 +++++ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs b/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs index b96db24..02d43b6 100644 --- a/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs +++ b/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs @@ -10,17 +10,23 @@ public partial class NugetPanel : Control private VBoxContainer _implicitlyInstalledPackagesItemList = null!; private VBoxContainer _availablePackagesItemList = null!; + private VBoxContainer _packageDetailsVBoxContainer = null!; + public SharpIdeSolutionModel? Solution { get; set; } [Inject] private readonly NugetClientService _nugetClientService = null!; private readonly PackedScene _packageEntryScene = ResourceLoader.Load("uid://cqc2xlt81ju8s"); + + private IdePackageResult? _selectedPackage; public override void _Ready() { _installedPackagesVboxContainer = GetNode("%InstalledPackagesVBoxContainer"); _implicitlyInstalledPackagesItemList = GetNode("%ImplicitlyInstalledPackagesVBoxContainer"); _availablePackagesItemList = GetNode("%AvailablePackagesVBoxContainer"); + _packageDetailsVBoxContainer = GetNode("%PackageDetailsVBoxContainer"); + _packageDetailsVBoxContainer.Visible = false; _ = Task.GodotRun(async () => { @@ -32,6 +38,7 @@ public partial class NugetPanel : Control { var scene = _packageEntryScene.Instantiate(); scene.PackageResult = s; + scene.PackageSelected += OnPackageSelected; return scene; }).ToList(); await this.InvokeAsync(() => @@ -43,4 +50,10 @@ public partial class NugetPanel : Control }); }); } + + private void OnPackageSelected(IdePackageResult packageResult) + { + _selectedPackage = packageResult; + _packageDetailsVBoxContainer.Visible = true; + } } \ No newline at end of file diff --git a/src/SharpIDE.Godot/Features/Nuget/NugetPanel.tscn b/src/SharpIDE.Godot/Features/Nuget/NugetPanel.tscn index c92422d..e37e349 100644 --- a/src/SharpIDE.Godot/Features/Nuget/NugetPanel.tscn +++ b/src/SharpIDE.Godot/Features/Nuget/NugetPanel.tscn @@ -118,31 +118,35 @@ layout_mode = 2 [node name="VBoxContainer2" type="VBoxContainer" parent="VBoxContainer/MarginContainer2/HSplitContainer"] layout_mode = 2 -[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2"] +[node name="PackageDetailsVBoxContainer" type="VBoxContainer" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/PackageDetailsVBoxContainer"] layout_mode = 2 theme_override_constants/separation = 8 -[node name="TextureRect" type="TextureRect" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/HBoxContainer"] +[node name="TextureRect" type="TextureRect" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/PackageDetailsVBoxContainer/HBoxContainer"] custom_minimum_size = Vector2(32, 32) layout_mode = 2 texture = ExtResource("3_yr6k7") expand_mode = 3 -[node name="Label" type="Label" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/HBoxContainer"] +[node name="Label" type="Label" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/PackageDetailsVBoxContainer/HBoxContainer"] layout_mode = 2 theme_override_colors/font_color = Color(0.83137256, 0.83137256, 0.83137256, 1) theme_override_font_sizes/font_size = 18 text = "OpenTelemetry.Exporter.OpenTelemetryProtocol" -[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2"] +[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/PackageDetailsVBoxContainer"] layout_mode = 2 -[node name="Label" type="Label" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/HBoxContainer2"] +[node name="Label" type="Label" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/PackageDetailsVBoxContainer/HBoxContainer2"] layout_mode = 2 theme_override_colors/font_color = Color(0.83137256, 0.83137256, 0.83137256, 1) text = "Version" -[node name="VersionOptionButton" type="OptionButton" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/HBoxContainer2"] +[node name="VersionOptionButton" type="OptionButton" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/PackageDetailsVBoxContainer/HBoxContainer2"] layout_mode = 2 size_flags_horizontal = 3 selected = 0 @@ -150,7 +154,7 @@ item_count = 1 popup/item_0/text = "1.13.0" popup/item_0/id = 0 -[node name="NugetSourceOptionButton" type="OptionButton" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/HBoxContainer2"] +[node name="NugetSourceOptionButton" type="OptionButton" parent="VBoxContainer/MarginContainer2/HSplitContainer/VBoxContainer2/PackageDetailsVBoxContainer/HBoxContainer2"] layout_mode = 2 selected = 0 item_count = 1 diff --git a/src/SharpIDE.Godot/Features/Nuget/PackageEntry.cs b/src/SharpIDE.Godot/Features/Nuget/PackageEntry.cs index fd9c913..72e5604 100644 --- a/src/SharpIDE.Godot/Features/Nuget/PackageEntry.cs +++ b/src/SharpIDE.Godot/Features/Nuget/PackageEntry.cs @@ -6,6 +6,7 @@ namespace SharpIDE.Godot.Features.Nuget; public partial class PackageEntry : MarginContainer { + private Button _button; private Label _packageNameLabel = null!; private Label _currentVersionLabel = null!; private Label _latestVersionLabel = null!; @@ -26,18 +27,22 @@ public partial class PackageEntry : MarginContainer Source_4_Color, Source_5_Color ]; + + public event Action PackageSelected = null!; [Inject] private readonly NugetPackageIconCacheService _nugetPackageIconCacheService = null!; public IdePackageResult PackageResult { get; set; } = null!; public override void _Ready() { + _button = GetNode