diff --git a/material_maker/locale/locale.gd b/material_maker/locale/locale.gd index efef96a11..f0548a434 100644 --- a/material_maker/locale/locale.gd +++ b/material_maker/locale/locale.gd @@ -1,3 +1,4 @@ +class_name Locale extends Object const LOCALE_DIR : String = "user://locale" @@ -23,6 +24,9 @@ func add_translations(dest : Translation, src : Translation): dest.add_message(m, src.get_message(m)) func read_translations(): + for translation in TranslationServer.get_translations(): + TranslationServer.remove_translation(translation) + var translations : Dictionary = {} var dir : DirAccess = DirAccess.open(LOCALE_DIR) if dir != null: diff --git a/material_maker/windows/preferences/lang_option.gd b/material_maker/windows/preferences/lang_option.gd index d5dd32b08..bd94521fb 100644 --- a/material_maker/windows/preferences/lang_option.gd +++ b/material_maker/windows/preferences/lang_option.gd @@ -12,6 +12,7 @@ func init_from_locales(): locales.insert(0, "en") clear() for l in locales: + print(l) add_item(l+" - "+TranslationServer.get_locale_name(l)) func init_from_config(config : ConfigFile) -> void: diff --git a/material_maker/windows/preferences/language_download.gd b/material_maker/windows/preferences/language_download.gd index 205911355..c5a2c4760 100644 --- a/material_maker/windows/preferences/language_download.gd +++ b/material_maker/windows/preferences/language_download.gd @@ -7,7 +7,6 @@ var languages : Dictionary const INDEX_URL : String = "https://rodzill4.github.io/material-maker/languages.json" - func _ready(): var error = http_request.request(INDEX_URL) if error != OK: @@ -32,19 +31,32 @@ func _ready(): button = Button.new() button.text = "Download" $ScrollContainer/Languages.add_child(button) - button.connect("pressed", Callable(self, "download_language").bind(l)) + button.pressed.connect(download_language.bind(l, button)) var minimum_size : Vector2i = $ScrollContainer/Languages.get_minimum_size() content_scale_factor = mm_globals.ui_scale_factor() minimum_size *= content_scale_factor popup(Rect2i($ScrollContainer.get_global_mouse_position()*content_scale_factor, minimum_size)) -func download_language(l : String): +func download_language(l : String, button : Button): + http_request.cancel_request() + + # darken the popup to hint language file is being downloaded + var darken : ColorRect = preload("res://material_maker/darken.tscn").instantiate() + add_child(darken) + + button.text = tr("Loading..") var locale = load("res://material_maker/locale/locale.gd").new() locale.uninstall_translation(l) locale.create_translations_dir() var ext : String = languages[l].url.get_extension() - $HTTPRequest.download_file = locale.get_translations_dir().path_join(l+"."+ext) - var error = $HTTPRequest.request(languages[l].url) + http_request.download_file = locale.get_translations_dir().path_join(l+"."+ext) + var error = http_request.request(languages[l].url) if error == OK: #print("Downloading") + await http_request.request_completed mm_steam.unlock_achievement("ACH_POLYGLOT") + queue_free() + +func _on_focus_exited() -> void: + if not $HTTPRequest.get_http_client_status() == HTTPClient.Status.STATUS_DISCONNECTED: + queue_free() diff --git a/material_maker/windows/preferences/language_download.tscn b/material_maker/windows/preferences/language_download.tscn index 1a7b8506d..dd35e97ce 100644 --- a/material_maker/windows/preferences/language_download.tscn +++ b/material_maker/windows/preferences/language_download.tscn @@ -4,10 +4,11 @@ [node name="LanguageDownload" type="PopupPanel" unique_id=567521287] oversampling_override = 1.0 -visible = true +always_on_top = true script = ExtResource("1") [node name="HTTPRequest" type="HTTPRequest" parent="." unique_id=1866806840] +use_threads = true [node name="ScrollContainer" type="ScrollContainer" parent="." unique_id=1400833866] offset_left = 4.0 @@ -21,4 +22,5 @@ vertical_scroll_mode = 0 layout_mode = 2 columns = 3 +[connection signal="focus_exited" from="." to="." method="_on_focus_exited"] [connection signal="popup_hide" from="." to="." method="queue_free"] diff --git a/material_maker/windows/preferences/preferences.gd b/material_maker/windows/preferences/preferences.gd index 5c0e5a990..9de1cf026 100644 --- a/material_maker/windows/preferences/preferences.gd +++ b/material_maker/windows/preferences/preferences.gd @@ -31,44 +31,47 @@ func update_config(p : Node) -> void: c.update_config(config) update_config(c) -func _on_Apply_pressed(): +func _on_Apply_pressed() -> void: update_config(self) emit_signal("config_changed") -func _on_OK_pressed(): +func _on_OK_pressed() -> void: update_config(self) emit_signal("config_changed") queue_free() -func _on_Cancel_pressed(): +func _on_Cancel_pressed() -> void: queue_free() -func _on_InstallLanguage_pressed(): - var dialog = load("res://material_maker/windows/file_dialog/file_dialog.tscn").instantiate() +func _on_InstallLanguage_pressed() -> void: + var dialog : FileDialog = load("res://material_maker/windows/file_dialog/file_dialog.tscn").instantiate() dialog.min_size = Vector2(500, 500) dialog.access = FileDialog.ACCESS_FILESYSTEM dialog.file_mode = FileDialog.FILE_MODE_OPEN_FILE dialog.add_filter("*.po,*.position,*.csv;Translation file") - var files = await dialog.select_files() + var files : Array = await dialog.select_files() if files.size() > 0: - var locale = load("res://material_maker/locale/locale.gd").new() + var locale : Locale = Locale.new() locale.install_translation(files[0]) update_language_list() -func update_language_list(): +func update_language_list() -> void: %Language.init_from_locales() %Language.init_from_config(config) -func _on_DownloadLanguage_pressed(): - var download_popup = load("res://material_maker/windows/preferences/language_download.tscn").instantiate() +func _on_DownloadLanguage_pressed() -> void: + %DownloadLanguage.disabled = true + var download_popup : Popup = load("res://material_maker/windows/preferences/language_download.tscn").instantiate() mm_globals.main_window.add_child(download_popup) - download_popup.connect("tree_exited", Callable(self, "_on_DownloadLanguage_closed")) + download_popup.tree_exited.connect(_load_language_items) + download_popup.tree_exited.connect(func() -> void: %DownloadLanguage.disabled = false) -func _on_DownloadLanguage_closed(): - var locale = load("res://material_maker/locale/locale.gd").new() +func _load_language_items() -> void: + var locale = Locale.new() locale.read_translations() update_language_list() func _on_ready() -> void: + _load_language_items() %WinTabletDriver.visible = OS.get_name() == "Windows" %WinTabletDriverSpacer.visible = OS.get_name() == "Windows" diff --git a/material_maker/windows/preferences/preferences.tscn b/material_maker/windows/preferences/preferences.tscn index ae9e3dd54..d1993ed27 100644 --- a/material_maker/windows/preferences/preferences.tscn +++ b/material_maker/windows/preferences/preferences.tscn @@ -100,6 +100,7 @@ layout_mode = 2 text = "Install" [node name="DownloadLanguage" type="Button" parent="HSplitContainer/PreferencesPanel/VBoxContainer/TabContainer/General/VBoxContainer/Language/HBoxContainer" unique_id=1946949754] +unique_name_in_owner = true layout_mode = 2 text = "Download"