iFactory.Godot/Mods/工业数据采集与分析应用分享/Scripts/Builder/IDIS_RegisterWeaver.cs

107 lines
3.0 KiB
C#
Raw Normal View History

2023-07-17 04:10:14 +08:00
using Godot;
using System;
using System.Collections.Generic;
using BITKit;
namespace BITFactory;
[GlobalClass]
public partial class IDIS_RegisterWeaver : FormWeaverResource
{
[Export] private NodePath handleEditPath;
[Export] private NodePath generateButtonPath;
2023-07-18 20:57:02 +08:00
[Export] private NodePath addReferenceButtonPath;
[Export] private NodePath referenceEditBuilderPath;
[Export] private NodePath templateBuilderPath;
2023-07-17 04:10:14 +08:00
private LineEdit handleEdit=>formBuilder.GetNode<LineEdit>(handleEditPath);
private Button generateButton=>formBuilder.GetNode<Button>(generateButtonPath);
2023-07-18 20:57:02 +08:00
private Button addReferenceButton=>formBuilder.GetNode<Button>(addReferenceButtonPath);
private NodeBuilder referenceEditBuilder=>formBuilder.GetNode<NodeBuilder>(referenceEditBuilderPath);
private TemplateBuilder templateBuilder => formBuilder.GetNode<TemplateBuilder>(templateBuilderPath);
2023-07-17 04:10:14 +08:00
private readonly List<IDIS_Data> _values=new();
2023-07-18 20:57:02 +08:00
private readonly List<string> _references=new();
2023-07-17 04:10:14 +08:00
public override void Weaver(Control container, IFormField formField)
{
var field = (IDIS_TemplateForm)formField;
var data = new IDIS_Data();
var vBox = container.Create<HBoxContainer>();
var label = vBox.Create<Label>();
var typeLabel = vBox.Create<Label>();
var valueEdit = vBox.Create<LineEdit>();
var myIndex = _values.Count;
_values.Add(data);
2023-07-18 20:57:02 +08:00
2023-07-17 04:10:14 +08:00
label.SizeFlagsHorizontal = Control.SizeFlags.ExpandFill;
typeLabel.SizeFlagsHorizontal = Control.SizeFlags.ExpandFill;
valueEdit.SizeFlagsHorizontal = Control.SizeFlags.ExpandFill;
label.Text = field.Name;
typeLabel.Text = field.Type;
valueEdit.PlaceholderText = field.DefaultValue;
data.Category = field.Category;
data.Handle = handleEdit.Text;
data.Format = field.Type;
2023-07-18 20:57:02 +08:00
data.Name = field.Name;
data.Value = field.DefaultValue;
2023-07-17 04:10:14 +08:00
//valueEdit.TextChanged += x => data.Value = x;
valueEdit.TextChanged += newValue =>
{
data.Value = string.IsNullOrEmpty(newValue) ? field.DefaultValue : newValue;
};
2023-07-17 04:10:14 +08:00
}
public override string GetContent()
{
if (string.IsNullOrEmpty(handleEdit.Text))
{
throw new InvalidOperationException("[color=red]输入的标识码为空[/color]");
}
var value = new Dictionary<object, object>
{
{ "handle", handleEdit.Text },
{ "values",_values},
2023-07-18 20:57:02 +08:00
{ "references",_references},
{"createUser",templateBuilder.CurrentTemplate.Name}
2023-07-17 04:10:14 +08:00
};
var json = JsonHelper.Get(value);
return json;
}
public override void Clear()
{
_values.Clear();
2023-07-18 20:57:02 +08:00
_references.Clear();
2023-07-19 16:09:31 +08:00
referenceEditBuilder.Clear();
2023-07-17 04:10:14 +08:00
}
public override void OnStart()
{
generateButton.Pressed += () =>
{
handleEdit.Text = IDIS_Service.GenerateHandle();
};
2023-07-18 20:57:02 +08:00
addReferenceButton.Pressed += AddReference;
}
private void AddReference()
{
var container = referenceEditBuilder.Build<UXContainer>();
var myIndex = _references.Count;
_references.Add("");
container.lineEdit.Text = string.Empty;
container.label.Text = "引用标识码:";
container.lineEdit.PlaceholderText = "8.123.99/xxxxxxxx";
container.lineEdit.TextChanged += x => _references[myIndex] = x;
2023-07-17 04:10:14 +08:00
}
}