1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-08 11:29:47 +00:00
Pixelorama/src/UI/Tabs.gd

75 lines
2.3 KiB
GDScript3
Raw Normal View History

2020-06-04 23:48:38 +00:00
extends Tabs
onready var unsaved_changes_dialog: ConfirmationDialog = Global.control.find_node(
"UnsavedCanvasDialog"
)
2020-06-04 23:48:38 +00:00
2021-11-23 00:36:22 +00:00
# Thanks to https://github.com/godotengine/godot/issues/64498#issuecomment-1217992089
func _gui_input(event: InputEvent) -> void:
if not event is InputEventMouseButton:
return
if !event.pressed or event.button_index != BUTTON_MIDDLE:
return
var rect := get_rect()
var w := rect.position.x
var w_limit := rect.size.x
for i in get_tab_count():
if i < get_tab_offset():
continue
w += get_tab_rect(i).size.x
if w_limit < w:
return
if get_tab_rect(i).has_point(event.position):
_on_Tabs_tab_close(i)
return
func _on_Tabs_tab_changed(tab: int) -> void:
2020-06-04 23:48:38 +00:00
Global.current_project_index = tab
func _on_Tabs_tab_close(tab: int) -> void:
if Global.projects.size() == 1:
2020-06-04 23:48:38 +00:00
return
if Global.projects[tab].has_changed:
2021-11-23 00:36:22 +00:00
if !unsaved_changes_dialog.is_connected("confirmed", self, "delete_tab"):
unsaved_changes_dialog.connect("confirmed", self, "delete_tab", [tab])
unsaved_changes_dialog.popup_centered()
2020-06-05 14:50:52 +00:00
Global.dialog_open(true)
else:
delete_tab(tab)
2020-06-04 23:48:38 +00:00
2020-06-05 14:50:52 +00:00
func _on_Tabs_reposition_active_tab_request(idx_to: int) -> void:
var temp: Project = Global.projects[Global.current_project_index]
Global.projects.erase(temp)
Global.projects.insert(idx_to, temp)
2020-06-05 14:50:52 +00:00
# Change save paths
var temp_save_path = OpenSave.current_save_paths[Global.current_project_index]
2023-08-20 18:45:35 +00:00
OpenSave.current_save_paths.remove(Global.current_project_index)
OpenSave.current_save_paths.insert(idx_to, temp_save_path)
var temp_backup_path = OpenSave.backup_save_paths[Global.current_project_index]
2023-08-20 18:45:35 +00:00
OpenSave.backup_save_paths.remove(Global.current_project_index)
OpenSave.backup_save_paths.insert(idx_to, temp_backup_path)
2020-06-05 14:50:52 +00:00
func delete_tab(tab: int) -> void:
2020-06-05 14:50:52 +00:00
remove_tab(tab)
Global.projects[tab].remove()
OpenSave.remove_backup(tab)
OpenSave.current_save_paths.remove(tab)
OpenSave.backup_save_paths.remove(tab)
if Global.current_project_index == tab:
if tab > 0:
Global.current_project_index -= 1
else:
Global.current_project_index = 0
else:
if tab < Global.current_project_index:
Global.current_project_index -= 1
2021-11-23 00:36:22 +00:00
if unsaved_changes_dialog.is_connected("confirmed", self, "delete_tab"):
unsaved_changes_dialog.disconnect("confirmed", self, "delete_tab")