run panel tabs

This commit is contained in:
Matt Parker
2025-08-25 18:42:46 +10:00
parent 8826c31a63
commit feffc0d7a8
17 changed files with 163 additions and 30 deletions

View File

@@ -1,33 +1,58 @@
using System.Collections.Generic;
using System.Linq;
using GDExtensionBindgen;
using Godot;
using SharpIDE.Application.Features.Events;
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
namespace SharpIDE.Godot.Features.Run;
public partial class RunPanel : Control
{
private Terminal _terminal = null!;
private TabBar _tabBar = null!;
private Panel _tabsPanel = null!;
[Export]
public Texture2D RunningIcon { get; set; } = null!;
private PackedScene _runPanelTabScene = GD.Load<PackedScene>("res://Features/Run/RunPanelTab.tscn");
public override void _Ready()
{
_tabBar = GetNode<TabBar>("%TabBar");
_tabBar.ClearTabs();
_tabsPanel = GetNode<Panel>("%TabsPanel");
var test = GetNode<Control>("VBoxContainer/TabsPanel/Terminal");
_terminal = new Terminal(test);
_terminal.Write("Hello from SharpIDE.Godot!\n");
GlobalEvents.ProjectStartedRunning += async projectModel =>
{
await this.InvokeAsync(() => ProjectStartedRunning(projectModel));
};
GlobalEvents.ProjectStoppedRunning += async projectModel =>
{
await this.InvokeAsync(() => ProjectStoppedRunning(projectModel));
};
}
public override void _Process(double delta)
public void ProjectStartedRunning(SharpIdeProjectModel projectModel)
{
//_terminal.Write("a");
}
public void NewRunStarted(SharpIdeProjectModel projectModel)
{
var terminal = new Terminal();
var existingRunPanelTab = _tabsPanel.GetChildren().OfType<RunPanelTab>().SingleOrDefault(s => s.Project == projectModel);
if (existingRunPanelTab != null)
{
_tabBar.SetTabIcon(existingRunPanelTab.TabBarTab, RunningIcon);
existingRunPanelTab.ClearTerminal();
return;
}
var runPanelTab = _runPanelTabScene.Instantiate<RunPanelTab>();
runPanelTab.Project = projectModel;
_tabBar.AddTab(projectModel.Name);
_tabsPanel.AddChild(terminal);
var tabIdx = _tabBar.GetTabCount() - 1;
runPanelTab.TabBarTab = tabIdx;
_tabBar.SetTabIcon(runPanelTab.TabBarTab, RunningIcon);
_tabsPanel.AddChild(runPanelTab);
}
public void ProjectStoppedRunning(SharpIdeProjectModel projectModel)
{
var runPanelTab = _tabsPanel.GetChildren().OfType<RunPanelTab>().Single(s => s.Project == projectModel);
_tabBar.SetTabIcon(runPanelTab.TabBarTab, null);
}
}