3232
3333#include " core/config/project_settings.h"
3434#include " core/os/os.h"
35- #include " core/string/translation.h"
3635#include " scene/theme/theme_db.h"
3736
3837void ItemList::_shape_text (int p_idx) {
@@ -58,12 +57,12 @@ int ItemList::add_item(const String &p_item, const Ref<Texture2D> &p_texture, bo
5857 Item item;
5958 item.icon = p_texture;
6059 item.text = p_item;
61- item.xl_text = atr (p_item);
6260 item.selectable = p_selectable;
6361 items.push_back (item);
6462 int item_id = items.size () - 1 ;
6563
66- _shape_text (items.size () - 1 );
64+ items.write [item_id].xl_text = _atr (item_id, p_item);
65+ _shape_text (item_id);
6766
6867 queue_redraw ();
6968 shape_changed = true ;
@@ -95,7 +94,7 @@ void ItemList::set_item_text(int p_idx, const String &p_text) {
9594 }
9695
9796 items.write [p_idx].text = p_text;
98- items.write [p_idx].xl_text = atr ( p_text);
97+ items.write [p_idx].xl_text = _atr (p_idx, p_text);
9998 _shape_text (p_idx);
10099 queue_redraw ();
101100 shape_changed = true ;
@@ -141,6 +140,24 @@ String ItemList::get_item_language(int p_idx) const {
141140 return items[p_idx].language ;
142141}
143142
143+ void ItemList::set_item_auto_translate_mode (int p_idx, AutoTranslateMode p_mode) {
144+ if (p_idx < 0 ) {
145+ p_idx += get_item_count ();
146+ }
147+ ERR_FAIL_INDEX (p_idx, items.size ());
148+ if (items[p_idx].auto_translate_mode != p_mode) {
149+ items.write [p_idx].auto_translate_mode = p_mode;
150+ items.write [p_idx].xl_text = _atr (p_idx, items[p_idx].text );
151+ _shape_text (p_idx);
152+ queue_redraw ();
153+ }
154+ }
155+
156+ Node::AutoTranslateMode ItemList::get_item_auto_translate_mode (int p_idx) const {
157+ ERR_FAIL_INDEX_V (p_idx, items.size (), AUTO_TRANSLATE_MODE_INHERIT);
158+ return items[p_idx].auto_translate_mode ;
159+ }
160+
144161void ItemList::set_item_tooltip_enabled (int p_idx, const bool p_enabled) {
145162 if (p_idx < 0 ) {
146163 p_idx += get_item_count ();
@@ -1022,7 +1039,7 @@ void ItemList::_notification(int p_what) {
10221039 } break ;
10231040 case NOTIFICATION_TRANSLATION_CHANGED: {
10241041 for (int i = 0 ; i < items.size (); i++) {
1025- items.write [i].xl_text = atr ( items[i].text );
1042+ items.write [i].xl_text = _atr (i, items[i].text );
10261043 _shape_text (i);
10271044 }
10281045 shape_changed = true ;
@@ -1509,6 +1526,23 @@ void ItemList::_mouse_exited() {
15091526 }
15101527}
15111528
1529+ String ItemList::_atr (int p_idx, const String &p_text) const {
1530+ ERR_FAIL_INDEX_V (p_idx, items.size (), atr (p_text));
1531+ switch (items[p_idx].auto_translate_mode ) {
1532+ case AUTO_TRANSLATE_MODE_INHERIT: {
1533+ return atr (p_text);
1534+ } break ;
1535+ case AUTO_TRANSLATE_MODE_ALWAYS: {
1536+ return tr (p_text);
1537+ } break ;
1538+ case AUTO_TRANSLATE_MODE_DISABLED: {
1539+ return p_text;
1540+ } break ;
1541+ }
1542+
1543+ ERR_FAIL_V_MSG (atr (p_text), " Unexpected auto translate mode: " + itos (items[p_idx].auto_translate_mode ));
1544+ }
1545+
15121546int ItemList::get_item_at_position (const Point2 &p_pos, bool p_exact) const {
15131547 Vector2 pos = p_pos;
15141548 pos -= theme_cache.panel_style ->get_offset ();
@@ -1748,6 +1782,9 @@ void ItemList::_bind_methods() {
17481782 ClassDB::bind_method (D_METHOD (" set_item_language" , " idx" , " language" ), &ItemList::set_item_language);
17491783 ClassDB::bind_method (D_METHOD (" get_item_language" , " idx" ), &ItemList::get_item_language);
17501784
1785+ ClassDB::bind_method (D_METHOD (" set_item_auto_translate_mode" , " idx" , " mode" ), &ItemList::set_item_auto_translate_mode);
1786+ ClassDB::bind_method (D_METHOD (" get_item_auto_translate_mode" , " idx" ), &ItemList::get_item_auto_translate_mode);
1787+
17511788 ClassDB::bind_method (D_METHOD (" set_item_icon_transposed" , " idx" , " transposed" ), &ItemList::set_item_icon_transposed);
17521789 ClassDB::bind_method (D_METHOD (" is_item_icon_transposed" , " idx" ), &ItemList::is_item_icon_transposed);
17531790
0 commit comments