bug fixed

This commit is contained in:
CortexCore
2023-07-18 20:57:02 +08:00
parent 37f46e6d16
commit e7e80c982a
16 changed files with 323 additions and 134 deletions

View File

@@ -18,6 +18,8 @@ public partial class FormBuilder : Node
[Export] private Button submitButton;
[Export] private RichTextLabel logLabel;
public override void _Ready()
{
try

View File

@@ -1,5 +1,7 @@
using Godot;
using System;
using System.Collections.Generic;
// ReSharper disable MemberCanBePrivate.Global
namespace BITKit;
@@ -12,6 +14,10 @@ public partial class NodeBuilder : Node
[Export] private Control emptyHints;
[ExportCategory("Template")]
[Export] private PackedScene template;
public Node[] Instances => _instances.ToArray();
private readonly List<Node> _instances = new List<Node>();
public override void _Ready()
{
if (clearOnStart)
@@ -45,11 +51,14 @@ public partial class NodeBuilder : Node
}
emptyHints?.Hide();;
_instances.Add(instance);
return instance as T;
}
public void Clear()
{
_instances.Clear();
emptyHints?.Show();
if (clearTemplateOnly)
{

View File

@@ -12,8 +12,15 @@ public partial class ScriptableTemplate : TemplateResource
public override string[] GetTemplateNames() => templates.Select(x => x.Name).ToArray();
public override FormResource GetTemplate(string name) => templates.Single(x => x.Name == name);
public override bool IsSupportCreateTemplate => true;
public override void CreateTemplate()
public override FormResource CreateTemplate()
{
templates.Add(new ExampleFormResource("New Template" + DateTime.Now));
var @new = new ExampleFormResource("New Template" + DateTime.Now);
templates.Add(@new);
return @new;
}
public override void DeleteTemplate(string name)
{
throw new NotImplementedException();
}
}

View File

@@ -1,33 +1,44 @@
using Godot;
using System;
using System.Collections.Generic;
using System.Linq;
// ReSharper disable MemberCanBePrivate.Global
namespace BITKit;
public partial class TemplateBuilder : Node
{
[Export] public TemplateResource template;
[ExportCategory("Index")]
[Export] private NodeBuilder indexBuilder;
[ExportCategory("Weaver")]
[Export] private FormBuilder formBuilder;
[ExportCategory("UI 绑定")] [Export]
private Button createTemplateButton;
[ExportCategory("UI 绑定")]
[Export] private Button createTemplateButton;
[Export] private Control templateBody;
public FormResource CurrentTemplate { get; private set; }
private ButtonGroup _buttonGroup;
private readonly Dictionary<string, Button> indexDictionary = new();
public override void _Ready()
{
_buttonGroup = new ButtonGroup();
if (template.IsSupportCreateTemplate && createTemplateButton is not null)
{
createTemplateButton.Pressed += template.CreateTemplate;
createTemplateButton.Pressed += Rebuild;
createTemplateButton.Pressed += () =>
{
CurrentTemplate = template.CreateTemplate();
Rebuild();
};
}
Rebuild();
}
@@ -44,23 +55,47 @@ public partial class TemplateBuilder : Node
public void Rebuild()
{
indexBuilder.Clear();
templateBody.Hide();
if (CurrentTemplate is not null && template.GetTemplateNames().Any(x => x == CurrentTemplate.Name))
{
}
else
{
CurrentTemplate = null;
}
foreach (var name in template.GetTemplateNames())
{
var container = indexBuilder.Build<UXContainer>();
var _template = this.template.GetTemplate(name);
var guid = Guid.NewGuid().ToString();
container.button.Text = name;
container.button.ButtonGroup = _buttonGroup;
container.button.ToggleMode = true;
container.button.ToggleMode = true;
container.button.Pressed += () =>
{
CurrentTemplate = _template;
formBuilder.Build(_template);
Entry(_template);
};
_template.SetMeta("RuntimeId",guid);
indexDictionary.Add(guid,container.button);
}
if(CurrentTemplate is not null)
formBuilder.Build(CurrentTemplate);
if (CurrentTemplate is null) return;
Entry(CurrentTemplate);
if(indexDictionary.TryGetValue(CurrentTemplate.GetMeta("RuntimeId").AsString(),out var _currentButton))
_currentButton.ButtonPressed = true;
}
public void Entry(FormResource _template)
{
CurrentTemplate = _template;
formBuilder.Build(_template);
templateBody.Show();
}
}

View File

@@ -10,7 +10,8 @@ public abstract partial class TemplateResource : Resource, IStart, IStop
public abstract string[] GetTemplateNames();
public abstract FormResource GetTemplate(string name);
public abstract bool IsSupportCreateTemplate { get; }
public abstract void CreateTemplate();
public abstract FormResource CreateTemplate();
public abstract void DeleteTemplate(string name);
public virtual void OnStart(){}
public virtual void OnStop(){}
public virtual void ManualSave(){}