1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
using System;
using Godot;
namespace Texty.Scripts
{
public abstract class OutputRow : VBoxContainer
{
[Signal]
public delegate void InputTextChanged(string newText);
[Signal]
public delegate void OutputTextChanged(string newText);
public Label Input;
public Label Output;
private string _inputText = "";
private string _outputText = "";
[Export]
public string InputText
{
get => _inputText;
set => UpdateText(Field.Input, value ?? "");
}
[Export]
public string OutputText
{
get => _outputText;
set => UpdateText(Field.Output, value ?? "");
}
public override void _Ready()
{
Input = GetNode<Label>(nameof(Input));
UpdateLabel(Input, _inputText);
Output = GetNode<Label>(nameof(Output));
UpdateLabel(Output, _outputText);
}
private void UpdateText(Field field, string value)
{
switch (field)
{
case Field.Input:
_inputText = value;
EmitSignal(nameof(InputTextChanged), _inputText);
UpdateLabel(Input, value);
break;
case Field.Output:
_outputText = value;
EmitSignal(nameof(OutputTextChanged), value);
UpdateLabel(Output, value);
break;
default:
throw new ArgumentOutOfRangeException(nameof(field), field, "No such field!");
}
}
private static void UpdateLabel(Label label, string value)
{
if (label != null) label.Text = value;
}
private enum Field
{
Input,
Output
}
}
}
|