@@ -56,6 +56,41 @@ void EditorExpressionEvaluator::add_value(const Array &p_array) {
5656 inspector->set_h_scroll (0 );
5757}
5858
59+ void EditorExpressionEvaluator::_line_edit_gui_input (const Ref<InputEvent> &p_event) {
60+ if (!expression_input->is_editing ()) {
61+ return ;
62+ }
63+
64+ const Ref<InputEventKey> k = p_event;
65+ if (k.is_null () || !k->is_pressed ()) {
66+ return ;
67+ }
68+
69+ if (k->is_action_pressed (" ui_up" , true )) {
70+ int size = expression_history.size ();
71+ if (expression_index < size - 1 ) {
72+ expression_index++;
73+
74+ const String &history_text = expression_history[expression_history.size () - expression_index - 1 ];
75+ expression_input->set_text (history_text);
76+ expression_input->set_caret_column (history_text.size ());
77+ }
78+ accept_event ();
79+ } else if (k->is_action_pressed (" ui_down" , true )) {
80+ if (expression_index > 0 ) {
81+ expression_index--;
82+
83+ const String &history_text = expression_history[expression_history.size () - expression_index - 1 ];
84+ expression_input->set_text (history_text);
85+ expression_input->set_caret_column (history_text.size ());
86+ } else if (expression_index == 0 ) {
87+ expression_index = -1 ;
88+ expression_input->clear ();
89+ }
90+ accept_event ();
91+ }
92+ }
93+
5994void EditorExpressionEvaluator::_evaluate () {
6095 const String &expression = expression_input->get_text ();
6196 if (expression.is_empty ()) {
@@ -66,6 +101,10 @@ void EditorExpressionEvaluator::_evaluate() {
66101 return ;
67102 }
68103
104+ expression_history.erase (expression);
105+ expression_history.push_back (expression);
106+ expression_index = -1 ;
107+
69108 editor_debugger->request_remote_evaluate (expression, editor_debugger->get_stack_script_frame ());
70109
71110 expression_input->clear ();
@@ -81,6 +120,7 @@ void EditorExpressionEvaluator::_remote_object_selected(ObjectID p_id) {
81120
82121void EditorExpressionEvaluator::_on_expression_input_changed (const String &p_expression) {
83122 evaluate_btn->set_disabled (p_expression.is_empty ());
123+ expression_index = -1 ;
84124}
85125
86126void EditorExpressionEvaluator::_on_debugger_breaked (bool p_breaked, bool p_can_debug) {
@@ -114,9 +154,11 @@ EditorExpressionEvaluator::EditorExpressionEvaluator() {
114154
115155 expression_input = memnew (LineEdit);
116156 expression_input->set_h_size_flags (Control::SIZE_EXPAND_FILL);
117- expression_input->set_placeholder (TTR (" Expression to evaluate" ));
157+ expression_input->set_placeholder (TTRC (" Expression to evaluate (Up/Down: Navigate history) " ));
118158 expression_input->set_accessibility_name (TTRC (" Expression to evaluate" ));
119159 expression_input->set_clear_button_enabled (true );
160+ expression_input->set_keep_editing_on_text_submit (true );
161+ expression_input->connect (SceneStringName (gui_input), callable_mp (this , &EditorExpressionEvaluator::_line_edit_gui_input));
120162 expression_input->connect (SceneStringName (text_submitted), callable_mp (this , &EditorExpressionEvaluator::_evaluate).unbind (1 ));
121163 expression_input->connect (SceneStringName (text_changed), callable_mp (this , &EditorExpressionEvaluator::_on_expression_input_changed));
122164 hb->add_child (expression_input);
0 commit comments