Files
SharpIDE/src/SharpIDE.Godot/Features/LeftSideBar/LeftSideBar.cs
2025-11-04 19:32:27 +10:00

56 lines
3.3 KiB
C#

using Godot;
using SharpIDE.Godot.Features.BottomPanel;
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!;
private Button _debugButton = null!;
private Button _ideDiagnosticsButton = null!;
private Button _nugetButton = null!;
private Button _testExplorerButton = null!;
public override void _Ready()
{
_slnExplorerButton = GetNode<Button>("%SlnExplorerButton");
_problemsButton = GetNode<Button>("%ProblemsButton");
_runButton = GetNode<Button>("%RunButton");
_buildButton = GetNode<Button>("%BuildButton");
_debugButton = GetNode<Button>("%DebugButton");
_ideDiagnosticsButton = GetNode<Button>("%IdeDiagnosticsButton");
_nugetButton = GetNode<Button>("%NugetButton");
_testExplorerButton = GetNode<Button>("%TestExplorerButton");
_problemsButton.Toggled += toggledOn => GodotGlobalEvents.Instance.BottomPanelTabSelected.InvokeParallelFireAndForget(toggledOn ? BottomPanelType.Problems : null);
_runButton.Toggled += toggledOn => GodotGlobalEvents.Instance.BottomPanelTabSelected.InvokeParallelFireAndForget(toggledOn ? BottomPanelType.Run : null);
_buildButton.Toggled += toggledOn => GodotGlobalEvents.Instance.BottomPanelTabSelected.InvokeParallelFireAndForget(toggledOn ? BottomPanelType.Build : null);
_debugButton.Toggled += toggledOn => GodotGlobalEvents.Instance.BottomPanelTabSelected.InvokeParallelFireAndForget(toggledOn ? BottomPanelType.Debug : null);
_ideDiagnosticsButton.Toggled += toggledOn => GodotGlobalEvents.Instance.BottomPanelTabSelected.InvokeParallelFireAndForget(toggledOn ? BottomPanelType.IdeDiagnostics : null);
_nugetButton.Toggled += toggledOn => GodotGlobalEvents.Instance.BottomPanelTabSelected.InvokeParallelFireAndForget(toggledOn ? BottomPanelType.Nuget : null);
_testExplorerButton.Toggled += toggledOn => GodotGlobalEvents.Instance.BottomPanelTabSelected.InvokeParallelFireAndForget(toggledOn ? BottomPanelType.TestExplorer : null);
GodotGlobalEvents.Instance.BottomPanelTabExternallySelected.Subscribe(OnBottomPanelTabExternallySelected);
}
private async Task OnBottomPanelTabExternallySelected(BottomPanelType arg)
{
await this.InvokeAsync(() =>
{
switch (arg)
{
case BottomPanelType.Run: _runButton.ButtonPressed = true; break;
case BottomPanelType.Debug: _debugButton.ButtonPressed = true; break;
case BottomPanelType.Build: _buildButton.ButtonPressed = true; break;
case BottomPanelType.Problems: _problemsButton.ButtonPressed = true; break;
case BottomPanelType.IdeDiagnostics: _ideDiagnosticsButton.ButtonPressed = true; break;
case BottomPanelType.Nuget: _nugetButton.ButtonPressed = true; break;
case BottomPanelType.TestExplorer: _testExplorerButton.ButtonPressed = true; break;
default: throw new ArgumentOutOfRangeException(nameof(arg), arg, null);
}
});
}
}