using System.IO; using Godot; using System.Linq; using Learn.Component; public partial class Main : Node { [ExportGroup("文件夹操作")][Export] private FileDirSelector _dirSelector; [ExportGroup("操作面板")][Export] private RichTextLabel _console; [ExportGroup("操作面板")][Export] private Button _openDirButton; [ExportGroup("操作面板")][Export] private Button _doParseButton; [ExportGroup("操作面板")][Export] private Button _saveButton; [ExportGroup("操作面板")][Export] private Button _resetButton; [ExportGroup("编辑面板")][Export] private NodeInfoEditPanel _nodeInfoEditPanel; [ExportGroup("编辑面板")][Export] private Button _addKeyButton; [ExportGroup("编辑面板")][Export] private Button _removeKeyButton; [ExportGroup("解析面板")][Export] private ParsedInfoPanel _parsedInfoPanel; [ExportGroup("主展示面板")] [Export] private MainTreePanel _mainTreePanel; [ExportGroup("主展示面板")][Export] private LineEdit _columnText; [ExportGroup("主展示面板")][Export] private Button _addColumnButton; [ExportGroup("主展示面板")][Export] private Button _removeColumnButton; private bool _refreshPanels; private void Log(string log) { var time = Time.GetTimeDictFromSystem(); string timestamp = $"[{time["hour"]:D2}:{time["minute"]:D2}:{time["second"]:D2}]"; string bbcode = $"[color=#888888]{timestamp}[/color] " + $"{log}\n"; _console.AppendText(bbcode); _console.ScrollToLine(_console.GetLineCount()); } public override void _Ready() { _nodeInfoEditPanel.OnNodeInfoEdited += _mainTreePanel.UpdateColumns; _addKeyButton.Pressed += _nodeInfoEditPanel.AddKeyValue; _removeKeyButton.Pressed += _nodeInfoEditPanel.RemoveKeyValue; _mainTreePanel.MultiSelected += (_, _, _) => { _refreshPanels = true; }; _addColumnButton.Pressed += () => _mainTreePanel.AddColumn(_columnText.Text); _removeColumnButton.Pressed += () => _mainTreePanel.RemoveColumn(_columnText.Text); // 功能区 _openDirButton.Pressed += ScanDir; _doParseButton.Pressed += DoParse; _saveButton.Pressed += DoSave; _resetButton.Pressed += DoReset; // 先加载保存的数据 if (File.Exists(DataPath)) { _mainTreePanel.LoadData(DataPath); Log("加载成功:" + DataPath); } } public override void _Process(double delta) { if (_refreshPanels) { _refreshPanels = false; _nodeInfoEditPanel.SetNodes(_mainTreePanel.SelectingNodes); _parsedInfoPanel.SetNode(_mainTreePanel.SelectingNodes.FirstOrDefault()); } } #region Commands private async void ScanDir() { var path = await _dirSelector.SelectFolderAsync(); if (string.IsNullOrEmpty(path)) { return; } _mainTreePanel.Scan(path); _refreshPanels = true; } private void DoParse() { // todo; } private const string DataPath = "data.json"; private void DoSave() { _mainTreePanel.SaveData(DataPath); Log("保存成功"); } private void DoReset() { _mainTreePanel.ClearData(); _nodeInfoEditPanel.OnNodesChanged(); Log("清空成功"); } #endregion }