1
0
mirror of https://github.com/godotengine/godot.git synced 2025-12-03 16:55:53 +00:00

Merge pull request #112729 from KoBeWi/multi_group_yoink

Edit groups on multiple nodes
This commit is contained in:
Thaddeus Crews
2025-11-20 16:47:07 -06:00
8 changed files with 154 additions and 89 deletions

View File

@@ -1503,8 +1503,16 @@ void ConnectionsDock::_bind_methods() {
ClassDB::bind_method("update_tree", &ConnectionsDock::update_tree);
}
void ConnectionsDock::set_object(Object *p_obj) {
selected_object = p_obj;
void ConnectionsDock::set_selection(const Vector<Object *> &p_objects) {
if (p_objects.size() != 1) {
select_a_node->show();
holder->hide();
selected_object = nullptr;
} else {
select_a_node->hide();
holder->show();
selected_object = p_objects[0];
}
is_editing_resource = (Object::cast_to<Resource>(selected_object) != nullptr);
update_tree();
}
@@ -1699,7 +1707,10 @@ void ConnectionsDock::update_tree() {
ConnectionsDock::ConnectionsDock() {
set_name(TTR("Signals"));
VBoxContainer *vbc = this;
holder = memnew(VBoxContainer);
holder->set_v_size_flags(SIZE_EXPAND_FILL);
holder->hide();
add_child(holder);
search_box = memnew(LineEdit);
search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL);
@@ -1707,7 +1718,7 @@ ConnectionsDock::ConnectionsDock() {
search_box->set_accessibility_name(TTRC("Filter Signals"));
search_box->set_clear_button_enabled(true);
search_box->connect(SceneStringName(text_changed), callable_mp(this, &ConnectionsDock::_filter_changed));
vbc->add_child(search_box);
holder->add_child(search_box);
tree = memnew(ConnectionsDockTree);
tree->set_accessibility_name(TTRC("Connections"));
@@ -1716,24 +1727,24 @@ ConnectionsDock::ConnectionsDock() {
tree->set_select_mode(Tree::SELECT_ROW);
tree->set_hide_root(true);
tree->set_column_clip_content(0, true);
vbc->add_child(tree);
holder->add_child(tree);
tree->set_v_size_flags(Control::SIZE_EXPAND_FILL);
tree->set_allow_rmb_select(true);
connect_button = memnew(Button);
connect_button->set_accessibility_name(TTRC("Connect"));
HBoxContainer *hb = memnew(HBoxContainer);
vbc->add_child(hb);
holder->add_child(hb);
hb->add_spacer();
hb->add_child(connect_button);
connect_button->connect(SceneStringName(pressed), callable_mp(this, &ConnectionsDock::_connect_pressed));
connect_dialog = memnew(ConnectDialog);
connect_dialog->set_process_shortcut_input(true);
add_child(connect_dialog);
holder->add_child(connect_dialog);
disconnect_all_dialog = memnew(ConfirmationDialog);
add_child(disconnect_all_dialog);
holder->add_child(disconnect_all_dialog);
disconnect_all_dialog->connect(SceneStringName(confirmed), callable_mp(this, &ConnectionsDock::_disconnect_all));
disconnect_all_dialog->set_text(TTR("Are you sure you want to remove all connections from this signal?"));
@@ -1741,7 +1752,7 @@ ConnectionsDock::ConnectionsDock() {
class_menu->connect(SceneStringName(id_pressed), callable_mp(this, &ConnectionsDock::_handle_class_menu_option));
class_menu->connect("about_to_popup", callable_mp(this, &ConnectionsDock::_class_menu_about_to_popup));
class_menu->add_item(TTR("Open Documentation"), CLASS_MENU_OPEN_DOCS);
add_child(class_menu);
holder->add_child(class_menu);
signal_menu = memnew(PopupMenu);
signal_menu->connect(SceneStringName(id_pressed), callable_mp(this, &ConnectionsDock::_handle_signal_menu_option));
@@ -1751,7 +1762,7 @@ ConnectionsDock::ConnectionsDock() {
signal_menu->add_item(TTR("Copy Name"), SIGNAL_MENU_COPY_NAME);
signal_menu->add_separator();
signal_menu->add_item(TTR("Open Documentation"), SIGNAL_MENU_OPEN_DOCS);
add_child(signal_menu);
holder->add_child(signal_menu);
slot_menu = memnew(PopupMenu);
slot_menu->connect(SceneStringName(id_pressed), callable_mp(this, &ConnectionsDock::_handle_slot_menu_option));
@@ -1759,7 +1770,7 @@ ConnectionsDock::ConnectionsDock() {
slot_menu->add_item(TTR("Edit..."), SLOT_MENU_EDIT);
slot_menu->add_item(TTR("Go to Method"), SLOT_MENU_GO_TO_METHOD);
slot_menu->add_shortcut(ED_SHORTCUT("connections_editor/disconnect", TTRC("Disconnect"), Key::KEY_DELETE), SLOT_MENU_DISCONNECT);
add_child(slot_menu);
holder->add_child(slot_menu);
connect_dialog->connect("connected", callable_mp(this, &ConnectionsDock::_make_or_edit_connection));
tree->connect(SceneStringName(item_selected), callable_mp(this, &ConnectionsDock::_tree_item_selected));
@@ -1767,4 +1778,14 @@ ConnectionsDock::ConnectionsDock() {
tree->connect(SceneStringName(gui_input), callable_mp(this, &ConnectionsDock::_tree_gui_input));
add_theme_constant_override("separation", 3 * EDSCALE);
select_a_node = memnew(Label);
select_a_node->set_focus_mode(FOCUS_ACCESSIBILITY);
select_a_node->set_text(TTRC("Select a single node or resource to edit its signals."));
select_a_node->set_custom_minimum_size(Size2(100 * EDSCALE, 0));
select_a_node->set_v_size_flags(SIZE_EXPAND_FILL);
select_a_node->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
select_a_node->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
select_a_node->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
add_child(select_a_node);
}