diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2022-02-05 14:36:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-05 14:36:33 +0100 |
commit | dd9426d14b5d37616b54f3e94fc96745f80b3fae (patch) | |
tree | 06eeb93d1f4b00608b7e59f76ea3d9c869610949 | |
parent | df1724470d1cff4f67aeb4c0d039114373aeb001 (diff) | |
parent | 8acc8838c4b95e645a61b417e8a89fd14990a555 (diff) |
Merge pull request #56503 from gerhean/Add-shortcut_cell-double-click-functionality
Add shortcut_cell double click functionality
-rw-r--r-- | editor/editor_settings_dialog.cpp | 33 | ||||
-rw-r--r-- | editor/editor_settings_dialog.h | 1 | ||||
-rw-r--r-- | scene/gui/tree.cpp | 2 |
3 files changed, 35 insertions, 1 deletions
diff --git a/editor/editor_settings_dialog.cpp b/editor/editor_settings_dialog.cpp index 2520d662c5..1cb95226ec 100644 --- a/editor/editor_settings_dialog.cpp +++ b/editor/editor_settings_dialog.cpp @@ -513,6 +513,38 @@ void EditorSettingsDialog::_shortcut_button_pressed(Object *p_item, int p_column } } +void EditorSettingsDialog::_shortcut_cell_double_clicked() { + // When a shortcut cell is double clicked: + // If the cell has children and is in the bindings column, and if its first child is editable, + // then uncollapse the cell, and if the first child is the only child, then edit that child. + // If the cell is in the bindings column and can be edited, then edit it. + // If the cell is in the name column, then toggle collapse. + const ShortcutButton edit_btn_id = EditorSettingsDialog::SHORTCUT_EDIT; + const int edit_btn_col = 1; + TreeItem *ti = shortcuts->get_selected(); + String type = ti->get_meta("type"); + int col = shortcuts->get_selected_column(); + if (type == "shortcut" && col == 0) { + if (ti->get_first_child()) { + ti->set_collapsed(!ti->is_collapsed()); + } + } else if (type == "shortcut" && col == 1) { + if (ti->get_first_child()) { + TreeItem *child_ti = ti->get_first_child(); + if (child_ti->get_button_by_id(edit_btn_col, edit_btn_id) != -1) { + ti->set_collapsed(false); + if (ti->get_child_count() == 1) { + _shortcut_button_pressed(child_ti, edit_btn_col, edit_btn_id); + } + } + } + } else if (type == "event" && col == 1) { + if (ti->get_button_by_id(edit_btn_col, edit_btn_id) != -1) { + _shortcut_button_pressed(ti, edit_btn_col, edit_btn_id); + } + } +} + Variant EditorSettingsDialog::get_drag_data_fw(const Point2 &p_point, Control *p_from) { TreeItem *selected = shortcuts->get_selected(); @@ -692,6 +724,7 @@ EditorSettingsDialog::EditorSettingsDialog() { shortcuts->set_column_title(0, TTR("Name")); shortcuts->set_column_title(1, TTR("Binding")); shortcuts->connect("button_pressed", callable_mp(this, &EditorSettingsDialog::_shortcut_button_pressed)); + shortcuts->connect("item_activated", callable_mp(this, &EditorSettingsDialog::_shortcut_cell_double_clicked)); tab_shortcuts->add_child(shortcuts); shortcuts->set_drag_forwarding(this); diff --git a/editor/editor_settings_dialog.h b/editor/editor_settings_dialog.h index f1c4ea7770..c8858b4fcb 100644 --- a/editor/editor_settings_dialog.h +++ b/editor/editor_settings_dialog.h @@ -104,6 +104,7 @@ class EditorSettingsDialog : public AcceptDialog { void _update_shortcuts(); void _shortcut_button_pressed(Object *p_item, int p_column, int p_idx); + void _shortcut_cell_double_clicked(); void _builtin_action_popup_index_pressed(int p_index); diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 1b32884880..a190e08088 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -2490,7 +2490,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int /* process selection */ if (p_double_click && (!c.editable || c.mode == TreeItem::CELL_MODE_CUSTOM || c.mode == TreeItem::CELL_MODE_ICON /*|| c.mode==TreeItem::CELL_MODE_CHECK*/)) { //it's confusing for check - + // Emits the "item_activated" signal. propagate_mouse_activated = true; incr_search.clear(); |