想用Godot做一个一站式的文本编辑器
核心:
func dir_contents(path):
var dir = DirAccess.open(path)
var files = []
if dir:
dir.list_dir_begin()
var file_name = dir.get_next()
while file_name != "":
if dir.current_is_dir():
break
else:
files.append(file_name)
file_name = dir.get_next()
else:
print("Error。")
return files
看看我的实现:
func _on_file_dialog_dir_selected(dir: String) -> void:
DisplayServer.window_set_title(project_name+" - "+dir)
print("Open dir " + dir)
Global.data["dir"] = dir
Global.data["recent"].append(dir)
print("Now,we have ",Global.data["recent"].size())
while true:
if Global.data["recent"].size() > 10:
print("so delete to 10")
Global.data["recent"].remove_at(0)
print(Global.data["recent"])
print(Global.data["recent"].size())
else:
break
%Start.visible = false
%Edit.visible = true
var files = dir_contents(dir+Global.data["post_dir"])
for file in files:
create_button(file,%Edit/PostContainer,_on_post_button_pressed,file)
pass
func create_button(bind,child,connect,text):
var button = Button.new()
button.text = text
button.pressed.connect(connect.bind(bind))
child.add_child(button)
var position = Vector2(0, len(buttons) * 30)
button.clip_text = true
print(button.size)
button.position = position
buttons[bind] = button
func _on_post_button_pressed(file):
print("Button pressed for file: " + file)
var open = Global.data["dir"]+Global.data["post_dir"]+"/"+file
print("Open "+open)
var post = FileAccess.open(open, FileAccess.READ)
%Edit/MarkdownLabel.markdown_text = post.get_as_text()
func dir_contents(path):
var dir = DirAccess.open(path)
var files = []
if dir:
dir.list_dir_begin()
var file_name = dir.get_next()
while file_name != "":
if dir.current_is_dir():
break
else:
files.append(file_name)
file_name = dir.get_next()
else:
print("Error。")
return files
_on_file_dialog_dir_selected(dir: String) -> void:
当文件对话框目录被选择时,该函数被调用。它接收一个字符串参数dir,代表选定的目录路径。功能包括:设置窗口标题为项目名称和目录路径的组合,打印打开的目录,更新全局数据中的当前目录和最近使用目录,限制最近使用目录列表长度为10,显示和隐藏特定界面元素,遍历目录中的文件并创建对应按钮。
create_button(bind,child,connect,text):
创建一个带有特定文本的按钮,并将其添加到父节点。它接收四个参数:bind(绑定的对象),child(按钮的父节点),connect(按钮按下时调用的函数),text(按钮的文本)。功能包括:创建新按钮,设置按钮文本,连接按下事件到指定函数,将按钮添加到父节点,设置按钮的位置和文本截断。
_on_post_button_pressed(file):
当帖子按钮被按下时调用。它接收一个文件名参数file,代表被按下按钮关联的文件。功能包括:打开并读取文件内容,将文件内容设置为特定界面元素的文本。
dir_contents(path):
列出指定路径下的文件(不包括子目录)。它接收一个路径参数path,返回一个包含文件名的列表。功能包括:打开目录,遍历目录中的每个项,如果当前项是文件则添加到文件列表,最后返回文件列表。