From 97701574209e06373f34c7e78fba52d109ced71c Mon Sep 17 00:00:00 2001 From: fengfeng Date: Wed, 17 Dec 2025 18:55:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inspector/ParsedInfoPanel.cs | 21 +++++++-------------- Learn.csproj | 3 +++ MainTreePanel.cs | 4 ++++ Models/TreeNode.cs | 34 ++++++++++++++++++++++++++++++++++ tree.tscn | 19 ++++++++++++++++++- 5 files changed, 66 insertions(+), 15 deletions(-) diff --git a/Inspector/ParsedInfoPanel.cs b/Inspector/ParsedInfoPanel.cs index 2366e38..842747c 100644 --- a/Inspector/ParsedInfoPanel.cs +++ b/Inspector/ParsedInfoPanel.cs @@ -43,23 +43,16 @@ public partial class ParsedInfoPanel : Tree if (_node == null) return; var root = CreateItem(); - var keys = new HashSet(); - var curr = _node; - - while (curr != null) + var kvs = _node.GetKeyValueInfos(); + foreach (var kv in kvs) { - foreach (var kv in curr.Info.Info) + var node = CreateItem(root); + if (kv.IsInherited) { - if(!keys.Add(kv.Key)) continue; - var node = CreateItem(root); - if (curr != _node) - { - node.SetText(NotesColumn, "(继承)"); - } - node.SetText(KeyColumn, kv.Key); - node.SetText(ValueColumn, kv.Value); + node.SetText(NotesColumn, "(继承)"); } - curr = curr.Parent; + node.SetText(KeyColumn, kv.Key); + node.SetText(ValueColumn, kv.Value); } } diff --git a/Learn.csproj b/Learn.csproj index 65eb1f8..c164e62 100644 --- a/Learn.csproj +++ b/Learn.csproj @@ -4,4 +4,7 @@ net9.0 true + + + \ No newline at end of file diff --git a/MainTreePanel.cs b/MainTreePanel.cs index 6f0f333..52e255c 100644 --- a/MainTreePanel.cs +++ b/MainTreePanel.cs @@ -13,6 +13,8 @@ public partial class MainTreePanel : Tree private NodeInfoEditPanel _nodeInfoEditPanel; [Export] private ParsedInfoPanel _parsedInfoPanel; + [Export] + private MenuButton _menuButton; private bool _updateItemInfoPanel; private readonly HashSet _selectingNodes = new (); @@ -20,6 +22,8 @@ public partial class MainTreePanel : Tree public override void _Ready() { + _menuButton.GetPopup().AddItem("test"); + MultiSelected += OnMultiSelected; } diff --git a/Models/TreeNode.cs b/Models/TreeNode.cs index 800445f..c4d92c6 100644 --- a/Models/TreeNode.cs +++ b/Models/TreeNode.cs @@ -5,6 +5,13 @@ namespace Learn.Models; public class TreeNode(Item item) { + public class KeyValueInfo + { + public string Key { get; set; } + public string Value { get; set; } + public bool IsInherited { get; set; } + } + public TreeNode Parent => _parent; public IEnumerable Children => _children; public Item Info => item; @@ -18,4 +25,31 @@ public class TreeNode(Item item) _children.Add(node); node._parent = this; } + + public IEnumerable GetKeyValueInfos() + { + var result = new List(); + var keys = new HashSet(); + var curr = this; + + while (curr.Info != null) + { + foreach (var kv in curr.Info.Info) + { + if(!keys.Add(kv.Key)) continue; + var keyValueInfo = new KeyValueInfo(); + + if (curr != this) + { + keyValueInfo.IsInherited = true; + } + + keyValueInfo.Key = kv.Key; + keyValueInfo.Value = kv.Value; + result.Add(keyValueInfo); + } + curr = curr.Parent; + } + return result; + } } \ No newline at end of file diff --git a/tree.tscn b/tree.tscn index ab687a8..140f286 100644 --- a/tree.tscn +++ b/tree.tscn @@ -43,7 +43,7 @@ text = "打开文件夹" layout_mode = 2 size_flags_vertical = 3 -[node name="MainTreePanel" type="Tree" parent="MarginContainer/VBoxContainer/HSplitContainer" node_paths=PackedStringArray("_dirSelector", "_nodeInfoEditPanel", "_parsedInfoPanel")] +[node name="MainTreePanel" type="Tree" parent="MarginContainer/VBoxContainer/HSplitContainer" node_paths=PackedStringArray("_dirSelector", "_nodeInfoEditPanel", "_parsedInfoPanel", "_menuButton")] custom_minimum_size = Vector2(600, 0) layout_mode = 2 allow_search = false @@ -53,6 +53,7 @@ script = ExtResource("2_44ud8") _dirSelector = NodePath("../../../../FileDirDialog") _nodeInfoEditPanel = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/NodeEditPanel") _parsedInfoPanel = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer2/ParsedNodePanel") +_menuButton = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer/MenuButton") [node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/VBoxContainer/HSplitContainer"] layout_mode = 2 @@ -61,6 +62,22 @@ layout_mode = 2 layout_mode = 2 size_flags_horizontal = 3 +[node name="FoldableContainer3" type="FoldableContainer" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3"] +layout_mode = 2 + +[node name="MenuButton" type="MenuButton" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer"] +custom_minimum_size = Vector2(100, 50) +layout_mode = 2 +size_flags_horizontal = 0 +text = "eee" + +[node name="Button" 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 = "解析数据"