diff --git a/Artists/Templates/LineEditTemplate_Lite.tscn b/Artists/Templates/LineEditTemplate_Lite.tscn new file mode 100644 index 0000000..37b3eed --- /dev/null +++ b/Artists/Templates/LineEditTemplate_Lite.tscn @@ -0,0 +1,30 @@ +[gd_scene load_steps=2 format=3 uid="uid://w41eggledyvq"] + +[ext_resource type="Script" path="res://BITKit/Scripts/UX/UXContainer.cs" id="1_0gyse"] + +[node name="LineEditTemplate_Lite" type="PanelContainer" node_paths=PackedStringArray("label", "labels", "buttons", "lineEdit", "lineEdits", "optionButtons")] +script = ExtResource("1_0gyse") +label = NodePath("") +labels = [] +buttons = [] +lineEdit = NodePath("") +lineEdits = [] +optionButtons = [] + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 2 +theme_override_constants/margin_left = 16 +theme_override_constants/margin_top = 16 +theme_override_constants/margin_right = 16 +theme_override_constants/margin_bottom = 16 + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="MarginContainer/HBoxContainer"] +layout_mode = 2 +text = "Label" + +[node name="LineEdit" type="LineEdit" parent="MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 diff --git a/BITKit/Scripts/Builder/Form/FormBuilder.cs b/BITKit/Scripts/Builder/Form/FormBuilder.cs index ac37728..2bf8451 100644 --- a/BITKit/Scripts/Builder/Form/FormBuilder.cs +++ b/BITKit/Scripts/Builder/Form/FormBuilder.cs @@ -18,6 +18,8 @@ public partial class FormBuilder : Node [Export] private Button submitButton; [Export] private RichTextLabel logLabel; + + public override void _Ready() { try diff --git a/BITKit/Scripts/Builder/NodeBuilder.cs b/BITKit/Scripts/Builder/NodeBuilder.cs index 84b04ff..7914ef9 100644 --- a/BITKit/Scripts/Builder/NodeBuilder.cs +++ b/BITKit/Scripts/Builder/NodeBuilder.cs @@ -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 _instances = new List(); + 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) { diff --git a/BITKit/Scripts/Builder/TemplateBuilder/Examples/ScriptableTemplate.cs b/BITKit/Scripts/Builder/TemplateBuilder/Examples/ScriptableTemplate.cs index 2b4c0c1..524221e 100644 --- a/BITKit/Scripts/Builder/TemplateBuilder/Examples/ScriptableTemplate.cs +++ b/BITKit/Scripts/Builder/TemplateBuilder/Examples/ScriptableTemplate.cs @@ -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(); } } diff --git a/BITKit/Scripts/Builder/TemplateBuilder/TemplateBuilder.cs b/BITKit/Scripts/Builder/TemplateBuilder/TemplateBuilder.cs index 326c4d1..505a79b 100644 --- a/BITKit/Scripts/Builder/TemplateBuilder/TemplateBuilder.cs +++ b/BITKit/Scripts/Builder/TemplateBuilder/TemplateBuilder.cs @@ -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 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(); 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(); } } diff --git a/BITKit/Scripts/Builder/TemplateBuilder/TemplateResource.cs b/BITKit/Scripts/Builder/TemplateBuilder/TemplateResource.cs index dfa2680..13472a2 100644 --- a/BITKit/Scripts/Builder/TemplateBuilder/TemplateResource.cs +++ b/BITKit/Scripts/Builder/TemplateBuilder/TemplateResource.cs @@ -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(){} diff --git a/Mods/工业数据采集与分析应用分享/Scripts/Builder/IDIS_RegisterDB.cs b/Mods/工业数据采集与分析应用分享/Scripts/Builder/IDIS_RegisterDB.cs index aab9db1..a628c5e 100644 --- a/Mods/工业数据采集与分析应用分享/Scripts/Builder/IDIS_RegisterDB.cs +++ b/Mods/工业数据采集与分析应用分享/Scripts/Builder/IDIS_RegisterDB.cs @@ -14,10 +14,18 @@ public partial class IDIS_RegisterDB : FormDBProvider var jObject = JsonConvert.DeserializeObject(data); var handle = jObject["handle"]!.ToObject(); var values = jObject["values"]!.ToObject>(); + var references = jObject["references"]!.ToObject>(); + var createUser = jObject["createUser"]!.ToObject(); + IDIS_Service.Singleton.Register(handle, createUser); foreach (var x in values) { IDIS_Service.Singleton.Register(handle,x.Name, x.Format, x.Value,x.Category); } + + foreach (var x in references) + { + IDIS_Service.Singleton.RegisterReference(handle,x); + } } } diff --git a/Mods/工业数据采集与分析应用分享/Scripts/Builder/IDIS_RegisterWeaver.cs b/Mods/工业数据采集与分析应用分享/Scripts/Builder/IDIS_RegisterWeaver.cs index fee5ad5..a90e53f 100644 --- a/Mods/工业数据采集与分析应用分享/Scripts/Builder/IDIS_RegisterWeaver.cs +++ b/Mods/工业数据采集与分析应用分享/Scripts/Builder/IDIS_RegisterWeaver.cs @@ -9,11 +9,18 @@ public partial class IDIS_RegisterWeaver : FormWeaverResource { [Export] private NodePath handleEditPath; [Export] private NodePath generateButtonPath; + [Export] private NodePath addReferenceButtonPath; + [Export] private NodePath referenceEditBuilderPath; + [Export] private NodePath templateBuilderPath; private LineEdit handleEdit=>formBuilder.GetNode(handleEditPath); private Button generateButton=>formBuilder.GetNode