add file reordering context menu

This commit is contained in:
Lera Elvoé 2022-06-23 18:55:59 +03:00
parent a6266ef98b
commit c3e0bd043f
2 changed files with 40 additions and 10 deletions

View File

@ -40,6 +40,7 @@ var is_server_running: bool = false setget set_server_running
var working_files: Array = [] # Array<FileDef> var working_files: Array = [] # Array<FileDef>
var current_file: FileDef = null var current_file: FileDef = null
var current_tree_selection: TreeItem = null
func _ready() -> void: func _ready() -> void:
@ -64,6 +65,7 @@ func set_server_dir(dir: String) -> void:
if directory.open(dir) == OK: if directory.open(dir) == OK:
directory.list_dir_begin() directory.list_dir_begin()
var file_name: String = directory.get_next() var file_name: String = directory.get_next()
var idx: int = 0
while file_name != "": while file_name != "":
if !directory.current_is_dir() && (file_name.get_extension() in ACCEPTED_FILE_FORMATS): if !directory.current_is_dir() && (file_name.get_extension() in ACCEPTED_FILE_FORMATS):
var fd = FileDef(file_name, false) var fd = FileDef(file_name, false)
@ -71,29 +73,42 @@ func set_server_dir(dir: String) -> void:
var in_filestxt := _is_file_in_filestxt(file_name) var in_filestxt := _is_file_in_filestxt(file_name)
var item: TreeItem = file_tree.create_item(root)
item.set_cell_mode(0, TreeItem.CELL_MODE_CHECK)
item.set_metadata(0, fd)
item.set_editable(0, true)
item.set_text(0, file_name)
item.set_checked(0, in_filestxt)
fd.include_in_filestxt = in_filestxt fd.include_in_filestxt = in_filestxt
idx += 1
file_name = directory.get_next() file_name = directory.get_next()
directory.list_dir_end() directory.list_dir_end()
_reconstruct_tree_from_working_files()
func _reconstruct_tree_from_working_files() -> void:
file_tree.clear()
var root: TreeItem = file_tree.create_item()
root.set_text(0, "Server files")
for i in working_files.size():
var fd = working_files[i] as FileDef
var item: TreeItem = file_tree.create_item(root)
item.set_cell_mode(0, TreeItem.CELL_MODE_CHECK)
item.set_metadata(0, {"file_def": fd, "id": i})
item.set_editable(0, true)
item.set_text(0, fd.file_path)
item.set_checked(0, fd.include_in_filestxt)
func _on_FileTree_item_edited() -> void: func _on_FileTree_item_edited() -> void:
var item: TreeItem = file_tree.get_edited() var item: TreeItem = file_tree.get_edited()
var fd: FileDef = item.get_metadata(0) var fd: FileDef = item.get_metadata(0)["file_def"]
fd.include_in_filestxt = item.is_checked(0) fd.include_in_filestxt = item.is_checked(0)
func _on_FileTree_item_selected() -> void: func _on_FileTree_item_selected() -> void:
var item: TreeItem = file_tree.get_selected() var item: TreeItem = file_tree.get_selected()
current_file = item.get_metadata(0) as FileDef current_file = item.get_metadata(0)["file_def"] as FileDef
if !current_file.dirty: if !current_file.dirty:
var file_metadata := _get_file_metadata(current_file.file_path) var file_metadata := _get_file_metadata(current_file.file_path)
@ -107,7 +122,7 @@ func _on_FileTree_item_selected() -> void:
func _on_FileTree_item_rmb_selected(position: Vector2) -> void: func _on_FileTree_item_rmb_selected(position: Vector2) -> void:
# var item: TreeItem = file_tree.get_selected() current_tree_selection = file_tree.get_selected()
file_tree_context_menu.rect_position = position + file_tree.rect_global_position file_tree_context_menu.rect_position = position + file_tree.rect_global_position
file_tree_context_menu.popup() file_tree_context_menu.popup()
@ -165,6 +180,20 @@ func _get_file_metadata(path: String) -> Dictionary:
return res return res
func _on_FileTreeContextMenu_id_pressed(id: int) -> void:
var idx = current_tree_selection.get_metadata(0)["id"] as int
var fd = working_files[idx] as FileDef
match id:
ContextMenuOptions.MOVE_DOWN:
working_files.remove(idx)
working_files.insert(idx + 1, fd)
_reconstruct_tree_from_working_files()
ContextMenuOptions.MOVE_UP:
working_files.remove(idx)
working_files.insert(idx - 1, fd)
_reconstruct_tree_from_working_files()
func _on_DocTitleLineEdit_text_changed(new_text: String) -> void: func _on_DocTitleLineEdit_text_changed(new_text: String) -> void:
if current_file: if current_file:
current_file.title = new_text current_file.title = new_text

View File

@ -253,3 +253,4 @@ items = [ "Move Up", null, 0, false, false, 0, 0, null, "", false, "Move Down",
[connection signal="text_changed" from="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer/VBoxContainer/HBoxContainer2/DocDateLineEdit" to="." method="_on_DocDateLineEdit_text_changed"] [connection signal="text_changed" from="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer/VBoxContainer/HBoxContainer2/DocDateLineEdit" to="." method="_on_DocDateLineEdit_text_changed"]
[connection signal="text_changed" from="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer/VBoxContainer/HSplitContainer/ContentEditContainer/DocInputTextEdit" to="." method="_on_DocInputTextEdit_text_changed"] [connection signal="text_changed" from="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer/VBoxContainer/HSplitContainer/ContentEditContainer/DocInputTextEdit" to="." method="_on_DocInputTextEdit_text_changed"]
[connection signal="dir_selected" from="ServerFolderDialog" to="." method="set_server_dir"] [connection signal="dir_selected" from="ServerFolderDialog" to="." method="set_server_dir"]
[connection signal="id_pressed" from="FileTreeContextMenu" to="." method="_on_FileTreeContextMenu_id_pressed"]