1
0
mirror of https://github.com/godotengine/godot.git synced 2025-12-02 16:48:55 +00:00

Add expression history to evaluator

This commit is contained in:
kobewi
2025-07-08 00:27:49 +02:00
parent 4d1f26e1fd
commit 0d16f7893b
2 changed files with 47 additions and 1 deletions

View File

@@ -55,6 +55,41 @@ void EditorExpressionEvaluator::add_value(const Array &p_array) {
inspector->set_h_scroll(0);
}
void EditorExpressionEvaluator::_line_edit_gui_input(const Ref<InputEvent> &p_event) {
if (!expression_input->is_editing()) {
return;
}
const Ref<InputEventKey> k = p_event;
if (k.is_null() || !k->is_pressed()) {
return;
}
if (k->is_action_pressed("ui_up", true)) {
int size = expression_history.size();
if (expression_index < size - 1) {
expression_index++;
const String &history_text = expression_history[expression_history.size() - expression_index - 1];
expression_input->set_text(history_text);
expression_input->set_caret_column(history_text.size());
}
accept_event();
} else if (k->is_action_pressed("ui_down", true)) {
if (expression_index > 0) {
expression_index--;
const String &history_text = expression_history[expression_history.size() - expression_index - 1];
expression_input->set_text(history_text);
expression_input->set_caret_column(history_text.size());
} else if (expression_index == 0) {
expression_index = -1;
expression_input->clear();
}
accept_event();
}
}
void EditorExpressionEvaluator::_evaluate() {
const String &expression = expression_input->get_text();
if (expression.is_empty()) {
@@ -65,6 +100,10 @@ void EditorExpressionEvaluator::_evaluate() {
return;
}
expression_history.erase(expression);
expression_history.push_back(expression);
expression_index = -1;
editor_debugger->request_remote_evaluate(expression, editor_debugger->get_stack_script_frame());
expression_input->clear();
@@ -81,6 +120,7 @@ void EditorExpressionEvaluator::_remote_object_selected(ObjectID p_id) {
void EditorExpressionEvaluator::_on_expression_input_changed(const String &p_expression) {
evaluate_btn->set_disabled(p_expression.is_empty());
expression_index = -1;
}
void EditorExpressionEvaluator::_on_debugger_breaked(bool p_breaked, bool p_can_debug) {
@@ -110,9 +150,11 @@ EditorExpressionEvaluator::EditorExpressionEvaluator() {
expression_input = memnew(LineEdit);
expression_input->set_h_size_flags(Control::SIZE_EXPAND_FILL);
expression_input->set_placeholder(TTR("Expression to evaluate"));
expression_input->set_placeholder(TTRC("Expression to evaluate (Up/Down: Navigate history)"));
expression_input->set_accessibility_name(TTRC("Expression to evaluate"));
expression_input->set_clear_button_enabled(true);
expression_input->set_keep_editing_on_text_submit(true);
expression_input->connect(SceneStringName(gui_input), callable_mp(this, &EditorExpressionEvaluator::_line_edit_gui_input));
expression_input->connect(SceneStringName(text_submitted), callable_mp(this, &EditorExpressionEvaluator::_evaluate).unbind(1));
expression_input->connect(SceneStringName(text_changed), callable_mp(this, &EditorExpressionEvaluator::_on_expression_input_changed));
hb->add_child(expression_input);