diff --git a/project.godot b/project.godot index ee6705b..68df72c 100644 --- a/project.godot +++ b/project.godot @@ -287,11 +287,6 @@ save_file_as={ "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":true,"meta":false,"command":true,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null) ] } -import_file={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":73,"unicode":0,"echo":false,"script":null) - ] -} export_file={ "deadzone": 0.5, "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":69,"unicode":0,"echo":false,"script":null) diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 9e0a6ec..999acaa 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -151,7 +151,6 @@ var zoom_level_label : Label var open_sprites_dialog : FileDialog var save_sprites_dialog : FileDialog -var import_sprites_dialog : FileDialog var export_dialog : AcceptDialog var preferences_dialog : AcceptDialog var unsaved_changes_dialog : ConfirmationDialog @@ -270,7 +269,6 @@ func _ready() -> void: open_sprites_dialog = find_node_by_name(root, "OpenSprite") save_sprites_dialog = find_node_by_name(root, "SaveSprite") - 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") diff --git a/src/Autoload/OpenSave.gd b/src/Autoload/OpenSave.gd index 3f160f3..7df6c4d 100644 --- a/src/Autoload/OpenSave.gd +++ b/src/Autoload/OpenSave.gd @@ -16,6 +16,14 @@ func _ready() -> void: update_autosave() +func handle_loading_files(files : PoolStringArray) -> void: + for file in files: + if file.get_extension().to_lower() == "pxo": + open_pxo_file(file) + else: + open_image_file(file) + + func open_pxo_file(path : String, untitled_backup : bool = false) -> void: var file := File.new() var err := file.open_compressed(path, File.READ, File.COMPRESSION_ZSTD) @@ -78,6 +86,15 @@ func open_pxo_file(path : String, untitled_backup : bool = false) -> void: # Untitled backup should not change window title and save path current_save_paths[Global.current_project_index] = path Global.window_title = path.get_file() + " - Pixelorama " + Global.current_version + Global.save_sprites_dialog.current_path = path + # Set last opened project path and save + Global.config_cache.set_value("preferences", "last_project_path", path) + Global.config_cache.save("user://cache.ini") + Global.export_dialog.file_name = path.get_file().trim_suffix(".pxo") + Global.export_dialog.directory_path = path.get_base_dir() + Global.export_dialog.was_exported = false + Global.control.file_menu.set_item_text(3, tr("Save") + " %s" % path.get_file()) + Global.control.file_menu.set_item_text(5, tr("Export")) # For pxo files older than v0.8 @@ -260,11 +277,53 @@ func save_pxo_file(path : String, autosave : bool, project : Project = Global.cu Global.notification_label("File saved") Global.window_title = path.get_file() + " - Pixelorama " + Global.current_version + # Set last opened project path and save + Global.config_cache.set_value("preferences", "last_project_path", path) + Global.config_cache.save("user://cache.ini") + Global.export_dialog.file_name = path.get_file().trim_suffix(".pxo") + Global.export_dialog.directory_path = path.get_base_dir() + Global.export_dialog.was_exported = false + Global.control.file_menu.set_item_text(3, tr("Save") + " %s" % path.get_file()) + else: Global.notification_label("File failed to save") file.close() +func open_image_file(path : String) -> void: + var project := Global.current_project + var image := Image.new() + var err := image.load(path) + if err != OK: # An error occured + var file_name : String = path.get_file() + Global.error_dialog.set_text(tr("Can't load file '%s'.\nError code: %s") % [file_name, str(err)]) + Global.error_dialog.popup_centered() + Global.dialog_open(true) + return + + project = Project.new([], path.get_file()) + project.layers.append(Layer.new()) + Global.projects.append(project) + project.size = image.get_size() + + var frame := Frame.new() + image.convert(Image.FORMAT_RGBA8) + image.lock() + frame.cels.append(Cel.new(image, 1)) + + project.frames.append(frame) + Global.tabs.current_tab = Global.tabs.get_tab_count() - 1 + Global.canvas.camera_zoom() + + Global.window_title = path.get_file() + " (" + tr("imported") + ") - Pixelorama " + Global.current_version + if project.has_changed: + Global.window_title = Global.window_title + "(*)" + var file_name := path.get_basename().get_file() + var directory_path := path.get_basename().replace(file_name, "") + Global.export_dialog.directory_path = directory_path + Global.export_dialog.file_name = file_name + + func update_autosave() -> void: autosave_timer.stop() autosave_timer.wait_time = Global.autosave_interval * 60 # Interval parameter is in minutes, wait_time is seconds diff --git a/src/Main.gd b/src/Main.gd index c371c8c..0581927 100644 --- a/src/Main.gd +++ b/src/Main.gd @@ -43,7 +43,7 @@ func _ready() -> void: # If the user wants to run Pixelorama with arguments in terminal mode # or open files with Pixelorama directly, then handle that if OS.get_cmdline_args(): - handle_loading_files(OS.get_cmdline_args()) + OpenSave.handle_loading_files(OS.get_cmdline_args()) get_tree().connect("files_dropped", self, "_on_files_dropped") @@ -90,7 +90,6 @@ func setup_file_menu() -> void: 'Open last project...' : 0, "Save..." : InputMap.get_action_list("save_file")[0].get_scancode_with_modifiers(), "Save as..." : InputMap.get_action_list("save_file_as")[0].get_scancode_with_modifiers(), - "Import..." : InputMap.get_action_list("import_file")[0].get_scancode_with_modifiers(), "Export..." : InputMap.get_action_list("export_file")[0].get_scancode_with_modifiers(), "Export as..." : InputMap.get_action_list("export_file_as")[0].get_scancode_with_modifiers(), "Quit" : InputMap.get_action_list("quit")[0].get_scancode_with_modifiers(), @@ -223,21 +222,13 @@ func handle_backup() -> void: load_last_project() -func handle_loading_files(files : PoolStringArray) -> void: - for file in files: - if file.get_extension().to_lower() == "pxo": - _on_OpenSprite_file_selected(file) - else: - $ImportSprites._on_ImportSprites_files_selected([file]) - - func _notification(what : int) -> void: if what == MainLoop.NOTIFICATION_WM_QUIT_REQUEST: # Handle exit show_quit_dialog() func _on_files_dropped(_files : PoolStringArray, _screen : int) -> void: - handle_loading_files(_files) + OpenSave.handle_loading_files(_files) func on_new_project_file_menu_option_pressed() -> void: @@ -276,12 +267,6 @@ func save_project_file_as() -> void: Global.dialog_open(true) -func import_file() -> void: - $ImportSprites.popup_centered() - Global.dialog_open(true) - opensprite_file_selected = false - - func export_file() -> void: if $ExportDialog.was_exported == false: $ExportDialog.popup_centered() @@ -302,14 +287,12 @@ func file_menu_id_pressed(id : int) -> void: save_project_file() 4: # Save as save_project_file_as() - 5: # Import - import_file() - 6: # Export + 5: # Export export_file() - 7: # Export as + 6: # Export as $ExportDialog.popup_centered() Global.dialog_open(true) - 8: # Quit + 7: # Quit show_quit_dialog() @@ -550,7 +533,7 @@ func load_last_project() -> void: var file_path = Global.config_cache.get_value("preferences", "last_project_path") var file_check := File.new() if file_check.file_exists(file_path): # If yes then load the file - _on_OpenSprite_file_selected(file_path) + OpenSave.open_pxo_file(file_path) else: # If file doesn't exist on disk then warn user about this Global.error_dialog.set_text("Cannot find last project file.") @@ -559,35 +542,17 @@ func load_last_project() -> void: func _on_OpenSprite_file_selected(path : String) -> void: - OpenSave.open_pxo_file(path) - - $SaveSprite.current_path = path - # Set last opened project path and save - Global.config_cache.set_value("preferences", "last_project_path", path) - Global.config_cache.save("user://cache.ini") - $ExportDialog.file_name = path.get_file().trim_suffix(".pxo") - $ExportDialog.directory_path = path.get_base_dir() - $ExportDialog.was_exported = false - file_menu.set_item_text(3, tr("Save") + " %s" % path.get_file()) - file_menu.set_item_text(6, tr("Export")) + OpenSave.handle_loading_files([path]) func _on_SaveSprite_file_selected(path : String) -> void: OpenSave.save_pxo_file(path, false) - # Set last opened project path and save - Global.config_cache.set_value("preferences", "last_project_path", path) - Global.config_cache.save("user://cache.ini") - $ExportDialog.file_name = path.get_file().trim_suffix(".pxo") - $ExportDialog.directory_path = path.get_base_dir() - $ExportDialog.was_exported = false - file_menu.set_item_text(3, tr("Save") + " %s" % path.get_file()) - if is_quitting_on_save: _on_QuitDialog_confirmed() -func _on_ImportSprites_popup_hide() -> void: +func _on_OpenSprite_popup_hide() -> void: if !opensprite_file_selected: _can_draw_true() @@ -639,3 +604,4 @@ func _on_BackupConfirmation_delete(project_paths : Array, backup_paths : Array) # Reopen last project if Global.open_last_project: load_last_project() + diff --git a/src/Main.tscn b/src/Main.tscn index e4ef06a..f0fd625 100644 --- a/src/Main.tscn +++ b/src/Main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=2] +[gd_scene load_steps=18 format=2] [ext_resource path="res://assets/themes/dark/theme.tres" type="Theme" id=1] [ext_resource path="res://src/Main.gd" type="Script" id=2] @@ -10,7 +10,6 @@ [ext_resource path="res://src/UI/Dialogs/OpenSprite.tscn" type="PackedScene" id=12] [ext_resource path="res://src/UI/Dialogs/SplashDialog.tscn" type="PackedScene" id=27] [ext_resource path="res://src/UI/Dialogs/CreateNewImage.tscn" type="PackedScene" id=28] -[ext_resource path="res://src/UI/Dialogs/ImportSprites.tscn" type="PackedScene" id=29] [ext_resource path="res://src/UI/Dialogs/ScaleImage.tscn" type="PackedScene" id=31] [ext_resource path="res://src/Preferences/PreferencesDialog.tscn" type="PackedScene" id=32] [ext_resource path="res://src/UI/Dialogs/OutlineDialog.tscn" type="PackedScene" id=33] @@ -54,8 +53,6 @@ __meta__ = { [node name="SaveSprite" parent="." instance=ExtResource( 11 )] -[node name="ImportSprites" parent="." instance=ExtResource( 29 )] - [node name="ExportDialog" parent="." instance=ExtResource( 39 )] [node name="ScaleImage" parent="." instance=ExtResource( 31 )] @@ -117,10 +114,9 @@ visible = false [connection signal="popup_hide" from="SplashDialog" to="." method="_can_draw_true"] [connection signal="popup_hide" from="CreateNewImage" to="." method="_can_draw_true"] [connection signal="file_selected" from="OpenSprite" to="." method="_on_OpenSprite_file_selected"] -[connection signal="popup_hide" from="OpenSprite" to="." method="_on_ImportSprites_popup_hide"] +[connection signal="popup_hide" from="OpenSprite" to="." method="_on_OpenSprite_popup_hide"] [connection signal="file_selected" from="SaveSprite" to="." method="_on_SaveSprite_file_selected"] [connection signal="popup_hide" from="SaveSprite" to="." method="_can_draw_true"] -[connection signal="popup_hide" from="ImportSprites" to="." method="_can_draw_true"] [connection signal="popup_hide" from="ExportDialog" to="." method="_can_draw_true"] [connection signal="popup_hide" from="ScaleImage" to="." method="_can_draw_true"] [connection signal="popup_hide" from="PreferencesDialog" to="." method="_can_draw_true"] diff --git a/src/UI/Dialogs/OpenSprite.tscn b/src/UI/Dialogs/OpenSprite.tscn index 491d2ed..62bd9e9 100644 --- a/src/UI/Dialogs/OpenSprite.tscn +++ b/src/UI/Dialogs/OpenSprite.tscn @@ -7,6 +7,6 @@ window_title = "Open a File" resizable = true mode = 0 access = 2 -filters = PoolStringArray( "*.pxo ; Pixelorama Project" ) +filters = PoolStringArray( "*.pxo ; Pixelorama Project", "*.png ; PNG Image", "*.bmp ; BMP Image", "*.hdr ; Radiance HDR Image", "*.jpg,*.jpeg ; JPEG Image", "*.svg ; SVG Image", "*.tga ; TGA Image", "*.webp ; WebP Image" ) current_dir = "C:/Users" current_path = "C:/Users/"