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 ;
@@ -1512,6 +1529,23 @@ void ItemList::_mouse_exited() {
15121529 }
15131530}
15141531
1532+ String ItemList::_atr (int p_idx, const String &p_text) const {
1533+ ERR_FAIL_INDEX_V (p_idx, items.size (), atr (p_text));
1534+ switch (items[p_idx].auto_translate_mode ) {
1535+ case AUTO_TRANSLATE_MODE_INHERIT: {
1536+ return atr (p_text);
1537+ } break ;
1538+ case AUTO_TRANSLATE_MODE_ALWAYS: {
1539+ return tr (p_text);
1540+ } break ;
1541+ case AUTO_TRANSLATE_MODE_DISABLED: {
1542+ return p_text;
1543+ } break ;
1544+ }
1545+
1546+ ERR_FAIL_V_MSG (atr (p_text), " Unexpected auto translate mode: " + itos (items[p_idx].auto_translate_mode ));
1547+ }
1548+
15151549int ItemList::get_item_at_position (const Point2 &p_pos, bool p_exact) const {
15161550 Vector2 pos = p_pos;
15171551 pos -= theme_cache.panel_style ->get_offset ();
@@ -1751,6 +1785,9 @@ void ItemList::_bind_methods() {
17511785 ClassDB::bind_method (D_METHOD (" set_item_language" , " idx" , " language" ), &ItemList::set_item_language);
17521786 ClassDB::bind_method (D_METHOD (" get_item_language" , " idx" ), &ItemList::get_item_language);
17531787
1788+ ClassDB::bind_method (D_METHOD (" set_item_auto_translate_mode" , " idx" , " mode" ), &ItemList::set_item_auto_translate_mode);
1789+ ClassDB::bind_method (D_METHOD (" get_item_auto_translate_mode" , " idx" ), &ItemList::get_item_auto_translate_mode);
1790+
17541791 ClassDB::bind_method (D_METHOD (" set_item_icon_transposed" , " idx" , " transposed" ), &ItemList::set_item_icon_transposed);
17551792 ClassDB::bind_method (D_METHOD (" is_item_icon_transposed" , " idx" ), &ItemList::is_item_icon_transposed);
17561793
0 commit comments