@@ -55,6 +55,41 @@ void EditorExpressionEvaluator::add_value(const Array &p_array) {
5555 inspector->set_h_scroll (0 );
5656}
5757
58+ void EditorExpressionEvaluator::_line_edit_gui_input (const Ref<InputEvent> &p_event) {
59+ if (!expression_input->is_editing ()) {
60+ return ;
61+ }
62+
63+ const Ref<InputEventKey> k = p_event;
64+ if (k.is_null () || !k->is_pressed ()) {
65+ return ;
66+ }
67+
68+ if (k->is_action_pressed (" ui_up" , true )) {
69+ int size = expression_history.size ();
70+ if (expression_index < size - 1 ) {
71+ expression_index++;
72+
73+ const String &history_text = expression_history[expression_history.size () - expression_index - 1 ];
74+ expression_input->set_text (history_text);
75+ expression_input->set_caret_column (history_text.size ());
76+ }
77+ accept_event ();
78+ } else if (k->is_action_pressed (" ui_down" , true )) {
79+ if (expression_index > 0 ) {
80+ expression_index--;
81+
82+ const String &history_text = expression_history[expression_history.size () - expression_index - 1 ];
83+ expression_input->set_text (history_text);
84+ expression_input->set_caret_column (history_text.size ());
85+ } else if (expression_index == 0 ) {
86+ expression_index = -1 ;
87+ expression_input->clear ();
88+ }
89+ accept_event ();
90+ }
91+ }
92+
5893void EditorExpressionEvaluator::_evaluate () {
5994 const String &expression = expression_input->get_text ();
6095 if (expression.is_empty ()) {
@@ -65,6 +100,10 @@ void EditorExpressionEvaluator::_evaluate() {
65100 return ;
66101 }
67102
103+ expression_history.erase (expression);
104+ expression_history.push_back (expression);
105+ expression_index = -1 ;
106+
68107 editor_debugger->request_remote_evaluate (expression, editor_debugger->get_stack_script_frame ());
69108
70109 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) {
@@ -110,9 +150,11 @@ EditorExpressionEvaluator::EditorExpressionEvaluator() {
110150
111151 expression_input = memnew (LineEdit);
112152 expression_input->set_h_size_flags (Control::SIZE_EXPAND_FILL);
113- expression_input->set_placeholder (TTR (" Expression to evaluate" ));
153+ expression_input->set_placeholder (TTRC (" Expression to evaluate (Up/Down: Navigate history) " ));
114154 expression_input->set_accessibility_name (TTRC (" Expression to evaluate" ));
115155 expression_input->set_clear_button_enabled (true );
156+ expression_input->set_keep_editing_on_text_submit (true );
157+ expression_input->connect (SceneStringName (gui_input), callable_mp (this , &EditorExpressionEvaluator::_line_edit_gui_input));
116158 expression_input->connect (SceneStringName (text_submitted), callable_mp (this , &EditorExpressionEvaluator::_evaluate).unbind (1 ));
117159 expression_input->connect (SceneStringName (text_changed), callable_mp (this , &EditorExpressionEvaluator::_on_expression_input_changed));
118160 hb->add_child (expression_input);
0 commit comments