MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / _tree_gui_input

Method _tree_gui_input

editor/docks/filesystem_dock.cpp:3729–3790  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3727}
3728
3729void FileSystemDock::_tree_gui_input(Ref<InputEvent> p_event) {
3730 Ref<InputEventMouseMotion> mm = p_event;
3731 if (mm.is_valid()) {
3732 TreeItem *item = tree->get_item_at_position(mm->get_position());
3733 if (item && holding_branch) {
3734 String fpath = item->get_metadata(0);
3735 while (!fpath.ends_with("/") && fpath != "res://" && item->get_parent()) { // Find the parent folder tree item.
3736 item = item->get_parent();
3737 fpath = item->get_metadata(0);
3738 }
3739
3740 TreeItem *deselect_item = tree->get_next_selected(tree->get_root());
3741 while (deselect_item) {
3742 deselect_item->deselect(0);
3743 deselect_item = tree->get_next_selected(deselect_item);
3744 }
3745 item->select(0);
3746
3747 if (display_mode != DisplayMode::DISPLAY_MODE_TREE_ONLY) {
3748 files->deselect_all();
3749 // Try to select the corresponding file list item.
3750 const int files_item_idx = files->find_metadata(fpath);
3751 if (files_item_idx != -1) {
3752 files->select(files_item_idx);
3753 }
3754 }
3755 }
3756 }
3757
3758 Ref<InputEventKey> key = p_event;
3759 if (key.is_valid() && key->is_pressed() && !key->is_echo()) {
3760 int option_id = _get_menu_option_from_key(key);
3761 if (option_id > -1) {
3762 _tree_rmb_option(option_id);
3763 } else {
3764 bool create = false;
3765 Callable custom_callback = EditorContextMenuPluginManager::get_singleton()->match_custom_shortcut(EditorContextMenuPlugin::CONTEXT_SLOT_FILESYSTEM, p_event);
3766 if (!custom_callback.is_valid()) {
3767 create = true;
3768 custom_callback = EditorContextMenuPluginManager::get_singleton()->match_custom_shortcut(EditorContextMenuPlugin::CONTEXT_SLOT_FILESYSTEM_CREATE, p_event);
3769 }
3770
3771 if (custom_callback.is_valid()) {
3772 PackedStringArray selected = _tree_get_selected(false);
3773 if (create) {
3774 if (selected.is_empty()) {
3775 selected.append("res://");
3776 } else if (selected.size() == 1) {
3777 selected.write[0] = selected[0].get_base_dir();
3778 } else {
3779 return;
3780 }
3781 }
3782 EditorContextMenuPluginManager::get_singleton()->invoke_callback(custom_callback, selected);
3783 } else {
3784 return;
3785 }
3786 }

Callers

nothing calls this directly

Calls 15

get_metadataMethod · 0.80
ends_withMethod · 0.80
get_next_selectedMethod · 0.80
find_metadataMethod · 0.80
is_echoMethod · 0.80
match_custom_shortcutMethod · 0.80
get_base_dirMethod · 0.80
invoke_callbackMethod · 0.80
sizeMethod · 0.65
is_validMethod · 0.45
get_item_at_positionMethod · 0.45
get_positionMethod · 0.45

Tested by

no test coverage detected