This commit is contained in:
fengfeng 2025-12-17 18:55:48 +08:00
parent 4b44a3ebcf
commit 9770157420
5 changed files with 66 additions and 15 deletions

View File

@ -43,24 +43,17 @@ public partial class ParsedInfoPanel : Tree
if (_node == null) return;
var root = CreateItem();
var keys = new HashSet<string>();
var curr = _node;
while (curr != null)
var kvs = _node.GetKeyValueInfos();
foreach (var kv in kvs)
{
foreach (var kv in curr.Info.Info)
{
if(!keys.Add(kv.Key)) continue;
var node = CreateItem(root);
if (curr != _node)
if (kv.IsInherited)
{
node.SetText(NotesColumn, "(继承)");
}
node.SetText(KeyColumn, kv.Key);
node.SetText(ValueColumn, kv.Value);
}
curr = curr.Parent;
}
}
}

View File

@ -4,4 +4,7 @@
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'android' ">net9.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<Folder Include="Parsers\" />
</ItemGroup>
</Project>

View File

@ -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<TreeNode> _selectingNodes = new ();
@ -20,6 +22,8 @@ public partial class MainTreePanel : Tree
public override void _Ready()
{
_menuButton.GetPopup().AddItem("test");
MultiSelected += OnMultiSelected;
}

View File

@ -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<TreeNode> Children => _children;
public Item Info => item;
@ -18,4 +25,31 @@ public class TreeNode(Item item)
_children.Add(node);
node._parent = this;
}
public IEnumerable<KeyValueInfo> GetKeyValueInfos()
{
var result = new List<KeyValueInfo>();
var keys = new HashSet<string>();
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;
}
}

View File

@ -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 = "解析数据"