You've already forked godot
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:
@@ -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);
|
||||
|
||||
@@ -52,6 +52,10 @@ private:
|
||||
|
||||
EditorDebuggerInspector *inspector = nullptr;
|
||||
|
||||
LocalVector<String> expression_history;
|
||||
int expression_index = -1;
|
||||
|
||||
void _line_edit_gui_input(const Ref<InputEvent> &p_event);
|
||||
void _evaluate();
|
||||
void _clear();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user