LearnGodot/Main.cs

110 lines
3.0 KiB
C#

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
}