refactor terminal usage to scene
This commit is contained in:
@@ -2,18 +2,19 @@ using System.Threading.Channels;
|
||||
using GDExtensionBindgen;
|
||||
using Godot;
|
||||
using SharpIDE.Application.Features.Build;
|
||||
using SharpIDE.Godot.Features.TerminalBase;
|
||||
|
||||
namespace SharpIDE.Godot.Features.Build;
|
||||
|
||||
public partial class BuildPanel : Control
|
||||
{
|
||||
private Terminal _terminal = null!;
|
||||
private SharpIdeTerminal _terminal = null!;
|
||||
private ChannelReader<string>? _buildOutputChannelReader;
|
||||
|
||||
[Inject] private readonly BuildService _buildService = null!;
|
||||
public override void _Ready()
|
||||
{
|
||||
_terminal = new Terminal(GetNode<Control>("%Terminal"));
|
||||
_terminal = GetNode<SharpIdeTerminal>("%SharpIdeTerminal");
|
||||
_buildService.BuildStarted.Subscribe(OnBuildStarted);
|
||||
}
|
||||
|
||||
@@ -29,7 +30,7 @@ public partial class BuildPanel : Control
|
||||
|
||||
private async Task OnBuildStarted(BuildStartedFlags _)
|
||||
{
|
||||
await this.InvokeAsync(() => _terminal.Clear());
|
||||
await this.InvokeAsync(() => _terminal.ClearTerminal());
|
||||
_buildOutputChannelReader ??= _buildService.BuildTextWriter.ConsoleChannel.Reader;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://co6dkhdolriej"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dt46krpl6ds28" path="res://Features/Build/BuildPanel.cs" id="1_tx1bg"]
|
||||
[ext_resource type="Theme" uid="uid://bswaamju2blyt" path="res://Features/TerminalBase/TerminalTheme.tres" id="2_5bb6p"]
|
||||
[ext_resource type="PackedScene" uid="uid://beo6fg8r0ogxc" path="res://Features/TerminalBase/SharpIdeTerminal.tscn" id="2_5bb6p"]
|
||||
|
||||
[node name="BuildPanel" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -36,13 +36,6 @@ text = "Build"
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="Terminal" type="Terminal" parent="VBoxContainer/TerminalContainer"]
|
||||
[node name="SharpIdeTerminal" parent="VBoxContainer/TerminalContainer" instance=ExtResource("2_5bb6p")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_vertical = 3
|
||||
theme = ExtResource("2_5bb6p")
|
||||
|
||||
@@ -2,12 +2,13 @@ using GDExtensionBindgen;
|
||||
using Godot;
|
||||
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
|
||||
using SharpIDE.Godot.Features.Debug_.Tab.SubTabs;
|
||||
using SharpIDE.Godot.Features.TerminalBase;
|
||||
|
||||
namespace SharpIDE.Godot.Features.Debug_.Tab;
|
||||
|
||||
public partial class DebugPanelTab : Control
|
||||
{
|
||||
private Terminal _terminal = null!;
|
||||
private SharpIdeTerminal _terminal = null!;
|
||||
private ThreadsVariablesSubTab _threadsVariablesSubTab = null!;
|
||||
private Task _writeTask = Task.CompletedTask;
|
||||
|
||||
@@ -22,8 +23,7 @@ public partial class DebugPanelTab : Control
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
var terminalControl = GetNode<Control>("%Terminal");
|
||||
_terminal = new Terminal(terminalControl);
|
||||
_terminal = GetNode<SharpIdeTerminal>("%SharpIdeTerminal");
|
||||
}
|
||||
|
||||
public void StartWritingFromProjectOutput()
|
||||
@@ -37,13 +37,13 @@ public partial class DebugPanelTab : Control
|
||||
{
|
||||
await foreach (var array in Project.RunningOutputChannel!.Reader.ReadAllAsync().ConfigureAwait(false))
|
||||
{
|
||||
await this.InvokeAsync(() => _terminal.Write(array));
|
||||
await _terminal.WriteAsync(array);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void ClearTerminal()
|
||||
{
|
||||
_terminal.Clear();
|
||||
_terminal.ClearTerminal();
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
[ext_resource type="Script" uid="uid://b6gq81odfn8ok" path="res://Features/Debug_/Tab/DebugPanelTab.cs" id="1_ppo25"]
|
||||
[ext_resource type="PackedScene" uid="uid://bdu08nd7si641" path="res://Features/Debug_/Tab/SubTabs/ThreadsVariablesSubTab.tscn" id="2_e6ax5"]
|
||||
[ext_resource type="Theme" uid="uid://bswaamju2blyt" path="res://Features/TerminalBase/TerminalTheme.tres" id="3_e6ax5"]
|
||||
[ext_resource type="PackedScene" uid="uid://beo6fg8r0ogxc" path="res://Features/TerminalBase/SharpIdeTerminal.tscn" id="4_utxf4"]
|
||||
|
||||
[node name="DebugPanelTab" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -35,13 +35,6 @@ visible = false
|
||||
layout_mode = 2
|
||||
metadata/_tab_index = 1
|
||||
|
||||
[node name="Terminal" type="Terminal" parent="TabContainer/Console"]
|
||||
copy_on_selection = true
|
||||
[node name="SharpIdeTerminal" parent="TabContainer/Console" instance=ExtResource("4_utxf4")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme = ExtResource("3_e6ax5")
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
using GDExtensionBindgen;
|
||||
using Godot;
|
||||
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
|
||||
using SharpIDE.Godot.Features.TerminalBase;
|
||||
|
||||
namespace SharpIDE.Godot.Features.Run;
|
||||
|
||||
public partial class RunPanelTab : Control
|
||||
{
|
||||
private Terminal _terminal = null!;
|
||||
private SharpIdeTerminal _terminal = null!;
|
||||
private Task _writeTask = Task.CompletedTask;
|
||||
|
||||
public SharpIdeProjectModel Project { get; set; } = null!;
|
||||
@@ -14,8 +14,7 @@ public partial class RunPanelTab : Control
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
var terminalControl = GetNode<Control>("Terminal");
|
||||
_terminal = new Terminal(terminalControl);
|
||||
_terminal = GetNode<SharpIdeTerminal>("SharpIdeTerminal");
|
||||
}
|
||||
|
||||
public void StartWritingFromProjectOutput()
|
||||
@@ -29,15 +28,13 @@ public partial class RunPanelTab : Control
|
||||
{
|
||||
await foreach (var array in Project.RunningOutputChannel!.Reader.ReadAllAsync().ConfigureAwait(false))
|
||||
{
|
||||
await this.InvokeAsync(() => _terminal.Write(array));
|
||||
await _terminal.WriteAsync(array);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void ClearTerminal()
|
||||
{
|
||||
// .Clear removes all text except for the bottom row, so lets make sure we have a blank line, and cursor at start
|
||||
_terminal.Write("\r\n");
|
||||
_terminal.Clear();
|
||||
_terminal.ClearTerminal();
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cjopkm4osnp27"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ouskvcd0yaub" path="res://Features/Run/RunPanelTab.cs" id="1_dx3i6"]
|
||||
[ext_resource type="Theme" uid="uid://bswaamju2blyt" path="res://Features/TerminalBase/TerminalTheme.tres" id="2_6d1fj"]
|
||||
[ext_resource type="PackedScene" uid="uid://beo6fg8r0ogxc" path="res://Features/TerminalBase/SharpIdeTerminal.tscn" id="2_6d1fj"]
|
||||
|
||||
[node name="RunPanelTab" type="MarginContainer"]
|
||||
anchors_preset = 15
|
||||
@@ -11,7 +11,5 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_dx3i6")
|
||||
|
||||
[node name="Terminal" type="Terminal" parent="."]
|
||||
copy_on_selection = true
|
||||
[node name="SharpIdeTerminal" parent="." instance=ExtResource("2_6d1fj")]
|
||||
layout_mode = 2
|
||||
theme = ExtResource("2_6d1fj")
|
||||
|
||||
33
src/SharpIDE.Godot/Features/TerminalBase/SharpIdeTerminal.cs
Normal file
33
src/SharpIDE.Godot/Features/TerminalBase/SharpIdeTerminal.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using GDExtensionBindgen;
|
||||
using Godot;
|
||||
|
||||
namespace SharpIDE.Godot.Features.TerminalBase;
|
||||
|
||||
public partial class SharpIdeTerminal : Control
|
||||
{
|
||||
private Terminal _terminal = null!;
|
||||
public override void _Ready()
|
||||
{
|
||||
var terminalControl = GetNode<Control>("Terminal");
|
||||
_terminal = new Terminal(terminalControl);
|
||||
}
|
||||
|
||||
[RequiresGodotUiThread]
|
||||
public void Write(string text)
|
||||
{
|
||||
_terminal.Write(text);
|
||||
}
|
||||
|
||||
public async Task WriteAsync(byte[] text)
|
||||
{
|
||||
await this.InvokeAsync(() => _terminal.Write(text));
|
||||
}
|
||||
|
||||
[RequiresGodotUiThread]
|
||||
public void ClearTerminal()
|
||||
{
|
||||
// .Clear removes all text except for the bottom row, so lets make sure we have a blank line, and cursor at start
|
||||
_terminal.Write("\r\n");
|
||||
_terminal.Clear();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://7j2hyf2tvcdi
|
||||
@@ -0,0 +1,25 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://beo6fg8r0ogxc"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://7j2hyf2tvcdi" path="res://Features/TerminalBase/SharpIdeTerminal.cs" id="1_kpqy5"]
|
||||
[ext_resource type="Theme" uid="uid://bswaamju2blyt" path="res://Features/TerminalBase/TerminalTheme.tres" id="2_76y22"]
|
||||
|
||||
[node name="SharpIdeTerminal" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
script = ExtResource("1_kpqy5")
|
||||
|
||||
[node name="Terminal" type="Terminal" parent="."]
|
||||
copy_on_selection = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme = ExtResource("2_76y22")
|
||||
Reference in New Issue
Block a user