You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-12 13:20:55 +00:00
Refactor (and fix) how the connect button is disabled.
It should not be possible to click the "Connect" button unless - a node is selected, and - that node is valid in the current mode. The modes are the default and advanced modes which allow connecting to scripts and nodes respectively.
This commit is contained in:
@@ -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() {
|
|||||||
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() {
|
|||||||
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) {
|
|||||||
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() {
|
|||||||
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 {
|
|||||||
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user