Unverified Commit bb024ba9 by Rémi Verschelde Committed by GitHub

Merge pull request #35197 from asynts/asynts.disable-connect-button

Refactor (and fix) how the connect button is disabled.
parents cd8cafc3 e564b4fd
...@@ -146,7 +146,7 @@ void ConnectDialog::_tree_node_selected() { ...@@ -146,7 +146,7 @@ void ConnectDialog::_tree_node_selected() {
return; return;
dst_path = source->get_path_to(current); dst_path = source->get_path_to(current);
get_ok()->set_disabled(false); _update_ok_enabled();
} }
/* /*
...@@ -210,6 +210,27 @@ void ConnectDialog::_remove_bind() { ...@@ -210,6 +210,27 @@ void ConnectDialog::_remove_bind() {
cdbinds->notify_changed(); cdbinds->notify_changed();
} }
/*
* Enables or disables the connect button. The connect button is enabled if a
* node is selected and valid in the selected mode.
*/
void ConnectDialog::_update_ok_enabled() {
Node *target = tree->get_selected();
if (target == nullptr) {
get_ok()->set_disabled(true);
return;
}
if (!advanced->is_pressed() && target->get_script().is_null()) {
get_ok()->set_disabled(true);
return;
}
get_ok()->set_disabled(false);
}
void ConnectDialog::_notification(int p_what) { void ConnectDialog::_notification(int p_what) {
if (p_what == NOTIFICATION_ENTER_TREE) { if (p_what == NOTIFICATION_ENTER_TREE) {
...@@ -225,6 +246,7 @@ void ConnectDialog::_bind_methods() { ...@@ -225,6 +246,7 @@ void ConnectDialog::_bind_methods() {
ClassDB::bind_method("_tree_item_activated", &ConnectDialog::_tree_item_activated); ClassDB::bind_method("_tree_item_activated", &ConnectDialog::_tree_item_activated);
ClassDB::bind_method("_add_bind", &ConnectDialog::_add_bind); ClassDB::bind_method("_add_bind", &ConnectDialog::_add_bind);
ClassDB::bind_method("_remove_bind", &ConnectDialog::_remove_bind); ClassDB::bind_method("_remove_bind", &ConnectDialog::_remove_bind);
ClassDB::bind_method("_update_ok_enabled", &ConnectDialog::_update_ok_enabled);
ADD_SIGNAL(MethodInfo("connected")); ADD_SIGNAL(MethodInfo("connected"));
} }
...@@ -301,13 +323,12 @@ void ConnectDialog::init(Connection c, bool bEdit) { ...@@ -301,13 +323,12 @@ void ConnectDialog::init(Connection c, bool bEdit) {
tree->set_marked(source, true); tree->set_marked(source, true);
if (c.target) { if (c.target) {
get_ok()->set_disabled(false);
set_dst_node(static_cast<Node *>(c.target)); set_dst_node(static_cast<Node *>(c.target));
set_dst_method(c.method); set_dst_method(c.method);
} else {
get_ok()->set_disabled(true);
} }
_update_ok_enabled();
bool bDeferred = (c.flags & CONNECT_DEFERRED) == CONNECT_DEFERRED; bool bDeferred = (c.flags & CONNECT_DEFERRED) == CONNECT_DEFERRED;
bool bOneshot = (c.flags & CONNECT_ONESHOT) == CONNECT_ONESHOT; bool bOneshot = (c.flags & CONNECT_ONESHOT) == CONNECT_ONESHOT;
...@@ -350,6 +371,8 @@ void ConnectDialog::_advanced_pressed() { ...@@ -350,6 +371,8 @@ void ConnectDialog::_advanced_pressed() {
error_label->set_visible(!_find_first_script(get_tree()->get_edited_scene_root(), get_tree()->get_edited_scene_root())); error_label->set_visible(!_find_first_script(get_tree()->get_edited_scene_root(), get_tree()->get_edited_scene_root()));
} }
_update_ok_enabled();
set_position((get_viewport_rect().size - get_custom_minimum_size()) / 2); set_position((get_viewport_rect().size - get_custom_minimum_size()) / 2);
} }
......
...@@ -80,6 +80,7 @@ class ConnectDialog : public ConfirmationDialog { ...@@ -80,6 +80,7 @@ class ConnectDialog : public ConfirmationDialog {
void _add_bind(); void _add_bind();
void _remove_bind(); void _remove_bind();
void _advanced_pressed(); void _advanced_pressed();
void _update_ok_enabled();
protected: protected:
void _notification(int p_what); void _notification(int p_what);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment