iFactory.Godot/BITKit/Scripts/Builder/Form/FormBuilder.cs

78 lines
1.4 KiB
C#
Raw Normal View History

2023-07-17 04:10:14 +08:00
using Godot;
using System;
using System.Collections.Generic;
using System.Net.Http;
// ReSharper disable MemberCanBePrivate.Global
namespace BITKit;
public partial class FormBuilder : Node
{
[ExportCategory(Constant.Header.Providers)] [Export]
private FormWeaverResource formWeaver;
[Export] private FormDBProvider formDBProvider;
[ExportCategory("UI 绑定")] [Export] private NodeBuilder nodeBuilder;
[Export] private Button submitButton;
[Export] private RichTextLabel logLabel;
2023-07-18 20:57:02 +08:00
2023-07-17 04:10:14 +08:00
public override void _Ready()
{
try
{
nodeBuilder.Clear();
if (submitButton is not null && formDBProvider is not null)
submitButton.Pressed += Submit;
}
catch (Exception)
{
GD.PushWarning(GetPath());
throw;
}
}
public override void _EnterTree()
{
formWeaver.formBuilder = this;
formWeaver.OnStart();
}
public override void _ExitTree()
{
formWeaver.OnStop();
}
public void Build(FormResource formProvider)
{
nodeBuilder.Clear();
formWeaver.Clear();
foreach (var formField in formProvider.Fields)
{
var container = nodeBuilder.Build<Control>();
formWeaver.Weaver(container, formField);
}
}
private void Submit()
{
try
{
var data = formWeaver.GetContent();
formDBProvider.Submit(data);
logLabel.Text = "提交成功:" + DateTime.Now;
}
catch (Exception e)
{
logLabel.Text = e.Message + DateTime.Now;
}
}
}