110 lines
3.0 KiB
C#
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
|
|
}
|