Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions core/systems/file/file_object.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
extends FilesystemObject
class_name FileObject


23 changes: 23 additions & 0 deletions core/systems/file/filesystem_object.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
extends RefCounted
class_name FilesystemObject

var path: String


func _init(path_to: String) -> void:
path = path_to


## Returns the mime type of the given filesystem object
func get_mime_type() -> String:
var cmd := Command.new("xdg-mime", ["query", "filetype", path])
var code := await cmd.execute()
if code != OK:
return ""

return cmd.stdout


## Return the icon texture for this node
func get_icon() -> Texture2D:
return null
25 changes: 25 additions & 0 deletions core/ui/components/file_manager.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
extends Control

var HOME := OS.get_environment("HOME")

@onready var line_edit := $%LineEdit as LineEdit
@onready var tree1 := $%Tree1 as Tree

# https://unix.stackexchange.com/questions/419895/if-i-have-a-mime-type-how-do-i-get-its-associated-icon-from-the-current-appearan

# Get mime type:
# $ xdg-mime query filetype entrypoint.gd
# application/x-gdscript

# Called when the node enters the scene tree for the first time.
func _ready() -> void:
line_edit.text = HOME

var root := tree1.create_item()
for dir in DirAccess.get_directories_at(HOME):
var item := root.create_child()
item.set_text(0, dir)

for file in DirAccess.get_files_at(HOME):
var item := root.create_child()
item.set_text(0, file)
73 changes: 73 additions & 0 deletions core/ui/components/file_manager.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
[gd_scene load_steps=4 format=3 uid="uid://um4833sfah6a"]

[ext_resource type="Script" path="res://core/ui/components/file_manager.gd" id="1_ox374"]
[ext_resource type="PackedScene" uid="uid://cr83fmlociwko" path="res://core/ui/components/card_icon_button.tscn" id="2_bbd5j"]
[ext_resource type="Texture2D" uid="uid://8pmccsyfv3u7" path="res://assets/ui/icons/search.svg" id="3_onyah"]

[node name="FileManager" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_ox374")

[node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2

[node name="MarginContainer" type="MarginContainer" parent="PanelContainer"]
layout_mode = 2
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 20
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 20

[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer"]
layout_mode = 2

[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/margin_left = 60
theme_override_constants/margin_right = 60

[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/MarginContainer"]
layout_mode = 2

[node name="LineEdit" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer2"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "/home"

[node name="SearchButton" parent="PanelContainer/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer2" instance=ExtResource("2_bbd5j")]
unique_name_in_owner = true
layout_mode = 2
texture = ExtResource("3_onyah")

[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3

[node name="Tree1" type="Tree" parent="PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
hide_root = true

[node name="Tree2" type="Tree" parent="PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
hide_root = true

[node name="Tree3" type="Tree" parent="PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
hide_root = true