Improve locale detection.

Use separate language, script and country lists.
Add locale selection dialog and property hint.
This commit is contained in:
bruvzg 2021-09-23 14:08:50 +03:00
parent 0a67b46396
commit 40c56ed410
No known key found for this signature in database
GPG key ID: 7960FCF39844EC38
28 changed files with 2430 additions and 1635 deletions

View file

@ -343,6 +343,64 @@ EditorPropertyTextEnum::EditorPropertyTextEnum() {
add_focusable(cancel_button);
}
//////////////////// LOCALE ////////////////////////
void EditorPropertyLocale::_locale_selected(const String &p_locale) {
emit_changed(get_edited_property(), p_locale);
update_property();
}
void EditorPropertyLocale::_locale_pressed() {
if (!dialog) {
dialog = memnew(EditorLocaleDialog);
dialog->connect("locale_selected", callable_mp(this, &EditorPropertyLocale::_locale_selected));
add_child(dialog);
}
String locale_code = get_edited_object()->get(get_edited_property());
dialog->set_locale(locale_code);
dialog->popup_locale_dialog();
}
void EditorPropertyLocale::update_property() {
String locale_code = get_edited_object()->get(get_edited_property());
locale->set_text(locale_code);
locale->set_tooltip(locale_code);
}
void EditorPropertyLocale::setup(const String &p_hint_text) {
}
void EditorPropertyLocale::_notification(int p_what) {
if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
locale_edit->set_icon(get_theme_icon(SNAME("Translation"), SNAME("EditorIcons")));
}
}
void EditorPropertyLocale::_locale_focus_exited() {
_locale_selected(locale->get_text());
}
void EditorPropertyLocale::_bind_methods() {
}
EditorPropertyLocale::EditorPropertyLocale() {
HBoxContainer *locale_hb = memnew(HBoxContainer);
add_child(locale_hb);
locale = memnew(LineEdit);
locale_hb->add_child(locale);
locale->connect("text_submitted", callable_mp(this, &EditorPropertyLocale::_locale_selected));
locale->connect("focus_exited", callable_mp(this, &EditorPropertyLocale::_locale_focus_exited));
locale->set_h_size_flags(SIZE_EXPAND_FILL);
locale_edit = memnew(Button);
locale_edit->set_clip_text(true);
locale_hb->add_child(locale_edit);
add_focusable(locale);
dialog = nullptr;
locale_edit->connect("pressed", callable_mp(this, &EditorPropertyLocale::_locale_pressed));
}
///////////////////// PATH /////////////////////////
void EditorPropertyPath::_set_read_only(bool p_read_only) {
@ -3379,6 +3437,10 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_
EditorPropertyClassName *editor = memnew(EditorPropertyClassName);
editor->setup("Object", p_hint_text);
return editor;
} else if (p_hint == PROPERTY_HINT_LOCALE_ID) {
EditorPropertyLocale *editor = memnew(EditorPropertyLocale);
editor->setup(p_hint_text);
return editor;
} else if (p_hint == PROPERTY_HINT_DIR || p_hint == PROPERTY_HINT_FILE || p_hint == PROPERTY_HINT_SAVE_FILE || p_hint == PROPERTY_HINT_GLOBAL_DIR || p_hint == PROPERTY_HINT_GLOBAL_FILE) {
Vector<String> extensions = p_hint_text.split(",");
bool global = p_hint == PROPERTY_HINT_GLOBAL_DIR || p_hint == PROPERTY_HINT_GLOBAL_FILE;