diff --git a/.gitignore b/.gitignore
index 1084d09..acf0eb1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
.godot/
.idea/
+*.DotSettings.user
diff --git a/Library/UI/LabelLineEdit.cs b/Library/UI/LabelLineEdit.cs
index 54d354f..c14e574 100644
--- a/Library/UI/LabelLineEdit.cs
+++ b/Library/UI/LabelLineEdit.cs
@@ -1,23 +1,45 @@
using Godot;
using System;
-[GlobalClass]
+[GlobalClass, Tool]
public partial class LabelLineEdit : HBoxContainer
{
- #region Exports
- #endregion
-
- #region Nodes
+ [Export, Notify] public partial string Label { get; set; }
+ [Export, Notify] public partial string Text { get; set; }
+ [Export, Notify] public partial int Spacing { get; set; }
+ [Export, Notify] public partial bool Password { get; set; }
+
private Label _labelNode;
private LineEdit _lineEdit;
- #endregion
public LabelLineEdit()
{
- _labelNode = new Label();
- _lineEdit = new LineEdit();
+ Spacing = 4;
+ }
+
+ [GodotOverride]
+ private void OnReady()
+ {
+ _labelNode ??= new Label();
+ _lineEdit ??= new LineEdit();
_lineEdit.SizeFlagsHorizontal = SizeFlags.ExpandFill;
AddChild(_labelNode);
AddChild(_lineEdit);
+ _labelNode.Text = Label;
+ _lineEdit.Text = Text;
+ _lineEdit.Secret = Password;
+ LabelChanged += () => _labelNode.Text = Label;
+ TextChanged += () => _lineEdit.Text = Text;
+ PasswordChanged += () => _lineEdit.Secret = Password;
+ SpacingChanged += () => AddThemeConstantOverride("separation", Spacing);
+ _lineEdit.TextChanged += async value =>
+ {
+ var pos = _lineEdit.GetCaretColumn();
+ Text = value;
+ await ToSignal(GetTree(), SceneTree.SignalName.ProcessFrame);
+ _lineEdit.SetCaretColumn(pos);
+ };
}
+
+ public override partial void _Ready();
}
diff --git a/MediaPortal.csproj b/MediaPortal.csproj
index 06efe92..eee961c 100644
--- a/MediaPortal.csproj
+++ b/MediaPortal.csproj
@@ -3,11 +3,12 @@
net8.0
net9.0
true
+ 13
-
+
-
\ No newline at end of file
+
diff --git a/TestingInterface.cs b/TestingInterface.cs
index a9336c9..4dc3aae 100644
--- a/TestingInterface.cs
+++ b/TestingInterface.cs
@@ -1,5 +1,13 @@
using Godot;
+[SceneTree(root: "Nodes")]
public partial class TestingInterface : Control
{
+ [GodotOverride]
+ void OnReady()
+ {
+ GD.Print("TestingInterface::OnReady");
+ }
+
+ public override partial void _Ready();
}
diff --git a/TestingInterface.tscn b/TestingInterface.tscn
new file mode 100644
index 0000000..f1c0e77
--- /dev/null
+++ b/TestingInterface.tscn
@@ -0,0 +1,49 @@
+[gd_scene load_steps=3 format=3 uid="uid://b6v8kn5pjdd1b"]
+
+[ext_resource type="Script" uid="uid://demxhjphd8gkg" path="res://TestingInterface.cs" id="1_1mh2b"]
+[ext_resource type="Script" uid="uid://c3juujxln4m38" path="res://Library/UI/LabelLineEdit.cs" id="2_a7i77"]
+
+[node name="TestingInterface" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_1mh2b")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="ServerUrl" type="HBoxContainer" parent="VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_constants/separation = 10
+script = ExtResource("2_a7i77")
+Label = "Server URL:"
+Spacing = 10
+metadata/_custom_type_script = "uid://c3juujxln4m38"
+
+[node name="Username" type="HBoxContainer" parent="VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_constants/separation = 14
+script = ExtResource("2_a7i77")
+Label = "Username:"
+Spacing = 14
+metadata/_custom_type_script = "uid://c3juujxln4m38"
+
+[node name="Password" type="HBoxContainer" parent="VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_constants/separation = 20
+script = ExtResource("2_a7i77")
+Label = "Password:"
+Spacing = 20
+Password = true
+metadata/_custom_type_script = "uid://c3juujxln4m38"
diff --git a/project.godot b/project.godot
index a77dfee..c51218f 100644
--- a/project.godot
+++ b/project.godot
@@ -12,7 +12,8 @@ config_version=5
config/name="MediaPortal"
config/description="Enter an interesting project description here!"
-config/features=PackedStringArray("4.5")
+run/main_scene="uid://b6v8kn5pjdd1b"
+config/features=PackedStringArray("4.5", "C#")
config/icon="res://icon.png"
[dotnet]