release
This commit is contained in:
223
Mods/工业数据采集与分析应用分享/Scripts/IDIS_TemplateBuilder.cs
Normal file
223
Mods/工业数据采集与分析应用分享/Scripts/IDIS_TemplateBuilder.cs
Normal file
@@ -0,0 +1,223 @@
|
||||
using Godot;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using BITKit;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using IDIS.Models;
|
||||
using IDIS.Services;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using SQLitePCL;
|
||||
|
||||
// ReSharper disable UnusedMember.Local
|
||||
|
||||
namespace IDIS;
|
||||
public partial class IDIS_TemplateBuilder : EntityComponent
|
||||
{
|
||||
private enum TemplateFieldFormatType
|
||||
{
|
||||
String=0,
|
||||
Int=1,
|
||||
Float=2,
|
||||
DateTime=3,
|
||||
Guid=4,
|
||||
}
|
||||
private class IDIS_TemplateItem
|
||||
{
|
||||
public readonly LineEdit NameEdit;
|
||||
public readonly OptionButton TypeButton;
|
||||
public readonly Button RemoveButton;
|
||||
public IDIS_TemplateItem(LineEdit nameEdit, OptionButton typeButton, Button removeButton)
|
||||
{
|
||||
NameEdit = nameEdit;
|
||||
TypeButton = typeButton;
|
||||
RemoveButton = removeButton;
|
||||
}
|
||||
}
|
||||
|
||||
[Export] private UXContainer prefixEdit;
|
||||
[Export] private UXContainer versionEdit;
|
||||
[Export] private UXContainer descriptionEdit;
|
||||
[Export] private Button createButton;
|
||||
[Export] private Button createEmptyButton;
|
||||
[Export] private Button addItemButton;
|
||||
[Export] private Button deleteButton;
|
||||
[Export] private Label logLabel;
|
||||
|
||||
[ExportCategory("Builder ")]
|
||||
[Export] private NodeBuilder headerBuilder;
|
||||
[Export] private NodeBuilder contentBuilder;
|
||||
|
||||
private IDIS_TemplateService _templateService;
|
||||
private ButtonGroup _buttonGroup;
|
||||
private readonly List<IDIS_TemplateItem> _items = new();
|
||||
|
||||
private IDIS_Template _currentTemplate;
|
||||
|
||||
public override async void OnStart()
|
||||
{
|
||||
_buttonGroup = new ButtonGroup();
|
||||
_templateService = Entity.ServiceProvider.GetRequiredService<IDIS_TemplateService>();
|
||||
|
||||
createEmptyButton.Pressed += Clear;
|
||||
addItemButton.Pressed += ()=>CreateField();
|
||||
createButton.Pressed += CreateTemplate;
|
||||
deleteButton.Pressed += Delete;
|
||||
|
||||
_templateService.OnTemplateCreated +=x=> CreateHeader(x);
|
||||
_templateService.OnTemplateDeleted += OnTemplateDeleted;
|
||||
|
||||
await BITApp.SwitchToMainThread();
|
||||
|
||||
RebuildHeader();
|
||||
}
|
||||
|
||||
private void Clear()
|
||||
{
|
||||
contentBuilder.Clear();
|
||||
_items.Clear();
|
||||
prefixEdit.lineEdits[0].Text = string.Empty;
|
||||
versionEdit.lineEdits[0].Text = string.Empty;
|
||||
descriptionEdit.lineEdits[0].Text = string.Empty;
|
||||
}
|
||||
private void Entry(IDIS_Template template)
|
||||
{
|
||||
Clear();
|
||||
foreach (var x in template.Items)
|
||||
{
|
||||
var field = CreateField();
|
||||
field.NameEdit.Text = x.Name;
|
||||
field.TypeButton.Selected = (int)Enum.Parse<TemplateFieldFormatType>(x.IdType);
|
||||
}
|
||||
prefixEdit.lineEdits[0].Text = template.Prefix;
|
||||
versionEdit.lineEdits[0].Text = template.Version;
|
||||
descriptionEdit.lineEdits[0].Text = template.Description;
|
||||
|
||||
_currentTemplate = template;
|
||||
}
|
||||
private async void CreateTemplate()
|
||||
{
|
||||
var template = new IDIS_Template
|
||||
{
|
||||
Prefix = prefixEdit.lineEdits[0].Text,
|
||||
Version = versionEdit.lineEdits[0].Text,
|
||||
Description = descriptionEdit.lineEdits[0].Text,
|
||||
Items = _items.Select(x => new IDIS_Template_Item(x.NameEdit.Text, x.TypeButton.GetItemText(x.TypeButton.Selected))).ToArray()
|
||||
};
|
||||
if (string.IsNullOrEmpty(template.Prefix))
|
||||
{
|
||||
logLabel.Text = "前缀不能为空";
|
||||
return;
|
||||
}
|
||||
if(string.IsNullOrEmpty(template.Version))
|
||||
{
|
||||
logLabel.Text = "版本号不能为空";
|
||||
return;
|
||||
}
|
||||
if(_items.Count is 0)
|
||||
{
|
||||
logLabel.Text = "模板项不能为空";
|
||||
return;
|
||||
}
|
||||
if(_items.Any(x=>string.IsNullOrEmpty(x.NameEdit.Text) || x.TypeButton.Selected < 0))
|
||||
{
|
||||
logLabel.Text = "模板项不能为空";
|
||||
return;
|
||||
}
|
||||
|
||||
if (Regex.IsMatch(template.Prefix, IDIS_Code.Prefix) is false)
|
||||
{
|
||||
logLabel.Text = $"前缀格式不正确,${template.Prefix} is not match {IDIS_Code.Prefix},use 88.123.99 instead";
|
||||
return;
|
||||
}
|
||||
createButton.Disabled = true;
|
||||
logLabel.Text = "正在等待 模板服务 响应...";
|
||||
var response = await _templateService.SaveAsync(template);
|
||||
logLabel.Text = "正在等待 回到主线程...";
|
||||
await UniTask.SwitchToSynchronizationContext(BITApp.SynchronizationContext);
|
||||
logLabel.Text = response.Message;
|
||||
createButton.Disabled = false;
|
||||
|
||||
_currentTemplate = template;
|
||||
}
|
||||
private UXContainer CreateHeader(IDIS_Template template)
|
||||
{
|
||||
var container = headerBuilder.Build<UXContainer>();
|
||||
container.buttons[0].ButtonGroup = _buttonGroup;
|
||||
container.buttons[0].Text = $"{template.Prefix} {template.Version}";
|
||||
container.buttons[0].Pressed += () => Entry(template);
|
||||
return container;
|
||||
}
|
||||
private IDIS_TemplateItem CreateField()
|
||||
{
|
||||
var container = contentBuilder.Build<PanelContainer>().Create<MarginContainer>().Create<HBoxContainer>();
|
||||
|
||||
var field = new IDIS_TemplateItem(container.Create<LineEdit>(), container.Create<OptionButton>(),container.Create<Button>())
|
||||
{
|
||||
NameEdit =
|
||||
{
|
||||
PlaceholderText = "值名称",
|
||||
SizeFlagsHorizontal = Control.SizeFlags.ExpandFill
|
||||
},
|
||||
TypeButton =
|
||||
{
|
||||
Selected = 0,
|
||||
SizeFlagsHorizontal = Control.SizeFlags.ExpandFill
|
||||
}
|
||||
,
|
||||
RemoveButton =
|
||||
{
|
||||
Text = "移除",
|
||||
SizeFlagsHorizontal = Control.SizeFlags.ExpandFill
|
||||
}
|
||||
};
|
||||
|
||||
_items.Add(field);
|
||||
|
||||
var index = 0;
|
||||
foreach (var name in Enum.GetNames<TemplateFieldFormatType>())
|
||||
{
|
||||
field.TypeButton.AddItem(name, index++);
|
||||
}
|
||||
|
||||
field.RemoveButton.Pressed += () =>
|
||||
{
|
||||
_items.Remove(field);
|
||||
container.GetParent().QueueFree();
|
||||
};
|
||||
return field;
|
||||
}
|
||||
|
||||
private void OnTemplateDeleted(IDIS_Template template)
|
||||
{
|
||||
_currentTemplate = null;
|
||||
Clear();
|
||||
RebuildHeader();
|
||||
}
|
||||
private async void Delete()
|
||||
{
|
||||
if (_currentTemplate is null)
|
||||
{
|
||||
logLabel.Text = "当前没有选中的模板";
|
||||
return;
|
||||
}
|
||||
var response = await _templateService.DeleteAsync(_currentTemplate.Prefix, _currentTemplate.Version);
|
||||
logLabel.Text = response.Message;
|
||||
}
|
||||
|
||||
private async void RebuildHeader()
|
||||
{
|
||||
var request = await _templateService.ToArrayAsync();
|
||||
|
||||
if (request.TryAs<IDIS_Template[]>(out var templates) is false) return;
|
||||
|
||||
headerBuilder.Clear();
|
||||
|
||||
foreach (var template in templates)
|
||||
{
|
||||
CreateHeader(template);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user