diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index f93830bc4..76ea96e4c 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 ea8bbec11..fa76fe75f 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 7670b2ae6..100c0d269 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 2a510a743..e4ef06aeb 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 4977b1128..ee583ee7d 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")