Files
SharpIDE/src/SharpIDE.Godot/Features/LeftSideBar/LeftSideBar.cs
2025-08-27 22:46:39 +10:00

40 lines
1.7 KiB
C#

using Ardalis.GuardClauses;
using Godot;
namespace SharpIDE.Godot.Features.LeftSideBar;
public partial class LeftSideBar : Panel
{
private Button _slnExplorerButton = null!;
// These are in a ButtonGroup, which handles mutual exclusivity of being toggled on
private Button _problemsButton = null!;
private Button _runButton = null!;
private Button _buildButton = null!;
public override void _Ready()
{
_slnExplorerButton = GetNode<Button>("%SlnExplorerButton");
_problemsButton = GetNode<Button>("%ProblemsButton");
_runButton = GetNode<Button>("%RunButton");
_buildButton = GetNode<Button>("%BuildButton");
_problemsButton.Toggled += toggledOn => GodotGlobalEvents.InvokeBottomPanelTabSelected(toggledOn ? BottomPanelType.Problems : null);
_runButton.Toggled += toggledOn => GodotGlobalEvents.InvokeBottomPanelTabSelected(toggledOn ? BottomPanelType.Run : null);
_buildButton.Toggled += toggledOn => GodotGlobalEvents.InvokeBottomPanelTabSelected(toggledOn ? BottomPanelType.Build : null);
GodotGlobalEvents.BottomPanelTabExternallySelected += OnBottomPanelTabExternallySelected;
}
private async Task OnBottomPanelTabExternallySelected(BottomPanelType arg)
{
await this.InvokeAsync(() =>
{
switch (arg)
{
case BottomPanelType.Run: _runButton.ButtonPressed = true; break;
case BottomPanelType.Build: _buildButton.ButtonPressed = true; break;
case BottomPanelType.Problems: _problemsButton.ButtonPressed = true; break;
default: throw new ArgumentOutOfRangeException(nameof(arg), arg, null);
}
});
}
}