@@ -185,6 +185,26 @@ TreeItem::TreeCellMode TreeItem::get_cell_mode(int p_column) const {
185185 return cells[p_column].mode ;
186186}
187187
188+ /* auto translate mode */
189+ void TreeItem::set_auto_translate_mode (int p_column, Node::AutoTranslateMode p_mode) {
190+ ERR_FAIL_INDEX (p_column, cells.size ());
191+
192+ if (cells[p_column].auto_translate_mode == p_mode) {
193+ return ;
194+ }
195+
196+ cells.write [p_column].auto_translate_mode = p_mode;
197+ cells.write [p_column].dirty = true ;
198+ cells.write [p_column].cached_minimum_size_dirty = true ;
199+
200+ _changed_notify (p_column);
201+ }
202+
203+ Node::AutoTranslateMode TreeItem::get_auto_translate_mode (int p_column) const {
204+ ERR_FAIL_INDEX_V (p_column, cells.size (), Node::AUTO_TRANSLATE_MODE_INHERIT);
205+ return cells[p_column].auto_translate_mode ;
206+ }
207+
188208/* multiline editable */
189209void TreeItem::set_edit_multiline (int p_column, bool p_multiline) {
190210 ERR_FAIL_INDEX (p_column, cells.size ());
@@ -247,6 +267,24 @@ void TreeItem::propagate_check(int p_column, bool p_emit_signal) {
247267 _propagate_check_through_parents (p_column, p_emit_signal);
248268}
249269
270+ String TreeItem::atr (int p_column, const String &p_text) const {
271+ ERR_FAIL_INDEX_V (p_column, cells.size (), tree->atr (p_text));
272+
273+ switch (cells[p_column].auto_translate_mode ) {
274+ case Node::AUTO_TRANSLATE_MODE_INHERIT: {
275+ return tree->atr (p_text);
276+ } break ;
277+ case Node::AUTO_TRANSLATE_MODE_ALWAYS: {
278+ return tree->tr (p_text);
279+ } break ;
280+ case Node::AUTO_TRANSLATE_MODE_DISABLED: {
281+ return p_text;
282+ } break ;
283+ }
284+
285+ ERR_FAIL_V_MSG (tree->atr (p_text), " Unexpected auto translate mode: " + itos (cells[p_column].auto_translate_mode ));
286+ }
287+
250288void TreeItem::_propagate_check_through_children (int p_column, bool p_checked, bool p_emit_signal) {
251289 TreeItem *current = get_first_child ();
252290 while (current) {
@@ -323,7 +361,7 @@ void TreeItem::set_text(int p_column, String p_text) {
323361 } else {
324362 // Don't auto translate if it's in string mode and editable, as the text can be changed to anything by the user.
325363 if (tree && (!cells[p_column].editable || cells[p_column].mode != TreeItem::CELL_MODE_STRING)) {
326- cells.write [p_column].xl_text = tree-> atr (p_text);
364+ cells.write [p_column].xl_text = atr (p_column, p_text);
327365 } else {
328366 cells.write [p_column].xl_text = p_text;
329367 }
@@ -1621,6 +1659,9 @@ void TreeItem::_bind_methods() {
16211659 ClassDB::bind_method (D_METHOD (" set_cell_mode" , " column" , " mode" ), &TreeItem::set_cell_mode);
16221660 ClassDB::bind_method (D_METHOD (" get_cell_mode" , " column" ), &TreeItem::get_cell_mode);
16231661
1662+ ClassDB::bind_method (D_METHOD (" set_auto_translate_mode" , " column" , " mode" ), &TreeItem::set_auto_translate_mode);
1663+ ClassDB::bind_method (D_METHOD (" get_auto_translate_mode" , " column" ), &TreeItem::get_auto_translate_mode);
1664+
16241665 ClassDB::bind_method (D_METHOD (" set_edit_multiline" , " column" , " multiline" ), &TreeItem::set_edit_multiline);
16251666 ClassDB::bind_method (D_METHOD (" is_edit_multiline" , " column" ), &TreeItem::is_edit_multiline);
16261667
@@ -2009,15 +2050,15 @@ void Tree::update_item_cell(TreeItem *p_item, int p_col) {
20092050
20102051 int option = (int )p_item->cells [p_col].val ;
20112052
2012- valtext = atr (ETR (" (Other)" ));
2053+ valtext = p_item-> atr (p_col, ETR (" (Other)" ));
20132054 Vector<String> strings = p_item->cells [p_col].text .split (" ," );
20142055 for (int j = 0 ; j < strings.size (); j++) {
20152056 int value = j;
20162057 if (!strings[j].get_slicec (' :' , 1 ).is_empty ()) {
20172058 value = strings[j].get_slicec (' :' , 1 ).to_int ();
20182059 }
20192060 if (option == value) {
2020- valtext = atr (strings[j].get_slicec (' :' , 0 ));
2061+ valtext = p_item-> atr (p_col, strings[j].get_slicec (' :' , 0 ));
20212062 break ;
20222063 }
20232064 }
@@ -2028,7 +2069,7 @@ void Tree::update_item_cell(TreeItem *p_item, int p_col) {
20282069 } else {
20292070 // Don't auto translate if it's in string mode and editable, as the text can be changed to anything by the user.
20302071 if (!p_item->cells [p_col].editable || p_item->cells [p_col].mode != TreeItem::CELL_MODE_STRING) {
2031- p_item->cells .write [p_col].xl_text = atr (p_item->cells [p_col].text );
2072+ p_item->cells .write [p_col].xl_text = p_item-> atr (p_col, p_item->cells [p_col].text );
20322073 } else {
20332074 p_item->cells .write [p_col].xl_text = p_item->cells [p_col].text ;
20342075 }
0 commit comments