调整
This commit is contained in:
parent
4b44a3ebcf
commit
9770157420
@ -43,24 +43,17 @@ public partial class ParsedInfoPanel : Tree
|
|||||||
if (_node == null) return;
|
if (_node == null) return;
|
||||||
|
|
||||||
var root = CreateItem();
|
var root = CreateItem();
|
||||||
var keys = new HashSet<string>();
|
var kvs = _node.GetKeyValueInfos();
|
||||||
var curr = _node;
|
foreach (var kv in kvs)
|
||||||
|
|
||||||
while (curr != null)
|
|
||||||
{
|
{
|
||||||
foreach (var kv in curr.Info.Info)
|
|
||||||
{
|
|
||||||
if(!keys.Add(kv.Key)) continue;
|
|
||||||
var node = CreateItem(root);
|
var node = CreateItem(root);
|
||||||
if (curr != _node)
|
if (kv.IsInherited)
|
||||||
{
|
{
|
||||||
node.SetText(NotesColumn, "(继承)");
|
node.SetText(NotesColumn, "(继承)");
|
||||||
}
|
}
|
||||||
node.SetText(KeyColumn, kv.Key);
|
node.SetText(KeyColumn, kv.Key);
|
||||||
node.SetText(ValueColumn, kv.Value);
|
node.SetText(ValueColumn, kv.Value);
|
||||||
}
|
}
|
||||||
curr = curr.Parent;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -4,4 +4,7 @@
|
|||||||
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'android' ">net9.0</TargetFramework>
|
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'android' ">net9.0</TargetFramework>
|
||||||
<EnableDynamicLoading>true</EnableDynamicLoading>
|
<EnableDynamicLoading>true</EnableDynamicLoading>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Parsers\" />
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@ -13,6 +13,8 @@ public partial class MainTreePanel : Tree
|
|||||||
private NodeInfoEditPanel _nodeInfoEditPanel;
|
private NodeInfoEditPanel _nodeInfoEditPanel;
|
||||||
[Export]
|
[Export]
|
||||||
private ParsedInfoPanel _parsedInfoPanel;
|
private ParsedInfoPanel _parsedInfoPanel;
|
||||||
|
[Export]
|
||||||
|
private MenuButton _menuButton;
|
||||||
|
|
||||||
private bool _updateItemInfoPanel;
|
private bool _updateItemInfoPanel;
|
||||||
private readonly HashSet<TreeNode> _selectingNodes = new ();
|
private readonly HashSet<TreeNode> _selectingNodes = new ();
|
||||||
@ -20,6 +22,8 @@ public partial class MainTreePanel : Tree
|
|||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
|
_menuButton.GetPopup().AddItem("test");
|
||||||
|
|
||||||
MultiSelected += OnMultiSelected;
|
MultiSelected += OnMultiSelected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,13 @@ namespace Learn.Models;
|
|||||||
|
|
||||||
public class TreeNode(Item item)
|
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 TreeNode Parent => _parent;
|
||||||
public IEnumerable<TreeNode> Children => _children;
|
public IEnumerable<TreeNode> Children => _children;
|
||||||
public Item Info => item;
|
public Item Info => item;
|
||||||
@ -18,4 +25,31 @@ public class TreeNode(Item item)
|
|||||||
_children.Add(node);
|
_children.Add(node);
|
||||||
node._parent = this;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
19
tree.tscn
19
tree.tscn
@ -43,7 +43,7 @@ text = "打开文件夹"
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_vertical = 3
|
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)
|
custom_minimum_size = Vector2(600, 0)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
allow_search = false
|
allow_search = false
|
||||||
@ -53,6 +53,7 @@ script = ExtResource("2_44ud8")
|
|||||||
_dirSelector = NodePath("../../../../FileDirDialog")
|
_dirSelector = NodePath("../../../../FileDirDialog")
|
||||||
_nodeInfoEditPanel = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/NodeEditPanel")
|
_nodeInfoEditPanel = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/NodeEditPanel")
|
||||||
_parsedInfoPanel = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer2/ParsedNodePanel")
|
_parsedInfoPanel = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer2/ParsedNodePanel")
|
||||||
|
_menuButton = NodePath("../ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer/MenuButton")
|
||||||
|
|
||||||
[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/VBoxContainer/HSplitContainer"]
|
[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/VBoxContainer/HSplitContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
@ -61,6 +62,22 @@ layout_mode = 2
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
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"]
|
[node name="FoldableContainer2" type="FoldableContainer" parent="MarginContainer/VBoxContainer/HSplitContainer/ScrollContainer/VBoxContainer2"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
title = "解析数据"
|
title = "解析数据"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user