summaryrefslogtreecommitdiffstats
path: root/editor/script_editor_debugger.cpp
diff options
context:
space:
mode:
authorDmitry Koteroff <vortex@verona.im>2017-12-18 01:16:11 +0300
committerDmitry Koteroff <vortex@verona.im>2017-12-18 03:40:49 +0300
commitea14b0789b8442a930a4464e7e17a3473e2e221d (patch)
tree2ccf16a12d9cab2dc9abd3b178847423ff12f263 /editor/script_editor_debugger.cpp
parent90d95c7ee17b94736045555f1810a2a920fd3b33 (diff)
downloadredot-engine-ea14b0789b8442a930a4464e7e17a3473e2e221d.tar.gz
A few small Debugger->Errors tab enhancements:
1. Added "Clear" button to clear list. 2. Errors list now populated with newest items comes first, so no need to scroll everytime. 3. Added PopupMenu to errors list with ability to quickly Copy error text & details.
Diffstat (limited to 'editor/script_editor_debugger.cpp')
-rw-r--r--editor/script_editor_debugger.cpp67
1 files changed, 66 insertions, 1 deletions
diff --git a/editor/script_editor_debugger.cpp b/editor/script_editor_debugger.cpp
index a1c1ec3351..4d807243a4 100644
--- a/editor/script_editor_debugger.cpp
+++ b/editor/script_editor_debugger.cpp
@@ -1686,6 +1686,45 @@ void ScriptEditorDebugger::_clear_remote_objects() {
remote_objects.clear();
}
+void ScriptEditorDebugger::_clear_errors_list() {
+
+ error_list->clear();
+ error_count = 0;
+ _notification(NOTIFICATION_PROCESS);
+}
+
+// Right click on specific file(s) or folder(s).
+void ScriptEditorDebugger::_error_list_item_rmb_selected(int p_item, const Vector2 &p_pos) {
+
+ item_menu->clear();
+ item_menu->set_size(Size2(1, 1));
+
+ // Allow specific actions only on one item.
+ bool single_item_selected = error_list->get_selected_items().size() == 1;
+
+ if (single_item_selected) {
+ item_menu->add_icon_item(get_icon("CopyNodePath", "EditorIcons"), TTR("Copy Error"), ITEM_MENU_COPY_ERROR);
+ }
+
+ if (item_menu->get_item_count() > 0) {
+ item_menu->set_position(error_list->get_global_position() + p_pos);
+ item_menu->popup();
+ }
+}
+
+void ScriptEditorDebugger::_item_menu_id_pressed(int p_option) {
+
+ switch (p_option) {
+
+ case ITEM_MENU_COPY_ERROR: {
+ String title = error_list->get_item_text(error_list->get_current());
+ String desc = error_list->get_item_tooltip(error_list->get_current());
+
+ OS::get_singleton()->set_clipboard(title + "\n----------\n" + desc);
+ } break;
+ }
+}
+
void ScriptEditorDebugger::_bind_methods() {
ClassDB::bind_method(D_METHOD("_stack_dump_frame_selected"), &ScriptEditorDebugger::_stack_dump_frame_selected);
@@ -1705,6 +1744,10 @@ void ScriptEditorDebugger::_bind_methods() {
ClassDB::bind_method(D_METHOD("_error_stack_selected"), &ScriptEditorDebugger::_error_stack_selected);
ClassDB::bind_method(D_METHOD("_profiler_activate"), &ScriptEditorDebugger::_profiler_activate);
ClassDB::bind_method(D_METHOD("_profiler_seeked"), &ScriptEditorDebugger::_profiler_seeked);
+ ClassDB::bind_method(D_METHOD("_clear_errors_list"), &ScriptEditorDebugger::_clear_errors_list);
+
+ ClassDB::bind_method(D_METHOD("_error_list_item_rmb_selected"), &ScriptEditorDebugger::_error_list_item_rmb_selected);
+ ClassDB::bind_method(D_METHOD("_item_menu_id_pressed"), &ScriptEditorDebugger::_item_menu_id_pressed);
ClassDB::bind_method(D_METHOD("_paused"), &ScriptEditorDebugger::_paused);
@@ -1829,9 +1872,31 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) {
error_split = memnew(HSplitContainer);
VBoxContainer *errvb = memnew(VBoxContainer);
+ HBoxContainer *errhb = memnew(HBoxContainer);
errvb->set_h_size_flags(SIZE_EXPAND_FILL);
+ Label *velb = memnew(Label(TTR("Errors:")));
+ velb->set_h_size_flags(SIZE_EXPAND_FILL);
+ errhb->add_child(velb);
+
+ clearbutton = memnew(Button);
+ clearbutton->set_text(TTR("Clear"));
+ clearbutton->connect("pressed", this, "_clear_errors_list");
+ errhb->add_child(clearbutton);
+ errvb->add_child(errhb);
+
error_list = memnew(ItemList);
- errvb->add_margin_child(TTR("Errors:"), error_list, true);
+ error_list->set_v_size_flags(SIZE_EXPAND_FILL);
+ error_list->set_h_size_flags(SIZE_EXPAND_FILL);
+ error_list->connect("item_rmb_selected", this, "_error_list_item_rmb_selected");
+ error_list->set_allow_rmb_select(true);
+ error_list->set_autoscroll_to_bottom(true);
+
+ item_menu = memnew(PopupMenu);
+ item_menu->connect("id_pressed", this, "_item_menu_id_pressed");
+ error_list->add_child(item_menu);
+
+ errvb->add_child(error_list);
+
error_split->add_child(errvb);
errvb = memnew(VBoxContainer);