conditionally show buttons

This commit is contained in:
Matt Parker
2025-11-03 21:16:33 +10:00
parent a8c7e87228
commit 3cf214c135
3 changed files with 65 additions and 1 deletions

View File

@@ -1,7 +1,9 @@
using Godot;
using NuGet.Versioning;
using SharpIDE.Application.Features.Evaluation;
using SharpIDE.Application.Features.Nuget;
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
using SharpIDE.Godot.Features.Problems;
namespace SharpIDE.Godot.Features.Nuget;
@@ -29,10 +31,21 @@ public partial class NugetPackageDetails : VBoxContainer
_nugetSourceOptionButton = GetNode<OptionButton>("%NugetSourceOptionButton");
_projectsVBoxContainer = GetNode<VBoxContainer>("%ProjectsVBoxContainer");
_nugetSourceOptionButton.ItemSelected += OnNugetSourceSelected;
_versionOptionButton.ItemSelected += VersionSelected;
_projectsVBoxContainer.QueueFreeChildren();
}
private void VersionSelected(long index)
{
var selectedVersion = _versionOptionButton.GetItemMetadata((int)index).As<RefCountedContainer<NuGetVersion>>();
foreach (var child in _projectsVBoxContainer.GetChildren().OfType<PackageDetailsProjectEntry>())
{
child.VersionSelectedInDetails = selectedVersion?.Item;
child.DisplayRelevantButtons();
}
}
public async Task SetPackage(IdePackageResult package)
{
_package = package;
@@ -106,10 +119,12 @@ public partial class NugetPackageDetails : VBoxContainer
_versionOptionButton.Clear();
foreach (var (index, metadata) in results.Index())
{
_versionOptionButton.AddItem(metadata.Identity.Version.ToNormalizedString());
_versionOptionButton.AddItem(metadata.Identity.Version.ToNormalizedString(), index);
_versionOptionButton.SetItemMetadata(index, new RefCountedContainer<NuGetVersion>(metadata.Identity.Version));
//_versionOptionButton.SetItemIcon(index, _warningIconTextureRect);
}
_versionOptionButton.Selected = 0;
VersionSelected(0);
});
}
}

View File

@@ -9,13 +9,22 @@ public partial class PackageDetailsProjectEntry : MarginContainer
{
private Label _projectNameLabel = null!;
private Label _installedVersionLabel = null!;
private Button _addButton = null!;
private Button _upgradeButton = null!;
private Button _downgradeButton = null!;
private Button _removeButton = null!;
public SharpIdeProjectModel ProjectModel { get; set; } = null!;
public ProjectPackageReference? ProjectPackageReference { get; set; }
public NuGetVersion? VersionSelectedInDetails { get; set; }
public override void _Ready()
{
_projectNameLabel = GetNode<Label>("%ProjectNameLabel");;
_installedVersionLabel = GetNode<Label>("%InstalledVersionLabel");
_addButton = GetNode<Button>("%AddButton");
_upgradeButton = GetNode<Button>("%UpgradeButton");
_downgradeButton = GetNode<Button>("%DowngradeButton");
_removeButton = GetNode<Button>("%RemoveButton");
_installedVersionLabel.Text = string.Empty;
SetValues();
}
@@ -43,6 +52,7 @@ public partial class PackageDetailsProjectEntry : MarginContainer
{string.Join("\n", transitiveOriginsGroupedByVersion.Select(t => $"{t.RequestedVersion.ToString("p", VersionRangeFormatter.Instance)} by {string.Join(", ", t.PackageNames)}"))}
""";
}
DisplayRelevantButtons();
}
public void ClearInstallInfo()
@@ -50,5 +60,40 @@ public partial class PackageDetailsProjectEntry : MarginContainer
_installedVersionLabel.Text = string.Empty;
_installedVersionLabel.TooltipText = string.Empty;
ProjectPackageReference = null;
DisplayRelevantButtons();
}
public void DisplayRelevantButtons()
{
_addButton.Visible = false;
_upgradeButton.Visible = false;
_downgradeButton.Visible = false;
_removeButton.Visible = false;
if (VersionSelectedInDetails == null)
{
_removeButton.Visible = true;
return;
}
if (ProjectPackageReference == null || ProjectPackageReference.IsTransitive)
{
_addButton.Visible = true;
return;
}
var installed = ProjectPackageReference.InstalledVersion;
var selected = VersionSelectedInDetails;
if (installed < selected)
{
_upgradeButton.Visible = true;
}
else if (installed > selected)
{
_downgradeButton.Visible = true;
}
_removeButton.Visible = true;
}
}

View File

@@ -52,17 +52,21 @@ layout_mode = 2
size_flags_horizontal = 3
[node name="UpgradeButton" type="Button" parent="HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Upgrade"
[node name="DowngradeButton" type="Button" parent="HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Downgrade"
[node name="RemoveButton" type="Button" parent="HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Remove"
[node name="AddButton" type="Button" parent="HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Add"