diff options
author | yanorax <sheppo21@gmail.com> | 2017-05-17 20:55:55 +1000 |
---|---|---|
committer | yanorax <sheppo21@gmail.com> | 2017-05-18 13:12:27 +1000 |
commit | 7b00ad22b94bd3f6194b25457f83d6240493217a (patch) | |
tree | 544ff5695f3ab8a834a990e6f420cc84524d19aa | |
parent | 98a329670227c726a5d7a196e5cba8dbdd54301b (diff) |
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
-rw-r--r-- | scene/gui/tree.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 67c97c2e52..f77b160f57 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -2214,6 +2214,26 @@ void Tree::_gui_input(InputEvent p_event) { if (b.button_index == BUTTON_LEFT) { + Ref<StyleBox> 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; @@ -3456,6 +3476,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); |