98 lines
1.9 KiB
C#
98 lines
1.9 KiB
C#
using Godot;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
public partial class FileTree : Tree
|
|
{
|
|
public FileBar bar;
|
|
|
|
public Dictionary<string, string> icons = new Dictionary<string, string>
|
|
{
|
|
|
|
};
|
|
|
|
|
|
|
|
public override void _Ready()
|
|
{
|
|
HideRoot = false;
|
|
Columns = 1;
|
|
ItemSelected += OnItemClicked;
|
|
|
|
}
|
|
|
|
public override void _Process(double delta)
|
|
{
|
|
}
|
|
|
|
public void OnItemClicked()
|
|
{
|
|
TreeItem selectedItem = GetSelected();
|
|
bar.OpenFileAsTab((string)selectedItem.GetMetadata(0));
|
|
}
|
|
|
|
public void PopulateTree(string path, TreeItem RootItem)
|
|
{
|
|
|
|
var dir = DirAccess.Open(path);
|
|
if (dir == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
dir.ListDirBegin();
|
|
var itemName = dir.GetNext();
|
|
|
|
while (itemName != "")
|
|
{
|
|
if (itemName != "." && itemName != "..")
|
|
{
|
|
var fullPath = path.PathJoin(itemName);
|
|
|
|
|
|
|
|
if (dir.CurrentIsDir())
|
|
{
|
|
var folderItem = CreateItem(RootItem);
|
|
folderItem.SetText(0, itemName);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PopulateTree(fullPath, folderItem);
|
|
}
|
|
else
|
|
{
|
|
|
|
string icp = "";
|
|
|
|
switch (itemName.GetExtension())
|
|
{
|
|
default: icp = "default"; break;
|
|
case "py" or "pyc": icp = "python"; break;
|
|
case "png" or "jpg": icp = "image"; break;
|
|
case "mp3" or "wav" or "mcx" or "acx" or "wma": icp = "audio"; break;
|
|
case "lua" or "clua" or "luau": icp = "lua"; break;
|
|
case "json" or "jsonc" or "jsonl": icp = "json"; break;
|
|
}
|
|
|
|
var fileItem = CreateItem(RootItem);
|
|
fileItem.SetText(0, itemName);
|
|
|
|
fileItem.SetIcon(0, GD.Load<Texture2D>($"res://Icons/{icp}.svg"));
|
|
fileItem.SetIconMaxWidth(0, 32);
|
|
|
|
|
|
|
|
fileItem.SetMetadata(0, fullPath);
|
|
}
|
|
}
|
|
|
|
itemName = dir.GetNext();
|
|
}
|
|
dir.ListDirEnd();
|
|
}
|
|
}
|