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

156 lines
4.0 KiB
C#

using Godot;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using BITKit;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
namespace BITFactory;
public partial class IDIS_RegisterService : Node
{
[ExportCategory("Services")]
[Export] private IDIS_Service service;
[Export] private IDIS_TemplateService templateService;
[ExportCategory("UI 绑定")]
[Export] private NodeBuilder templateIndexBuilder;
[Export] private LineEdit handleEdit;
[Export] private Button generateHandleButton;
[Export] private NodeBuilder templateFormatBuilder;
[Export] private Button registerButton;
[Export] private ProgressBar registerProgress;
[ExportCategory("Register Reference")]
[Export] private Control referenceContainer;
[Export] private Button addReferenceButton;
[ExportCategory("Hints")]
[Export] private Label hints;
private readonly List<(string format,string value,string category)> _currentValues = new();
private readonly List<string> _currentReferences = new();
public override void _Ready()
{
registerButton.Pressed += Register;
generateHandleButton.Pressed += ()=>handleEdit.Text = IDIS_Service.GenerateHandle();
addReferenceButton.Pressed += AddReferenceEdit;
handleEdit.Editable = false;
registerButton.Disabled = true;
Rebuild();
}
private void Rebuild()
{
if (Engine.IsEditorHint()) return;
templateIndexBuilder.Clear();
templateFormatBuilder.Clear();
foreach (var x in templateService.templates)
{
var container = templateIndexBuilder.Build<UXContainer>();
container.button.Text = x.TemplateName;
container.button.Pressed += () =>
{
Entry(x);
};
}
}
private void Entry(IDIS_Template template)
{
_currentValues.Clear();
templateFormatBuilder.Clear();
var currentIndex = 0;
foreach (var x in template.Formats)
{
var myIndex = currentIndex++;
_currentValues.Add((x.format, string.Empty, x.category));
var formatContainer = templateFormatBuilder.Build<UXContainer>();
formatContainer.labels[0].Text = x.format;
formatContainer.lineEdits[0].PlaceholderText = x.hint;
formatContainer.lineEdits[0].TextChanged += s =>
{
var value = _currentValues[myIndex];
value.value = s;
_currentValues[myIndex] = value;
};
}
handleEdit.Editable = true;
registerButton.Disabled = false;
}
private void AddReferenceEdit()
{
var lineEdit = new LineEdit();
var currentIndex = referenceContainer.GetChildCount();
_currentReferences.Add(string.Empty);
lineEdit.TextChanged += s =>
{
_currentReferences[currentIndex] = s;
};
lineEdit.Text = "88.123.99/";
referenceContainer.AddChild(lineEdit);
}
private void Register()
{
if (_currentValues.Any(x =>
string.IsNullOrEmpty(x.format) || string.IsNullOrEmpty(x.value) || string.IsNullOrEmpty(x.category)))
{
hints.SetTextAsync("请填写完整的数据格式");
return;
}
var handle = string.IsNullOrEmpty(handleEdit.Text) ? IDIS_Service.GenerateHandle() : handleEdit.Text;
var dataJson = JsonHelper.Get(_currentValues);
var referenceJson = JsonHelper.Get(_currentReferences);
BIT4Log.Log<IDIS_RegisterService>($"注册标识:{handle}");
BIT4Log.Log<IDIS_RegisterService>($"\n{dataJson}");
BIT4Log.Log<IDIS_RegisterService>("注册引用:");
BIT4Log.Log<IDIS_RegisterService>($"\n{referenceJson}");
hints.Text="正在注册...";
service.Register(handle);
foreach (var x in _currentValues)
{
service.Register(handle, x.format, x.value,x.category);
}
foreach (var x in _currentReferences)
{
service.RegisterReference(handle, x);
}
var tween = CreateTween();
registerButton.Disabled = true;
registerProgress.Value = 0;
tween.TweenProperty(registerProgress, "value", registerProgress.MaxValue, 0.5f);
tween.Finished+= () =>
{
registerProgress.Value = 0;
registerProgress.Visible = false;
registerButton.Disabled = false;
hints.Text = "注册成功";
tween.Stop();
};
tween.Play();
handleEdit.Text = string.Empty;
}
}