summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Alexsander <michaelalexsander@protonmail.com>2024-01-06 10:52:44 -0300
committerMichael Alexsander <michaelalexsander@protonmail.com>2024-01-06 10:52:44 -0300
commit7b8c0b3a34ffaa3fbed91af39a1a9fbbda94ba8a (patch)
tree5f68772e05b0a344e4c91ab9ea8ecf7513086630
parent13a0d6e9b253654f5cc2a44f3d0b3cae10440443 (diff)
downloadredot-engine-7b8c0b3a34ffaa3fbed91af39a1a9fbbda94ba8a.tar.gz
Parse the names of children of `TabContainer`s on POT generation
-rw-r--r--editor/plugins/packed_scene_translation_parser_plugin.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/editor/plugins/packed_scene_translation_parser_plugin.cpp b/editor/plugins/packed_scene_translation_parser_plugin.cpp
index 7cb5244af9..c5c791ca8e 100644
--- a/editor/plugins/packed_scene_translation_parser_plugin.cpp
+++ b/editor/plugins/packed_scene_translation_parser_plugin.cpp
@@ -52,9 +52,11 @@ Error PackedSceneEditorTranslationParserPlugin::parse_file(const String &p_path,
Ref<SceneState> state = Ref<PackedScene>(loaded_res)->get_state();
Vector<String> parsed_strings;
+ List<String> tabcontainer_paths;
for (int i = 0; i < state->get_node_count(); i++) {
String node_type = state->get_node_type(i);
- if (!ClassDB::is_parent_class(node_type, "Control") && !ClassDB::is_parent_class(node_type, "Window")) {
+ bool is_control = ClassDB::is_parent_class(node_type, "Control");
+ if (!is_control && !ClassDB::is_parent_class(node_type, "Window")) {
continue;
}
@@ -66,10 +68,28 @@ Error PackedSceneEditorTranslationParserPlugin::parse_file(const String &p_path,
break;
}
}
+
+ // Parse the names of children of `TabContainer`s, as they are used for tab titles.
+ if (!tabcontainer_paths.is_empty()) {
+ String parent_path = state->get_node_path(i, true);
+ if (!parent_path.begins_with(tabcontainer_paths[tabcontainer_paths.size() - 1])) {
+ // Switch to the previous `TabContainer` this was nested in, if that was the case.
+ tabcontainer_paths.pop_back();
+ }
+
+ if (is_control && auto_translating && !tabcontainer_paths.is_empty() && parent_path == tabcontainer_paths[tabcontainer_paths.size() - 1]) {
+ parsed_strings.push_back(state->get_node_name(i));
+ }
+ }
+
if (!auto_translating) {
continue;
}
+ if (node_type == "TabContainer") {
+ tabcontainer_paths.push_back(state->get_node_path(i));
+ }
+
for (int j = 0; j < state->get_node_property_count(i); j++) {
String property_name = state->get_node_property_name(i, j);
if (!lookup_properties.has(property_name) || (exception_list.has(node_type) && exception_list[node_type].has(property_name))) {