refactor terminal usage to scene
This commit is contained in:
@@ -2,18 +2,19 @@ using System.Threading.Channels;
|
|||||||
using GDExtensionBindgen;
|
using GDExtensionBindgen;
|
||||||
using Godot;
|
using Godot;
|
||||||
using SharpIDE.Application.Features.Build;
|
using SharpIDE.Application.Features.Build;
|
||||||
|
using SharpIDE.Godot.Features.TerminalBase;
|
||||||
|
|
||||||
namespace SharpIDE.Godot.Features.Build;
|
namespace SharpIDE.Godot.Features.Build;
|
||||||
|
|
||||||
public partial class BuildPanel : Control
|
public partial class BuildPanel : Control
|
||||||
{
|
{
|
||||||
private Terminal _terminal = null!;
|
private SharpIdeTerminal _terminal = null!;
|
||||||
private ChannelReader<string>? _buildOutputChannelReader;
|
private ChannelReader<string>? _buildOutputChannelReader;
|
||||||
|
|
||||||
[Inject] private readonly BuildService _buildService = null!;
|
[Inject] private readonly BuildService _buildService = null!;
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
_terminal = new Terminal(GetNode<Control>("%Terminal"));
|
_terminal = GetNode<SharpIdeTerminal>("%SharpIdeTerminal");
|
||||||
_buildService.BuildStarted.Subscribe(OnBuildStarted);
|
_buildService.BuildStarted.Subscribe(OnBuildStarted);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,7 +30,7 @@ public partial class BuildPanel : Control
|
|||||||
|
|
||||||
private async Task OnBuildStarted(BuildStartedFlags _)
|
private async Task OnBuildStarted(BuildStartedFlags _)
|
||||||
{
|
{
|
||||||
await this.InvokeAsync(() => _terminal.Clear());
|
await this.InvokeAsync(() => _terminal.ClearTerminal());
|
||||||
_buildOutputChannelReader ??= _buildService.BuildTextWriter.ConsoleChannel.Reader;
|
_buildOutputChannelReader ??= _buildService.BuildTextWriter.ConsoleChannel.Reader;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://co6dkhdolriej"]
|
[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="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"]
|
[node name="BuildPanel" type="Control"]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
@@ -36,13 +36,6 @@ text = "Build"
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_vertical = 3
|
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
|
unique_name_in_owner = true
|
||||||
layout_mode = 1
|
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 Godot;
|
||||||
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
|
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
|
||||||
using SharpIDE.Godot.Features.Debug_.Tab.SubTabs;
|
using SharpIDE.Godot.Features.Debug_.Tab.SubTabs;
|
||||||
|
using SharpIDE.Godot.Features.TerminalBase;
|
||||||
|
|
||||||
namespace SharpIDE.Godot.Features.Debug_.Tab;
|
namespace SharpIDE.Godot.Features.Debug_.Tab;
|
||||||
|
|
||||||
public partial class DebugPanelTab : Control
|
public partial class DebugPanelTab : Control
|
||||||
{
|
{
|
||||||
private Terminal _terminal = null!;
|
private SharpIdeTerminal _terminal = null!;
|
||||||
private ThreadsVariablesSubTab _threadsVariablesSubTab = null!;
|
private ThreadsVariablesSubTab _threadsVariablesSubTab = null!;
|
||||||
private Task _writeTask = Task.CompletedTask;
|
private Task _writeTask = Task.CompletedTask;
|
||||||
|
|
||||||
@@ -22,8 +23,7 @@ public partial class DebugPanelTab : Control
|
|||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
var terminalControl = GetNode<Control>("%Terminal");
|
_terminal = GetNode<SharpIdeTerminal>("%SharpIdeTerminal");
|
||||||
_terminal = new Terminal(terminalControl);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StartWritingFromProjectOutput()
|
public void StartWritingFromProjectOutput()
|
||||||
@@ -37,13 +37,13 @@ public partial class DebugPanelTab : Control
|
|||||||
{
|
{
|
||||||
await foreach (var array in Project.RunningOutputChannel!.Reader.ReadAllAsync().ConfigureAwait(false))
|
await foreach (var array in Project.RunningOutputChannel!.Reader.ReadAllAsync().ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
await this.InvokeAsync(() => _terminal.Write(array));
|
await _terminal.WriteAsync(array);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearTerminal()
|
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="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="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"]
|
[node name="DebugPanelTab" type="Control"]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
@@ -35,13 +35,6 @@ visible = false
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
metadata/_tab_index = 1
|
metadata/_tab_index = 1
|
||||||
|
|
||||||
[node name="Terminal" type="Terminal" parent="TabContainer/Console"]
|
[node name="SharpIdeTerminal" parent="TabContainer/Console" instance=ExtResource("4_utxf4")]
|
||||||
copy_on_selection = true
|
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
layout_mode = 1
|
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 Godot;
|
||||||
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
|
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
|
||||||
|
using SharpIDE.Godot.Features.TerminalBase;
|
||||||
|
|
||||||
namespace SharpIDE.Godot.Features.Run;
|
namespace SharpIDE.Godot.Features.Run;
|
||||||
|
|
||||||
public partial class RunPanelTab : Control
|
public partial class RunPanelTab : Control
|
||||||
{
|
{
|
||||||
private Terminal _terminal = null!;
|
private SharpIdeTerminal _terminal = null!;
|
||||||
private Task _writeTask = Task.CompletedTask;
|
private Task _writeTask = Task.CompletedTask;
|
||||||
|
|
||||||
public SharpIdeProjectModel Project { get; set; } = null!;
|
public SharpIdeProjectModel Project { get; set; } = null!;
|
||||||
@@ -14,8 +14,7 @@ public partial class RunPanelTab : Control
|
|||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
var terminalControl = GetNode<Control>("Terminal");
|
_terminal = GetNode<SharpIdeTerminal>("SharpIdeTerminal");
|
||||||
_terminal = new Terminal(terminalControl);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StartWritingFromProjectOutput()
|
public void StartWritingFromProjectOutput()
|
||||||
@@ -29,15 +28,13 @@ public partial class RunPanelTab : Control
|
|||||||
{
|
{
|
||||||
await foreach (var array in Project.RunningOutputChannel!.Reader.ReadAllAsync().ConfigureAwait(false))
|
await foreach (var array in Project.RunningOutputChannel!.Reader.ReadAllAsync().ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
await this.InvokeAsync(() => _terminal.Write(array));
|
await _terminal.WriteAsync(array);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearTerminal()
|
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.ClearTerminal();
|
||||||
_terminal.Write("\r\n");
|
|
||||||
_terminal.Clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://cjopkm4osnp27"]
|
[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="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"]
|
[node name="RunPanelTab" type="MarginContainer"]
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
@@ -11,7 +11,5 @@ grow_horizontal = 2
|
|||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = ExtResource("1_dx3i6")
|
script = ExtResource("1_dx3i6")
|
||||||
|
|
||||||
[node name="Terminal" type="Terminal" parent="."]
|
[node name="SharpIdeTerminal" parent="." instance=ExtResource("2_6d1fj")]
|
||||||
copy_on_selection = true
|
|
||||||
layout_mode = 2
|
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