想用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,返回一個包含檔名的列表。功能包括:開啟目錄,遍歷目錄中的每個項,如果當前項是檔案則新增到檔案列表,最後返回檔案列表。