From c3d826991c1ec408af2ba81e8b8e4b890a0cafc4 Mon Sep 17 00:00:00 2001 From: limil Date: Fri, 19 Dec 2025 22:28:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B9=E7=9B=AE=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MainTreePanel.cs | 83 +++------- .../MainTreePanel.cs.uid | 0 {Inspector => Component}/NodeInfoEditPanel.cs | 7 +- .../NodeInfoEditPanel.cs.uid | 0 {Inspector => Component}/ParsedInfoPanel.cs | 2 +- .../ParsedInfoPanel.cs.uid | 0 Main.cs | 69 ++++++++ Main.cs.uid | 1 + MediaTreeEditor.tscn | 147 ++++++++++++++++++ project.godot | 2 +- tree.tscn | 138 ---------------- 11 files changed, 248 insertions(+), 201 deletions(-) rename MainTreePanel.cs => Component/MainTreePanel.cs (66%) rename MainTreePanel.cs.uid => Component/MainTreePanel.cs.uid (100%) rename {Inspector => Component}/NodeInfoEditPanel.cs (95%) rename {Inspector => Component}/NodeInfoEditPanel.cs.uid (100%) rename {Inspector => Component}/ParsedInfoPanel.cs (97%) rename {Inspector => Component}/ParsedInfoPanel.cs.uid (100%) create mode 100644 Main.cs create mode 100644 Main.cs.uid create mode 100644 MediaTreeEditor.tscn delete mode 100644 tree.tscn diff --git a/MainTreePanel.cs b/Component/MainTreePanel.cs similarity index 66% rename from MainTreePanel.cs rename to Component/MainTreePanel.cs index dd598c4..c742309 100644 --- a/MainTreePanel.cs +++ b/Component/MainTreePanel.cs @@ -1,25 +1,19 @@ using System.Collections.Generic; using System.IO; -using System.Linq; using Godot; -using Learn.Inspector; using Learn.Models; +namespace Learn.Component; + + public partial class MainTreePanel : Tree { - [Export] private FileDirSelector _dirSelector; - [Export] private NodeInfoEditPanel _nodeInfoEditPanel; - [Export] private ParsedInfoPanel _parsedInfoPanel; - - [Export] private LineEdit _columnText; - [Export] private Button _addColumnButton; - [Export] private Button _removeColumnButton; private readonly HashSet _columns = new(); - - private bool _updateItemInfoPanel; private readonly HashSet _selectingNodes = new (); private readonly Dictionary _mapper = new(); + public HashSet SelectingNodes => _selectingNodes; + public override void _Ready() { Columns = 1; @@ -30,28 +24,23 @@ public partial class MainTreePanel : Tree SetColumnExpand(0, true); MultiSelected += OnMultiSelected; - - _addColumnButton.Pressed += OnAddColumn; - _removeColumnButton.Pressed += OnRemoveColumn; - - _nodeInfoEditPanel.OnNodeInfoEdited += OnUpdateColumns; } - private void OnAddColumn() + public void AddColumn(string columnName) { - if (string.IsNullOrEmpty(_columnText.Text)) return; - _columns.Add(_columnText.Text); - OnUpdateColumns(); + if (string.IsNullOrEmpty(columnName)) return; + _columns.Add(columnName); + UpdateColumns(); } - private void OnRemoveColumn() + public void RemoveColumn(string columnName) { - if (string.IsNullOrEmpty(_columnText.Text)) return; - _columns.Remove(_columnText.Text); - OnUpdateColumns(); + if (string.IsNullOrEmpty(columnName)) return; + _columns.Remove(columnName); + UpdateColumns(); } - private void OnUpdateColumns() + public void UpdateColumns() { Columns = _columns.Count + 1; int index = 1; @@ -80,23 +69,11 @@ public partial class MainTreePanel : Tree } } } - - public override void _Process(double delta) - { - if (_updateItemInfoPanel) - { - _updateItemInfoPanel = false; - _nodeInfoEditPanel.SetNodes(_selectingNodes); - _parsedInfoPanel.SetNode(_selectingNodes.FirstOrDefault()); - } - } private void OnMultiSelected(TreeItem item, long column, bool selected) { if(selected) _selectingNodes.Add(_mapper[item]); else _selectingNodes.Remove(_mapper[item]); - - _updateItemInfoPanel = true; } @@ -117,6 +94,16 @@ public partial class MainTreePanel : Tree return item; } + public void Build(string path) + { + Clear(); + _mapper.Clear(); + _selectingNodes.Clear(); + + TreeItem root = CreateItem(); + BuildTree(root, path); + } + private void BuildTree(TreeItem root, string path) { var nodes = new Stack<(TreeItem node, string path)>(); @@ -148,26 +135,4 @@ public partial class MainTreePanel : Tree } } } - - private async void Open() - { - var path = await _dirSelector.SelectFolderAsync(); - if (string.IsNullOrEmpty(path)) - { - return; - } - Clear(); - _mapper.Clear(); - _selectingNodes.Clear(); - - TreeItem root = CreateItem(); - BuildTree(root, path); - _updateItemInfoPanel = true; - } - - private void DoParse() - { - var nodes = _mapper.Values.ToList(); - - } } diff --git a/MainTreePanel.cs.uid b/Component/MainTreePanel.cs.uid similarity index 100% rename from MainTreePanel.cs.uid rename to Component/MainTreePanel.cs.uid diff --git a/Inspector/NodeInfoEditPanel.cs b/Component/NodeInfoEditPanel.cs similarity index 95% rename from Inspector/NodeInfoEditPanel.cs rename to Component/NodeInfoEditPanel.cs index 90b813e..85c0e8c 100644 --- a/Inspector/NodeInfoEditPanel.cs +++ b/Component/NodeInfoEditPanel.cs @@ -4,6 +4,8 @@ using System.Linq; using Godot; using Learn.Models; +namespace Learn.Component; + public partial class NodeInfoEditPanel : Tree { public event Action OnNodeInfoEdited; @@ -96,7 +98,7 @@ public partial class NodeInfoEditPanel : Tree } } - private void AddKeyValue() + public void AddKeyValue() { if(_itemGroup == null) return; var newFieldName = "newField"; @@ -108,7 +110,7 @@ public partial class NodeInfoEditPanel : Tree OnNodesChanged(); } - private void RemoveKeyValue() + public void RemoveKeyValue() { if(_itemGroup == null) return; @@ -118,6 +120,7 @@ public partial class NodeInfoEditPanel : Tree _itemGroup.Remove(_nodeKeys[node]); root.RemoveChild(node); } + _selectingNodes.Clear(); OnNodeInfoEdited?.Invoke(); } } diff --git a/Inspector/NodeInfoEditPanel.cs.uid b/Component/NodeInfoEditPanel.cs.uid similarity index 100% rename from Inspector/NodeInfoEditPanel.cs.uid rename to Component/NodeInfoEditPanel.cs.uid diff --git a/Inspector/ParsedInfoPanel.cs b/Component/ParsedInfoPanel.cs similarity index 97% rename from Inspector/ParsedInfoPanel.cs rename to Component/ParsedInfoPanel.cs index 7d9a9ea..5d7b109 100644 --- a/Inspector/ParsedInfoPanel.cs +++ b/Component/ParsedInfoPanel.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using Godot; using Learn.Models; -namespace Learn.Inspector; +namespace Learn.Component; public partial class ParsedInfoPanel : Tree { diff --git a/Inspector/ParsedInfoPanel.cs.uid b/Component/ParsedInfoPanel.cs.uid similarity index 100% rename from Inspector/ParsedInfoPanel.cs.uid rename to Component/ParsedInfoPanel.cs.uid diff --git a/Main.cs b/Main.cs new file mode 100644 index 0000000..15b7919 --- /dev/null +++ b/Main.cs @@ -0,0 +1,69 @@ +using Godot; +using System.Linq; +using Learn.Component; + +public partial class Main : Node +{ + [ExportGroup("文件夹操作")][Export] private FileDirSelector _dirSelector; + + [ExportGroup("操作面板")][Export] private Button _openDirButton; + [ExportGroup("操作面板")][Export] private Button _doParseButton; + + [ExportGroup("编辑面板")][Export] private NodeInfoEditPanel _nodeInfoEditPanel; + [ExportGroup("编辑面板")][Export] private Button _addKeyButton; + [ExportGroup("编辑面板")][Export] private Button _removeKeyButton; + + [ExportGroup("解析面板")][Export] private ParsedInfoPanel _parsedInfoPanel; + + [ExportGroup("主展示面板")] [Export] private MainTreePanel _mainTreePanel; + [ExportGroup("主展示面板")][Export] private LineEdit _columnText; + [ExportGroup("主展示面板")][Export] private Button _addColumnButton; + [ExportGroup("主展示面板")][Export] private Button _removeColumnButton; + + private bool _refreshPanels; + + public override void _Ready() + { + _nodeInfoEditPanel.OnNodeInfoEdited += _mainTreePanel.UpdateColumns; + _addKeyButton.Pressed += _nodeInfoEditPanel.AddKeyValue; + _removeKeyButton.Pressed += _nodeInfoEditPanel.RemoveKeyValue; + + _mainTreePanel.MultiSelected += (_, _, _) => { _refreshPanels = true; }; + _addColumnButton.Pressed += () => _mainTreePanel.AddColumn(_columnText.Text); + _removeColumnButton.Pressed += () => _mainTreePanel.RemoveColumn(_columnText.Text); + + // 功能区 + _openDirButton.Pressed += OpenDir; + _doParseButton.Pressed += DoParse; + } + + + public override void _Process(double delta) + { + if (_refreshPanels) + { + _refreshPanels = false; + _nodeInfoEditPanel.SetNodes(_mainTreePanel.SelectingNodes); + _parsedInfoPanel.SetNode(_mainTreePanel.SelectingNodes.FirstOrDefault()); + } + } + + #region Commands + private async void OpenDir() + { + var path = await _dirSelector.SelectFolderAsync(); + if (string.IsNullOrEmpty(path)) + { + return; + } + _mainTreePanel.Build(path); + _refreshPanels = true; + } + + private void DoParse() + { + // todo; + } + + #endregion +} diff --git a/Main.cs.uid b/Main.cs.uid new file mode 100644 index 0000000..4daa680 --- /dev/null +++ b/Main.cs.uid @@ -0,0 +1 @@ +uid://biwhkhqrhpf6a diff --git a/MediaTreeEditor.tscn b/MediaTreeEditor.tscn new file mode 100644 index 0000000..db17695 --- /dev/null +++ b/MediaTreeEditor.tscn @@ -0,0 +1,147 @@ +[gd_scene load_steps=6 format=3 uid="uid://b3ypva4l8wfoh"] + +[ext_resource type="Script" uid="uid://dqs5segp8tixm" path="res://Utils/FileDirSelector.cs" id="1_d2g23"] +[ext_resource type="Script" uid="uid://bmepprx2mndih" path="res://Component/MainTreePanel.cs" id="2_44ud8"] +[ext_resource type="Script" uid="uid://biwhkhqrhpf6a" path="res://Main.cs" id="2_0727o"] +[ext_resource type="Script" uid="uid://bkx2esr711e68" path="res://Component/ParsedInfoPanel.cs" id="3_d2g23"] +[ext_resource type="Script" uid="uid://bbgo6drfpvv2a" path="res://Component/NodeInfoEditPanel.cs" id="4_d2g23"] + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="FileDirDialog" type="FileDialog" parent="."] +script = ExtResource("1_d2g23") + +[node name="Main" type="Node" parent="." node_paths=PackedStringArray("_dirSelector", "_openDirButton", "_doParseButton", "_nodeInfoEditPanel", "_addKeyButton", "_removeKeyButton", "_parsedInfoPanel", "_mainTreePanel", "_columnText", "_addColumnButton", "_removeColumnButton")] +script = ExtResource("2_0727o") +_dirSelector = NodePath("../FileDirDialog") +_openDirButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/HFlowContainer/OpenDir") +_doParseButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/HFlowContainer/DoParse") +_nodeInfoEditPanel = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/NodeEditPanel") +_addKeyButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/HBoxContainer/AddKey") +_removeKeyButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/HBoxContainer/RemoveKey") +_parsedInfoPanel = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer2/ParsedNodePanel") +_mainTreePanel = NodePath("../MarginContainer/HSplitContainer/MainTreePanel") +_columnText = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer/ColunmText") +_addColumnButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer/AddColumn") +_removeColumnButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer/RemoveColumn") + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 5 +theme_override_constants/margin_top = 5 +theme_override_constants/margin_right = 5 +theme_override_constants/margin_bottom = 5 + +[node name="HSplitContainer" type="HSplitContainer" parent="MarginContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="MainTreePanel" type="Tree" parent="MarginContainer/HSplitContainer"] +custom_minimum_size = Vector2(600, 0) +layout_mode = 2 +allow_search = false +hide_root = true +select_mode = 2 +script = ExtResource("2_44ud8") + +[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/HSplitContainer"] +layout_mode = 2 + +[node name="VBoxContainer2" type="VBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="FoldableContainer4" type="FoldableContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2"] +layout_mode = 2 +folded = true +title = "功能操作" + +[node name="HFlowContainer" type="HFlowContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4"] +visible = false +layout_mode = 2 + +[node name="OpenDir" type="Button" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/HFlowContainer"] +layout_mode = 2 +size_flags_vertical = 4 +text = "打开文件夹" + +[node name="DoParse" type="Button" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/HFlowContainer"] +layout_mode = 2 +size_flags_vertical = 4 +text = "开始解析" + +[node name="FoldableContainer3" type="FoldableContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2"] +layout_mode = 2 +folded = true +title = "添加显示字段" + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3"] +visible = false +layout_mode = 2 + +[node name="ColunmText" type="LineEdit" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 + +[node name="AddColumn" type="Button" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer"] +layout_mode = 2 +text = "显示" + +[node name="RemoveColumn" type="Button" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer"] +layout_mode = 2 +text = "隐藏" + +[node name="FoldableContainer2" type="FoldableContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2"] +layout_mode = 2 +folded = true +title = "解析数据" + +[node name="ParsedNodePanel" type="Tree" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer2" node_paths=PackedStringArray("_editPanel")] +visible = false +custom_minimum_size = Vector2(0, 400) +layout_mode = 2 +hide_root = true +select_mode = 1 +script = ExtResource("3_d2g23") +_editPanel = NodePath("../../FoldableContainer/VBoxContainer/NodeEditPanel") + +[node name="FoldableContainer" type="FoldableContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2"] +layout_mode = 2 +folded = true +title = "数据编辑" + +[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer"] +visible = false +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer"] +layout_mode = 2 + +[node name="AddKey" type="Button" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 0 +text = "添加字段" + +[node name="RemoveKey" type="Button" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "移除选中" + +[node name="NodeEditPanel" type="Tree" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 400) +layout_mode = 2 +size_flags_vertical = 3 +allow_search = false +hide_root = true +select_mode = 2 +script = ExtResource("4_d2g23") diff --git a/project.godot b/project.godot index 9e5279f..b89fd5c 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="Learn" -run/main_scene="res://tree.tscn" +run/main_scene="res://MediaTreeEditor.tscn" config/features=PackedStringArray("4.5", "C#", "Forward Plus") config/icon="res://icon.svg" diff --git a/tree.tscn b/tree.tscn deleted file mode 100644 index f8a8d68..0000000 --- a/tree.tscn +++ /dev/null @@ -1,138 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://b3ypva4l8wfoh"] - -[ext_resource type="Script" uid="uid://dqs5segp8tixm" path="res://Utils/FileDirSelector.cs" id="1_d2g23"] -[ext_resource type="Script" uid="uid://bmepprx2mndih" path="res://MainTreePanel.cs" id="2_44ud8"] -[ext_resource type="Script" uid="uid://bkx2esr711e68" path="res://Inspector/ParsedInfoPanel.cs" id="3_d2g23"] -[ext_resource type="Script" uid="uid://bbgo6drfpvv2a" path="res://Inspector/NodeInfoEditPanel.cs" id="4_d2g23"] - -[node name="Control" type="Control"] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="FileDirDialog" type="FileDialog" parent="."] -script = ExtResource("1_d2g23") - -[node name="MarginContainer" type="MarginContainer" parent="."] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -theme_override_constants/margin_left = 5 -theme_override_constants/margin_top = 5 -theme_override_constants/margin_right = 5 -theme_override_constants/margin_bottom = 5 - -[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] -layout_mode = 2 - -[node name="Toolbar" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="OpenDir" type="Button" parent="MarginContainer/VBoxContainer/Toolbar"] -layout_mode = 2 -size_flags_vertical = 4 -text = "打开文件夹" - -[node name="DoParse" type="Button" parent="MarginContainer/VBoxContainer/Toolbar"] -layout_mode = 2 -size_flags_vertical = 4 -text = "开始解析" - -[node name="HSplitContainer" type="HSplitContainer" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 -size_flags_vertical = 3 - -[node name="MainTreePanel" type="Tree" parent="MarginContainer/VBoxContainer/HSplitContainer" node_paths=PackedStringArray("_dirSelector", "_nodeInfoEditPanel", "_parsedInfoPanel", "_columnText", "_addColumnButton", "_removeColumnButton")] -custom_minimum_size = Vector2(600, 0) -layout_mode = 2 -allow_search = false -hide_root = true -select_mode = 2 -script = ExtResource("2_44ud8") -_dirSelector = NodePath("../../../../FileDirDialog") -_nodeInfoEditPanel = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/NodeEditPanel") -_parsedInfoPanel = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer2/ParsedNodePanel") -_columnText = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer/ColunmText") -_addColumnButton = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer/AddColumn") -_removeColumnButton = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer/RemoveColumn") - -[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/VBoxContainer/HSplitContainer"] -layout_mode = 2 - -[node name="VBoxContainer2" type="VBoxContainer" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="FoldableContainer3" type="FoldableContainer" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2"] -layout_mode = 2 -folded = true -title = "添加显示字段" - -[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3"] -visible = false -layout_mode = 2 - -[node name="ColunmText" type="LineEdit" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer"] -custom_minimum_size = Vector2(100, 0) -layout_mode = 2 - -[node name="AddColumn" type="Button" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer"] -layout_mode = 2 -text = "显示" - -[node name="RemoveColumn" type="Button" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer"] -layout_mode = 2 -text = "隐藏" - -[node name="FoldableContainer2" type="FoldableContainer" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2"] -layout_mode = 2 -title = "解析数据" - -[node name="ParsedNodePanel" type="Tree" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer2" node_paths=PackedStringArray("_editPanel")] -custom_minimum_size = Vector2(0, 400) -layout_mode = 2 -hide_root = true -select_mode = 1 -script = ExtResource("3_d2g23") -_editPanel = NodePath("../../FoldableContainer/VBoxContainer/NodeEditPanel") - -[node name="FoldableContainer" type="FoldableContainer" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2"] -layout_mode = 2 -folded = true -title = "数据编辑" - -[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer"] -visible = false -layout_mode = 2 - -[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer"] -layout_mode = 2 - -[node name="Add" type="Button" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/HBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 0 -text = "添加字段" - -[node name="Remove" type="Button" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/HBoxContainer"] -layout_mode = 2 -text = "移除选中" - -[node name="NodeEditPanel" type="Tree" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer"] -custom_minimum_size = Vector2(0, 400) -layout_mode = 2 -size_flags_vertical = 3 -allow_search = false -hide_root = true -select_mode = 2 -script = ExtResource("4_d2g23") - -[connection signal="pressed" from="MarginContainer/VBoxContainer/Toolbar/OpenDir" to="MarginContainer/VBoxContainer/HSplitContainer/MainTreePanel" method="Open"] -[connection signal="pressed" from="MarginContainer/VBoxContainer/Toolbar/DoParse" to="MarginContainer/VBoxContainer/HSplitContainer/MainTreePanel" method="DoParse"] -[connection signal="pressed" from="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/HBoxContainer/Add" to="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/NodeEditPanel" method="AddKeyValue"] -[connection signal="pressed" from="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/HBoxContainer/Remove" to="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/NodeEditPanel" method="RemoveKeyValue"]