From b276999b123854272fc9e510a7ec86cbc0db6c1a Mon Sep 17 00:00:00 2001 From: OverloadedOrama <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 5 Jun 2020 17:50:52 +0300 Subject: [PATCH] Closing tabs is now possible --- src/Autoload/Global.gd | 2 ++ src/Classes/Project.gd | 2 ++ src/Main.gd | 10 +--------- src/Main.tscn | 1 - src/UI/Tabs.gd | 26 ++++++++++++++++++++++---- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index f93830b..76ea96e 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -152,6 +152,7 @@ var zoom_level_label : Label var import_sprites_dialog : FileDialog var export_dialog : AcceptDialog var preferences_dialog : AcceptDialog +var unsaved_changes_dialog : ConfirmationDialog var color_pickers := [] @@ -268,6 +269,7 @@ func _ready() -> void: import_sprites_dialog = find_node_by_name(root, "ImportSprites") export_dialog = find_node_by_name(root, "ExportDialog") preferences_dialog = find_node_by_name(root, "PreferencesDialog") + unsaved_changes_dialog = find_node_by_name(root, "UnsavedCanvasDialog") tool_options_containers.append(find_node_by_name(root, "LeftToolOptions")) tool_options_containers.append(find_node_by_name(root, "RightToolOptions")) diff --git a/src/Classes/Project.gd b/src/Classes/Project.gd index ea8bbec..fa76fe7 100644 --- a/src/Classes/Project.gd +++ b/src/Classes/Project.gd @@ -116,6 +116,8 @@ func change_project() -> void: for brush in brushes: Global.create_brush_button(brush) + Global.canvas.update() + func frames_changed(value : Array) -> void: frames = value diff --git a/src/Main.gd b/src/Main.gd index 7670b2a..100c0d2 100644 --- a/src/Main.gd +++ b/src/Main.gd @@ -254,11 +254,7 @@ func open_project_file() -> void: func on_open_last_project_file_menu_option_pressed() -> void: # Check if last project path is set and if yes then open if Global.config_cache.has_section_key("preferences", "last_project_path"): - if Global.current_project.has_changed: - $UnsavedCanvasDialog.popup_centered() - Global.dialog_open(true) - else: - load_last_project() + load_last_project() else: # if not then warn user that he didn't edit any project yet Global.error_dialog.set_text("You haven't saved or opened any project in Pixelorama yet!") Global.error_dialog.popup_centered() @@ -548,10 +544,6 @@ func load_last_project() -> void: Global.dialog_open(true) -func _on_UnsavedCanvasDialog_confirmed() -> void: - load_last_project() - - func _on_OpenSprite_file_selected(path : String) -> void: OpenSave.open_pxo_file(path) diff --git a/src/Main.tscn b/src/Main.tscn index 2a510a7..e4ef06a 100644 --- a/src/Main.tscn +++ b/src/Main.tscn @@ -127,7 +127,6 @@ visible = false [connection signal="popup_hide" from="RotateImage" to="." method="_can_draw_true"] [connection signal="popup_hide" from="OutlineDialog" to="." method="_can_draw_true"] [connection signal="popup_hide" from="AboutDialog" to="." method="_can_draw_true"] -[connection signal="confirmed" from="UnsavedCanvasDialog" to="." method="_on_UnsavedCanvasDialog_confirmed"] [connection signal="popup_hide" from="UnsavedCanvasDialog" to="." method="_can_draw_true"] [connection signal="confirmed" from="QuitDialog" to="." method="_on_QuitDialog_confirmed"] [connection signal="popup_hide" from="QuitDialog" to="." method="_can_draw_true"] diff --git a/src/UI/Tabs.gd b/src/UI/Tabs.gd index 4977b11..ee583ee 100644 --- a/src/UI/Tabs.gd +++ b/src/UI/Tabs.gd @@ -1,15 +1,33 @@ extends Tabs -func _on_Tabs_tab_changed(tab : int): +func _on_Tabs_tab_changed(tab : int) -> void: Global.current_project_index = tab - Global.canvas.update() -func _on_Tabs_tab_close(tab : int): +func _on_Tabs_tab_close(tab : int) -> void: if Global.projects.size() == 1: return + if Global.current_project.has_changed: + if !Global.unsaved_changes_dialog.is_connected("confirmed", self, "delete_tab"): + Global.unsaved_changes_dialog.connect("confirmed", self, "delete_tab", [tab]) + Global.unsaved_changes_dialog.popup_centered() + Global.dialog_open(true) + else: + delete_tab(tab) -func _on_Tabs_reposition_active_tab_request(idx_to : int): + +func _on_Tabs_reposition_active_tab_request(idx_to : int) -> void: pass + + +func delete_tab(tab : int) -> void: + remove_tab(tab) + Global.current_project.undo_redo.free() + Global.projects.remove(tab) + if tab > 0: + Global.current_project_index -= 1 + else: + Global.current_project_index = 0 + Global.unsaved_changes_dialog.disconnect("confirmed", self, "delete_tab")