From 06ca73c6f857fa723497ad7a33c50f8fe6e05845 Mon Sep 17 00:00:00 2001 From: yanorax Date: Wed, 17 May 2017 20:55:55 +1000 Subject: [PATCH] Add column_title_pressed signal to Tree node The Tree node column/table form is missing the ability to capture column title clicks easily. Adding this functionality will give us the ability to create functions such as sort by column, which is a common table manipulation ability in games/apps. https://godotengine.org/qa/7699 (cherry picked from commit 7b00ad22b94bd3f6194b25457f83d6240493217a) --- scene/gui/tree.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 60d0181971e..0a5d57772c1 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -2180,6 +2180,26 @@ void Tree::_input_event(InputEvent p_event) { if (b.button_index == BUTTON_LEFT) { + Ref bg = cache.bg; + + Point2 pos = Point2(b.x, b.y) - bg->get_offset(); + if (show_column_titles) { + pos.y -= _get_title_button_height(); + + if (pos.y < 0) { + pos.x += cache.offset.x; + int len = 0; + for (int i = 0; i < columns.size(); i++) { + + len += get_column_width(i); + if (pos.x < len) { + emit_signal("column_title_pressed", i); + break; + } + } + } + } + if (single_select_defer) { select_single_item(single_select_defer, root, single_select_defer_column); single_select_defer = NULL; @@ -3408,6 +3428,7 @@ void Tree::_bind_methods() { ADD_SIGNAL(MethodInfo("button_pressed", PropertyInfo(Variant::OBJECT, "item"), PropertyInfo(Variant::INT, "column"), PropertyInfo(Variant::INT, "id"))); ADD_SIGNAL(MethodInfo("custom_popup_edited", PropertyInfo(Variant::BOOL, "arrow_clicked"))); ADD_SIGNAL(MethodInfo("item_activated")); + ADD_SIGNAL(MethodInfo("column_title_pressed", PropertyInfo(Variant::INT, "column"))); BIND_CONSTANT(SELECT_SINGLE); BIND_CONSTANT(SELECT_ROW);