using Godot;
using System;
using System.Collections.Generic;
using System.IO;
public partial class DragAndDropImport : Control
{
private Sprite2D _imageSprite2D;
private Label _textLabel;
// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
_textLabel = GetNode<Label>("VBoxContainer/Panel/Text");
_imageSprite2D = GetNode<Sprite2D>("VBoxContainer/Panel/Image");
ConnectFilesDroppedSignal();
}
private bool FileIsText(string fileName)
{
if(Path.GetExtension(fileName).ToLower().Equals(".txt"))
{
return true;
}
return false;
}
private bool FileIsImage(string fileName)
{
List<string> imageExtensions = new List<string> {".png",".jpg",".jpeg",".bmp",".svg",".svgz",".tga",".webp"};
foreach(var image in imageExtensions)
{
if (Path.GetExtension(fileName).ToLower().Equals(image))
{
return true;
}
}
return false;
}
private void LoadSprite2DTextureFromDisk(string imagePath, Sprite2D sprite)
{
Image img = new Image();
if(img.Load(imagePath) == Error.Ok) {
var texture = ImageTexture.CreateFromImage(img);
sprite.Texture = texture;
sprite.Centered = false;
}
else {
_textLabel.Text = "Could not load the image from " + imagePath;
};
}
private void ConnectFilesDroppedSignal() {
var rootNode = GetTree().Root;
rootNode.FilesDropped += OnFilesDropped;
}
public void OnFilesDropped (string[] files) {
_textLabel.Text = string.Empty;
if(FileIsText(files[0])) {
string text = File.ReadAllText(files[0]);
_textLabel.Text = text;
}
else if (FileIsImage(files[0])) {
LoadSprite2DTextureFromDisk(files[0], _imageSprite2D);
}
else
{
_textLabel.Text = "\"" + Path.GetFileName(files[0]) +"\"" + "Is not a .txt or supported image file.";
}
// print message on Godot console
//GD.Print("The files was dropped, first file is " + files[0]);
}
// Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(double delta)
{
}
}