完善显示

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

1
.gitignore vendored
View File

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

View File

@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using Godot; using Godot;
using Learn.Models; using Learn.Models;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -9,6 +10,13 @@ namespace Learn.Component;
public partial class MainTreePanel : Tree 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<string> _columns = new();
private readonly HashSet<TreeNode> _selectingNodes = new(); private readonly HashSet<TreeNode> _selectingNodes = new();
private readonly Dictionary<TreeItem, TreeNode> _mapper = new(); private readonly Dictionary<TreeItem, TreeNode> _mapper = new();
@ -26,6 +34,8 @@ public partial class MainTreePanel : Tree
SetColumnExpand(0, true); SetColumnExpand(0, true);
MultiSelected += OnMultiSelected; MultiSelected += OnMultiSelected;
UpdateColumns();
} }
public void AddColumn(string columnName) public void AddColumn(string columnName)
@ -118,18 +128,28 @@ public partial class MainTreePanel : Tree
public void LoadData(string dataPath) public void LoadData(string dataPath)
{ {
var items = JsonConvert.DeserializeObject<Dictionary<string, Item>>(File.ReadAllText(dataPath)); var data = JsonConvert.DeserializeObject<MainTreeData>(File.ReadAllText(dataPath));
foreach (var kv in items) foreach (var kv in data.Items)
{ {
if (string.IsNullOrEmpty(kv.Key)) continue; if (string.IsNullOrEmpty(kv.Key)) continue;
_items[kv.Key] = kv.Value; _items[kv.Key] = kv.Value;
} }
_columns.Clear();
foreach (var column in data.Columns)
{
_columns.Add(column);
}
UpdateColumns(); UpdateColumns();
} }
public void SaveData(string dataPath) 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) 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") _removeKeyButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer/HBoxContainer/RemoveKey")
_parsedInfoPanel = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer2/ParsedNodePanel") _parsedInfoPanel = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer2/ParsedNodePanel")
_mainTreePanel = NodePath("../MarginContainer/HSplitContainer/MainTreePanel") _mainTreePanel = NodePath("../MarginContainer/HSplitContainer/MainTreePanel")
_columnText = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer/ColunmText") _columnText = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer/HBoxContainer/ColunmText")
_addColumnButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer/AddColumn") _addColumnButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer/HBoxContainer/AddColumn")
_removeColumnButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3/HBoxContainer/RemoveColumn") _removeColumnButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer/HBoxContainer/RemoveColumn")
[node name="MarginContainer" type="MarginContainer" parent="."] [node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1 layout_mode = 1
@ -98,35 +98,27 @@ text = "保存"
layout_mode = 2 layout_mode = 2
text = "重置" text = "重置"
[node name="FoldableContainer3" type="FoldableContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2"] [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer"]
layout_mode = 2
folded = true
title = "添加显示字段"
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer3"]
visible = false
layout_mode = 2 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) custom_minimum_size = Vector2(100, 0)
layout_mode = 2 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 layout_mode = 2
text = "显示" 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 layout_mode = 2
text = "隐藏" text = "隐藏"
[node name="FoldableContainer2" type="FoldableContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2"] [node name="FoldableContainer2" type="FoldableContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2"]
layout_mode = 2 layout_mode = 2
folded = true
title = "解析数据" title = "解析数据"
[node name="ParsedNodePanel" type="Tree" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer2" node_paths=PackedStringArray("_editPanel")] [node name="ParsedNodePanel" type="Tree" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer2" node_paths=PackedStringArray("_editPanel")]
visible = false custom_minimum_size = Vector2(0, 250)
custom_minimum_size = Vector2(0, 400)
layout_mode = 2 layout_mode = 2
hide_root = true hide_root = true
select_mode = 1 select_mode = 1
@ -135,11 +127,9 @@ _editPanel = NodePath("../../FoldableContainer/VBoxContainer/NodeEditPanel")
[node name="FoldableContainer" type="FoldableContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2"] [node name="FoldableContainer" type="FoldableContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2"]
layout_mode = 2 layout_mode = 2
folded = true
title = "数据编辑" title = "数据编辑"
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer"] [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer"]
visible = false
layout_mode = 2 layout_mode = 2
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer/VBoxContainer"] [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