Allow selecting multiple files in the editor translation/remap dialogs

This makes it faster to add several translations.

The undo/redo messages were also tweaked to give better context.
This commit is contained in:
Hugo Locurcio 2021-03-31 15:56:01 +02:00
parent 48d7eff3e3
commit 35887a2afe
No known key found for this signature in database
GPG key ID: 39E8F8BE30B0A49C
2 changed files with 37 additions and 25 deletions

View file

@ -1156,20 +1156,29 @@ void ProjectSettingsEditor::_copy_to_platform(int p_which) {
} }
void ProjectSettingsEditor::add_translation(const String &p_translation) { void ProjectSettingsEditor::add_translation(const String &p_translation) {
_translation_add(p_translation); PoolStringArray translations;
translations.push_back(p_translation);
_translation_add(translations);
} }
void ProjectSettingsEditor::_translation_add(const String &p_path) { void ProjectSettingsEditor::_translation_add(const PoolStringArray &p_paths) {
PoolStringArray translations = ProjectSettings::get_singleton()->get("locale/translations"); PoolStringArray translations = ProjectSettings::get_singleton()->get("locale/translations");
for (int i = 0; i < p_paths.size(); i++) {
bool duplicate = false;
for (int j = 0; j < translations.size(); j++) {
if (translations[j] == p_paths[i]) {
duplicate = true;
break;
}
}
for (int i = 0; i < translations.size(); i++) { // Don't add duplicate translation paths.
if (translations[i] == p_path) { if (!duplicate) {
return; //exists translations.push_back(p_paths[i]);
} }
} }
translations.push_back(p_path); undo_redo->create_action(vformat(TTR("Add %d Translations"), p_paths.size()));
undo_redo->create_action(TTR("Add Translation"));
undo_redo->add_do_property(ProjectSettings::get_singleton(), "locale/translations", translations); undo_redo->add_do_property(ProjectSettings::get_singleton(), "locale/translations", translations);
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "locale/translations", ProjectSettings::get_singleton()->get("locale/translations")); undo_redo->add_undo_property(ProjectSettings::get_singleton(), "locale/translations", ProjectSettings::get_singleton()->get("locale/translations"));
undo_redo->add_do_method(this, "_update_translations"); undo_redo->add_do_method(this, "_update_translations");
@ -1209,7 +1218,7 @@ void ProjectSettingsEditor::_translation_res_file_open() {
translation_res_file_open->popup_centered_ratio(); translation_res_file_open->popup_centered_ratio();
} }
void ProjectSettingsEditor::_translation_res_add(const String &p_path) { void ProjectSettingsEditor::_translation_res_add(const PoolStringArray &p_paths) {
Variant prev; Variant prev;
Dictionary remaps; Dictionary remaps;
@ -1218,13 +1227,14 @@ void ProjectSettingsEditor::_translation_res_add(const String &p_path) {
prev = remaps; prev = remaps;
} }
if (remaps.has(p_path)) { for (int i = 0; i < p_paths.size(); i++) {
return; //pointless already has it if (!remaps.has(p_paths[i])) {
// Don't overwrite with an empty remap array if an array already exists for the given path.
remaps[p_paths[i]] = PoolStringArray();
}
} }
remaps[p_path] = PoolStringArray(); undo_redo->create_action(vformat(TTR("Translation Resource Remap: Add %d Path(s)"), p_paths.size()));
undo_redo->create_action(TTR("Add Remapped Path"));
undo_redo->add_do_property(ProjectSettings::get_singleton(), "locale/translation_remaps", remaps); undo_redo->add_do_property(ProjectSettings::get_singleton(), "locale/translation_remaps", remaps);
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "locale/translation_remaps", prev); undo_redo->add_undo_property(ProjectSettings::get_singleton(), "locale/translation_remaps", prev);
undo_redo->add_do_method(this, "_update_translations"); undo_redo->add_do_method(this, "_update_translations");
@ -1237,7 +1247,7 @@ void ProjectSettingsEditor::_translation_res_add(const String &p_path) {
void ProjectSettingsEditor::_translation_res_option_file_open() { void ProjectSettingsEditor::_translation_res_option_file_open() {
translation_res_option_file_open->popup_centered_ratio(); translation_res_option_file_open->popup_centered_ratio();
} }
void ProjectSettingsEditor::_translation_res_option_add(const String &p_path) { void ProjectSettingsEditor::_translation_res_option_add(const PoolStringArray &p_paths) {
ERR_FAIL_COND(!ProjectSettings::get_singleton()->has_setting("locale/translation_remaps")); ERR_FAIL_COND(!ProjectSettings::get_singleton()->has_setting("locale/translation_remaps"));
Dictionary remaps = ProjectSettings::get_singleton()->get("locale/translation_remaps"); Dictionary remaps = ProjectSettings::get_singleton()->get("locale/translation_remaps");
@ -1249,10 +1259,12 @@ void ProjectSettingsEditor::_translation_res_option_add(const String &p_path) {
ERR_FAIL_COND(!remaps.has(key)); ERR_FAIL_COND(!remaps.has(key));
PoolStringArray r = remaps[key]; PoolStringArray r = remaps[key];
r.push_back(p_path + ":" + "en"); for (int i = 0; i < p_paths.size(); i++) {
r.push_back(p_paths[i] + ":" + "en");
}
remaps[key] = r; remaps[key] = r;
undo_redo->create_action(TTR("Resource Remap Add Remap")); undo_redo->create_action(vformat(TTR("Translation Resource Remap: Add %d Remap(s)"), p_paths.size()));
undo_redo->add_do_property(ProjectSettings::get_singleton(), "locale/translation_remaps", remaps); undo_redo->add_do_property(ProjectSettings::get_singleton(), "locale/translation_remaps", remaps);
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "locale/translation_remaps", ProjectSettings::get_singleton()->get("locale/translation_remaps")); undo_redo->add_undo_property(ProjectSettings::get_singleton(), "locale/translation_remaps", ProjectSettings::get_singleton()->get("locale/translation_remaps"));
undo_redo->add_do_method(this, "_update_translations"); undo_redo->add_do_method(this, "_update_translations");
@ -1996,8 +2008,8 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
translation_file_open = memnew(EditorFileDialog); translation_file_open = memnew(EditorFileDialog);
add_child(translation_file_open); add_child(translation_file_open);
translation_file_open->set_mode(EditorFileDialog::MODE_OPEN_FILE); translation_file_open->set_mode(EditorFileDialog::MODE_OPEN_FILES);
translation_file_open->connect("file_selected", this, "_translation_add"); translation_file_open->connect("files_selected", this, "_translation_add");
} }
{ {
@ -2022,8 +2034,8 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
translation_res_file_open = memnew(EditorFileDialog); translation_res_file_open = memnew(EditorFileDialog);
add_child(translation_res_file_open); add_child(translation_res_file_open);
translation_res_file_open->set_mode(EditorFileDialog::MODE_OPEN_FILE); translation_res_file_open->set_mode(EditorFileDialog::MODE_OPEN_FILES);
translation_res_file_open->connect("file_selected", this, "_translation_res_add"); translation_res_file_open->connect("files_selected", this, "_translation_res_add");
thb = memnew(HBoxContainer); thb = memnew(HBoxContainer);
tvb->add_child(thb); tvb->add_child(thb);
@ -2052,8 +2064,8 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
translation_res_option_file_open = memnew(EditorFileDialog); translation_res_option_file_open = memnew(EditorFileDialog);
add_child(translation_res_option_file_open); add_child(translation_res_option_file_open);
translation_res_option_file_open->set_mode(EditorFileDialog::MODE_OPEN_FILE); translation_res_option_file_open->set_mode(EditorFileDialog::MODE_OPEN_FILES);
translation_res_option_file_open->connect("file_selected", this, "_translation_res_option_add"); translation_res_option_file_open->connect("files_selected", this, "_translation_res_option_add");
} }
{ {

View file

@ -139,16 +139,16 @@ class ProjectSettingsEditor : public AcceptDialog {
void _copy_to_platform(int p_which); void _copy_to_platform(int p_which);
void _translation_file_open(); void _translation_file_open();
void _translation_add(const String &p_path); void _translation_add(const PoolStringArray &p_paths);
void _translation_delete(Object *p_item, int p_column, int p_button); void _translation_delete(Object *p_item, int p_column, int p_button);
void _update_translations(); void _update_translations();
void _translation_res_file_open(); void _translation_res_file_open();
void _translation_res_add(const String &p_path); void _translation_res_add(const PoolStringArray &p_paths);
void _translation_res_delete(Object *p_item, int p_column, int p_button); void _translation_res_delete(Object *p_item, int p_column, int p_button);
void _translation_res_select(); void _translation_res_select();
void _translation_res_option_file_open(); void _translation_res_option_file_open();
void _translation_res_option_add(const String &p_path); void _translation_res_option_add(const PoolStringArray &p_paths);
void _translation_res_option_changed(); void _translation_res_option_changed();
void _translation_res_option_delete(Object *p_item, int p_column, int p_button); void _translation_res_option_delete(Object *p_item, int p_column, int p_button);