display package details on select

This commit is contained in:
Matt Parker
2025-11-01 21:54:19 +10:00
parent 2933e5dfc2
commit f396b9532b
3 changed files with 29 additions and 7 deletions

View File

@@ -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<PackedScene>("uid://cqc2xlt81ju8s");
private IdePackageResult? _selectedPackage;
public override void _Ready()
{
_installedPackagesVboxContainer = GetNode<VBoxContainer>("%InstalledPackagesVBoxContainer");
_implicitlyInstalledPackagesItemList = GetNode<VBoxContainer>("%ImplicitlyInstalledPackagesVBoxContainer");
_availablePackagesItemList = GetNode<VBoxContainer>("%AvailablePackagesVBoxContainer");
_packageDetailsVBoxContainer = GetNode<VBoxContainer>("%PackageDetailsVBoxContainer");
_packageDetailsVBoxContainer.Visible = false;
_ = Task.GodotRun(async () =>
{
@@ -32,6 +38,7 @@ public partial class NugetPanel : Control
{
var scene = _packageEntryScene.Instantiate<PackageEntry>();
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;
}
}

View File

@@ -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

View File

@@ -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<IdePackageResult> PackageSelected = null!;
[Inject] private readonly NugetPackageIconCacheService _nugetPackageIconCacheService = null!;
public IdePackageResult PackageResult { get; set; } = null!;
public override void _Ready()
{
_button = GetNode<Button>("Button");
_packageNameLabel = GetNode<Label>("%PackageNameLabel");
_currentVersionLabel = GetNode<Label>("%CurrentVersionLabel");
_latestVersionLabel = GetNode<Label>("%LatestVersionLabel");
_sourceNamesContainer = GetNode<HBoxContainer>("%SourceNamesHBoxContainer");
_packageIconTextureRect = GetNode<TextureRect>("%PackageIconTextureRect");
ApplyValues();
_button.Pressed += () => PackageSelected?.Invoke(PackageResult);
}
private void ApplyValues()