完善显示

This commit is contained in:
limil 2025-12-21 23:04:12 +08:00
parent 89de0e2ebd
commit a4c5834da5
4 changed files with 32 additions and 1983 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
.godot/
/android/
.idea/
data.json

View File

@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Godot;
using Learn.Models;
using Newtonsoft.Json;
@ -9,6 +10,13 @@ namespace Learn.Component;
public partial class MainTreePanel : Tree
{
public class MainTreeData
{
public List<string> Columns { get; set; }
public Dictionary<string, Item> Items { get; set; }
}
private readonly HashSet<string> _columns = new();
private readonly HashSet<TreeNode> _selectingNodes = new();
private readonly Dictionary<TreeItem, TreeNode> _mapper = new();
@ -26,6 +34,8 @@ public partial class MainTreePanel : Tree
SetColumnExpand(0, true);
MultiSelected += OnMultiSelected;
UpdateColumns();
}
public void AddColumn(string columnName)
@ -118,18 +128,28 @@ public partial class MainTreePanel : Tree
public void LoadData(string dataPath)
{
var items = JsonConvert.DeserializeObject<Dictionary<string, Item>>(File.ReadAllText(dataPath));
foreach (var kv in items)
var data = JsonConvert.DeserializeObject<MainTreeData>(File.ReadAllText(dataPath));
foreach (var kv in data.Items)
{
if (string.IsNullOrEmpty(kv.Key)) continue;
_items[kv.Key] = kv.Value;
}
_columns.Clear();
foreach (var column in data.Columns)
{
_columns.Add(column);
}
UpdateColumns();
}
public void SaveData(string dataPath)
{
File.WriteAllText(dataPath, JsonConvert.SerializeObject(_items, Formatting.Indented));
var data = new MainTreeData
{
Columns = _columns.ToList(),
Items = _items
};
File.WriteAllText(dataPath, JsonConvert.SerializeObject(data, Formatting.Indented));
}
public void Scan(string path)

View File

@ -30,9 +30,9 @@ _addKeyButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBo
_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")
_columnText = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer/HBoxContainer/ColunmText")
_addColumnButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer/HBoxContainer/AddColumn")
_removeColumnButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer/HBoxContainer/RemoveColumn")
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
@ -98,35 +98,27 @@ text = "保存"
layout_mode = 2
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
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer"]
layout_mode = 2
[node name="ColunmText" type="LineEdit" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer"]
[node name="ColunmText" type="LineEdit" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(100, 0)
layout_mode = 2
[node name="AddColumn" type="Button" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer"]
[node name="AddColumn" type="Button" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "显示"
[node name="RemoveColumn" type="Button" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer"]
[node name="RemoveColumn" type="Button" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer/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)
custom_minimum_size = Vector2(0, 300)
layout_mode = 2
hide_root = true
select_mode = 1
@ -135,11 +127,9 @@ _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"]

1962
data.json

File diff suppressed because it is too large Load Diff