From 09a6a2d8f83473b4893b4dd04ff31972e267d5d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Thu, 27 Feb 2020 22:49:16 +0100 Subject: [PATCH] Signals: Port more uses of connect_compat Those were problematic as they call a method of their parent class, but callable_mp does not allow that unless it's public. To solve it, we declare a local class that calls the parent class' method, which now needs to be protected to be accessible in the derived class. --- editor/connections_dialog.cpp | 14 ++++++++++---- editor/connections_dialog.h | 2 ++ editor/create_dialog.cpp | 6 +++++- editor/create_dialog.h | 1 + editor/editor_dir_dialog.cpp | 6 +++++- editor/editor_dir_dialog.h | 1 + editor/editor_sub_scene.cpp | 6 +++++- editor/editor_sub_scene.h | 1 + editor/project_export.cpp | 5 ++++- editor/property_selector.cpp | 6 +++++- editor/property_selector.h | 12 +++++------- .../visual_script_property_selector.cpp | 6 +++++- .../visual_script_property_selector.h | 10 ++++------ scene/3d/sprite_3d.cpp | 11 ++++++----- scene/3d/sprite_3d.h | 2 ++ scene/gui/dialogs.cpp | 18 ++++++++++-------- scene/gui/dialogs.h | 11 ++++++++--- scene/scene_string_names.cpp | 1 - scene/scene_string_names.h | 1 - 19 files changed, 79 insertions(+), 41 deletions(-) diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp index 8cce5fe1971..304d6d1ea93 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -134,10 +134,17 @@ void ConnectDialog::ok_pressed() { } void ConnectDialog::_cancel_pressed() { - hide(); } +void ConnectDialog::_item_activated() { + _ok_pressed(); // From AcceptDialog. +} + +void ConnectDialog::_text_entered(const String &p_text) { + _ok_pressed(); // From AcceptDialog. +} + /* * Called each time a target node is selected within the target node tree. */ @@ -386,7 +393,7 @@ ConnectDialog::ConnectDialog() { tree = memnew(SceneTreeEditor(false)); tree->set_connecting_signal(true); - tree->get_scene_tree()->connect_compat("item_activated", this, "_ok"); + tree->get_scene_tree()->connect("item_activated", callable_mp(this, &ConnectDialog::_item_activated)); tree->connect("node_selected", callable_mp(this, &ConnectDialog::_tree_node_selected)); tree->set_connect_to_script_mode(true); @@ -445,7 +452,7 @@ ConnectDialog::ConnectDialog() { dst_method = memnew(LineEdit); dst_method->set_h_size_flags(SIZE_EXPAND_FILL); - dst_method->connect_compat("text_entered", this, "_builtin_text_entered"); + dst_method->connect("text_entered", callable_mp(this, &ConnectDialog::_text_entered)); dstm_hb->add_child(dst_method); advanced = memnew(CheckButton); @@ -861,7 +868,6 @@ void ConnectionsDock::_notification(int p_what) { void ConnectionsDock::_bind_methods() { - ClassDB::bind_method("_close", &ConnectionsDock::_close); ClassDB::bind_method("update_tree", &ConnectionsDock::update_tree); } diff --git a/editor/connections_dialog.h b/editor/connections_dialog.h index a4ed68b44e5..988a8a1271a 100644 --- a/editor/connections_dialog.h +++ b/editor/connections_dialog.h @@ -105,6 +105,8 @@ private: void ok_pressed(); void _cancel_pressed(); + void _item_activated(); + void _text_entered(const String &_text); void _tree_node_selected(); void _add_bind(); void _remove_bind(); diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 4e3658acd8c..bb59ddad46c 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -561,6 +561,10 @@ void CreateDialog::_item_selected() { get_ok()->set_disabled(false); } +void CreateDialog::_hide_requested() { + _closed(); // From WindowDialog. +} + void CreateDialog::_favorite_toggled() { TreeItem *item = search_options->get_selected(); @@ -804,7 +808,7 @@ CreateDialog::CreateDialog() { help_bit = memnew(EditorHelpBit); vbc->add_margin_child(TTR("Description:"), help_bit); - help_bit->connect_compat("request_hide", this, "_closed"); + help_bit->connect("request_hide", callable_mp(this, &CreateDialog::_hide_requested)); type_blacklist.insert("PluginScript"); // PluginScript must be initialized before use, which is not possible here type_blacklist.insert("ScriptCreateDialog"); // This is an exposed editor Node that doesn't have an Editor prefix. diff --git a/editor/create_dialog.h b/editor/create_dialog.h index a807e50f659..f2e2eb1b047 100644 --- a/editor/create_dialog.h +++ b/editor/create_dialog.h @@ -60,6 +60,7 @@ class CreateDialog : public ConfirmationDialog { Set type_blacklist; void _item_selected(); + void _hide_requested(); void _update_search(); void _update_favorite_list(); diff --git a/editor/editor_dir_dialog.cpp b/editor/editor_dir_dialog.cpp index 867d72e014e..20fe349ef69 100644 --- a/editor/editor_dir_dialog.cpp +++ b/editor/editor_dir_dialog.cpp @@ -121,6 +121,10 @@ void EditorDirDialog::_item_collapsed(Object *p_item) { opened_paths.insert(item->get_metadata(0)); } +void EditorDirDialog::_item_activated() { + _ok_pressed(); // From AcceptDialog. +} + void EditorDirDialog::ok_pressed() { TreeItem *ti = tree->get_selected(); @@ -182,7 +186,7 @@ EditorDirDialog::EditorDirDialog() { tree = memnew(Tree); add_child(tree); - tree->connect_compat("item_activated", this, "_ok"); + tree->connect("item_activated", callable_mp(this, &EditorDirDialog::_item_activated)); makedir = add_button(TTR("Create Folder"), OS::get_singleton()->get_swap_ok_cancel(), "makedir"); makedir->connect("pressed", callable_mp(this, &EditorDirDialog::_make_dir)); diff --git a/editor/editor_dir_dialog.h b/editor/editor_dir_dialog.h index 44f66830347..2233dbbeee3 100644 --- a/editor/editor_dir_dialog.h +++ b/editor/editor_dir_dialog.h @@ -50,6 +50,7 @@ class EditorDirDialog : public ConfirmationDialog { bool updating; void _item_collapsed(Object *p_item); + void _item_activated(); void _update_dir(TreeItem *p_item, EditorFileSystemDirectory *p_dir, const String &p_select_path = String()); void _make_dir(); diff --git a/editor/editor_sub_scene.cpp b/editor/editor_sub_scene.cpp index f5ae7811f8c..3ebd8f04755 100644 --- a/editor/editor_sub_scene.cpp +++ b/editor/editor_sub_scene.cpp @@ -131,6 +131,10 @@ void EditorSubScene::_item_multi_selected(Object *p_object, int p_cell, bool p_s } } +void EditorSubScene::_item_activated() { + _ok_pressed(); // From AcceptDialog. +} + void EditorSubScene::_remove_selection_child(Node *p_node) { if (p_node->get_child_count() > 0) { for (int i = 0; i < p_node->get_child_count(); i++) { @@ -251,7 +255,7 @@ EditorSubScene::EditorSubScene() { //tree->connect("nothing_selected", this, "_deselect_items"); tree->connect("cell_selected", callable_mp(this, &EditorSubScene::_selected_changed)); - tree->connect_compat("item_activated", this, "_ok", make_binds(), CONNECT_DEFERRED); + tree->connect("item_activated", callable_mp(this, &EditorSubScene::_item_activated), make_binds(), CONNECT_DEFERRED); file_dialog = memnew(EditorFileDialog); List extensions; diff --git a/editor/editor_sub_scene.h b/editor/editor_sub_scene.h index 8205db25d7a..5c3b4377d45 100644 --- a/editor/editor_sub_scene.h +++ b/editor/editor_sub_scene.h @@ -50,6 +50,7 @@ class EditorSubScene : public ConfirmationDialog { void _fill_tree(Node *p_node, TreeItem *p_parent); void _selected_changed(); void _item_multi_selected(Object *p_object, int p_cell, bool p_selected); + void _item_activated(); void _remove_selection_child(Node *p_node); void _reown(Node *p_node, List *p_to_reown); diff --git a/editor/project_export.cpp b/editor/project_export.cpp index 979108e6dd9..37b959c78a4 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -945,7 +945,10 @@ void ProjectExportDialog::_export_project() { } } - // Ensure that signal is connected if previous attempt left it disconnected with _validate_export_path + // Ensure that signal is connected if previous attempt left it disconnected + // with _validate_export_path. + // FIXME: This is a hack, we should instead change EditorFileDialog to allow + // disabling validation by the "text_entered" signal. if (!export_project->get_line_edit()->is_connected_compat("text_entered", export_project, "_file_entered")) { export_project->get_ok()->set_disabled(false); export_project->get_line_edit()->connect_compat("text_entered", export_project, "_file_entered"); diff --git a/editor/property_selector.cpp b/editor/property_selector.cpp index 23a0a8485bc..9f49ffcd287 100644 --- a/editor/property_selector.cpp +++ b/editor/property_selector.cpp @@ -389,6 +389,10 @@ void PropertySelector::_item_selected() { help_bit->set_text(text); } +void PropertySelector::_hide_requested() { + _closed(); // From WindowDialog. +} + void PropertySelector::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { @@ -568,5 +572,5 @@ PropertySelector::PropertySelector() { help_bit = memnew(EditorHelpBit); vbc->add_margin_child(TTR("Description:"), help_bit); - help_bit->connect_compat("request_hide", this, "_closed"); + help_bit->connect("request_hide", callable_mp(this, &PropertySelector::_hide_requested)); } diff --git a/editor/property_selector.h b/editor/property_selector.h index 8a190189ff2..f579c0404c9 100644 --- a/editor/property_selector.h +++ b/editor/property_selector.h @@ -41,12 +41,12 @@ class PropertySelector : public ConfirmationDialog { LineEdit *search_box; Tree *search_options; - void _update_search(); - - void _sbox_input(const Ref &p_ie); - - void _confirmed(); void _text_changed(const String &p_newtext); + void _sbox_input(const Ref &p_ie); + void _update_search(); + void _confirmed(); + void _item_selected(); + void _hide_requested(); EditorHelpBit *help_bit; @@ -58,8 +58,6 @@ class PropertySelector : public ConfirmationDialog { Object *instance; bool virtuals_only; - void _item_selected(); - Vector type_filter; protected: diff --git a/modules/visual_script/visual_script_property_selector.cpp b/modules/visual_script/visual_script_property_selector.cpp index f8b8a9f00b5..a2baacb619f 100644 --- a/modules/visual_script/visual_script_property_selector.cpp +++ b/modules/visual_script/visual_script_property_selector.cpp @@ -518,6 +518,10 @@ void VisualScriptPropertySelector::_item_selected() { help_bit->set_text(text); } +void VisualScriptPropertySelector::_hide_requested() { + _closed(); // From WindowDialog. +} + void VisualScriptPropertySelector::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { @@ -716,7 +720,7 @@ VisualScriptPropertySelector::VisualScriptPropertySelector() { seq_connect = false; help_bit = memnew(EditorHelpBit); vbc->add_margin_child(TTR("Description:"), help_bit); - help_bit->connect_compat("request_hide", this, "_closed"); + help_bit->connect("request_hide", callable_mp(this, &VisualScriptPropertySelector::_hide_requested)); search_options->set_columns(3); search_options->set_column_expand(1, false); search_options->set_column_expand(2, false); diff --git a/modules/visual_script/visual_script_property_selector.h b/modules/visual_script/visual_script_property_selector.h index a1eb0b842cb..f438ca1f5be 100644 --- a/modules/visual_script/visual_script_property_selector.h +++ b/modules/visual_script/visual_script_property_selector.h @@ -41,16 +41,16 @@ class VisualScriptPropertySelector : public ConfirmationDialog { LineEdit *search_box; Tree *search_options; + void _text_changed(const String &p_newtext); + void _sbox_input(const Ref &p_ie); void _update_search(); void create_visualscript_item(const String &name, TreeItem *const root, const String &search_input, const String &text); - void get_visual_node_names(const String &root_filter, const Set &p_modifiers, bool &found, TreeItem *const root, LineEdit *const search_box); - void _sbox_input(const Ref &p_ie); - void _confirmed(); - void _text_changed(const String &p_newtext); + void _item_selected(); + void _hide_requested(); EditorHelpBit *help_bit; @@ -65,8 +65,6 @@ class VisualScriptPropertySelector : public ConfirmationDialog { bool virtuals_only; bool seq_connect; - void _item_selected(); - Vector type_filter; protected: diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index c4c80fa37de..fd220760913 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -333,9 +333,6 @@ void SpriteBase3D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_item_rect"), &SpriteBase3D::get_item_rect); ClassDB::bind_method(D_METHOD("generate_triangle_mesh"), &SpriteBase3D::generate_triangle_mesh); - ClassDB::bind_method(D_METHOD("_queue_update"), &SpriteBase3D::_queue_update); - ClassDB::bind_method(D_METHOD("_im_update"), &SpriteBase3D::_im_update); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "centered"), "set_centered", "is_centered"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset"), "set_offset", "get_offset"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "flip_h"), "set_flip_h", "is_flipped_h"); @@ -525,16 +522,20 @@ void Sprite3D::_draw() { VS::get_singleton()->immediate_end(immediate); } +void Sprite3D::_texture_changed() { + _queue_update(); +} + void Sprite3D::set_texture(const Ref &p_texture) { if (p_texture == texture) return; if (texture.is_valid()) { - texture->disconnect_compat(CoreStringNames::get_singleton()->changed, this, SceneStringNames::get_singleton()->_queue_update); + texture->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Sprite3D::_texture_changed)); } texture = p_texture; if (texture.is_valid()) { - texture->connect_compat(CoreStringNames::get_singleton()->changed, this, SceneStringNames::get_singleton()->_queue_update); + texture->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Sprite3D::_texture_changed)); } _queue_update(); } diff --git a/scene/3d/sprite_3d.h b/scene/3d/sprite_3d.h index 3b3f0265ce5..082884c83b6 100644 --- a/scene/3d/sprite_3d.h +++ b/scene/3d/sprite_3d.h @@ -157,6 +157,8 @@ class Sprite3D : public SpriteBase3D { int vframes; int hframes; + void _texture_changed(); + protected: virtual void _draw(); static void _bind_methods(); diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp index 0237be8ad6b..6cadd0a63ef 100644 --- a/scene/gui/dialogs.cpp +++ b/scene/gui/dialogs.cpp @@ -338,8 +338,6 @@ void WindowDialog::_bind_methods() { ClassDB::bind_method(D_METHOD("get_resizable"), &WindowDialog::get_resizable); ClassDB::bind_method(D_METHOD("get_close_button"), &WindowDialog::get_close_button); - ClassDB::bind_method(D_METHOD("_closed"), &WindowDialog::_closed); // Still used by some connect_compat. - ADD_PROPERTY(PropertyInfo(Variant::STRING, "window_title", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT_INTL), "set_title", "get_title"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "resizable", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT_INTL), "set_resizable", "get_resizable"); } @@ -398,7 +396,7 @@ void AcceptDialog::_notification(int p_what) { } } -void AcceptDialog::_builtin_text_entered(const String &p_text) { +void AcceptDialog::_text_entered(const String &p_text) { _ok_pressed(); } @@ -410,11 +408,18 @@ void AcceptDialog::_ok_pressed() { ok_pressed(); emit_signal("confirmed"); } + void AcceptDialog::_close_pressed() { cancel_pressed(); } +// FIXME: This is redundant with _closed_pressed, but there's a slight behavior +// change (WindowDialog's _closed() also calls hide()) which should be assessed. +void AcceptDialog::_on_close_pressed() { + _closed(); // From WindowDialog. +} + String AcceptDialog::get_text() const { return label->get_text(); @@ -449,7 +454,7 @@ void AcceptDialog::register_text_enter(Node *p_line_edit) { ERR_FAIL_NULL(p_line_edit); LineEdit *line_edit = Object::cast_to(p_line_edit); if (line_edit) - line_edit->connect("text_entered", callable_mp(this, &AcceptDialog::_builtin_text_entered)); + line_edit->connect("text_entered", callable_mp(this, &AcceptDialog::_text_entered)); } void AcceptDialog::_update_child_rects() { @@ -546,7 +551,7 @@ Button *AcceptDialog::add_cancel(const String &p_cancel) { if (p_cancel == "") c = RTR("Cancel"); Button *b = swap_ok_cancel ? add_button(c, true) : add_button(c); - b->connect_compat("pressed", this, "_closed"); + b->connect("pressed", callable_mp(this, &AcceptDialog::_on_close_pressed)); return b; } @@ -564,9 +569,6 @@ void AcceptDialog::_bind_methods() { ClassDB::bind_method(D_METHOD("set_autowrap", "autowrap"), &AcceptDialog::set_autowrap); ClassDB::bind_method(D_METHOD("has_autowrap"), &AcceptDialog::has_autowrap); - ClassDB::bind_method(D_METHOD("_ok"), &AcceptDialog::_ok_pressed); // Still used by some connect_compat. - ClassDB::bind_method(D_METHOD("_builtin_text_entered"), &AcceptDialog::_builtin_text_entered); // Still used by some connect_compat. - ADD_SIGNAL(MethodInfo("confirmed")); ADD_SIGNAL(MethodInfo("custom_action", PropertyInfo(Variant::STRING_NAME, "action"))); diff --git a/scene/gui/dialogs.h b/scene/gui/dialogs.h index b6381e98b46..c474f7849d8 100644 --- a/scene/gui/dialogs.h +++ b/scene/gui/dialogs.h @@ -64,7 +64,6 @@ class WindowDialog : public Popup { #endif void _gui_input(const Ref &p_event); - void _closed(); int _drag_hit_test(const Point2 &pos) const; protected: @@ -75,6 +74,9 @@ protected: void _notification(int p_what); static void _bind_methods(); + // Not private since used by derived classes signal. + void _closed(); + public: TextureButton *get_close_button(); @@ -113,9 +115,7 @@ class AcceptDialog : public WindowDialog { bool hide_on_ok; void _custom_action(const String &p_action); - void _ok_pressed(); void _close_pressed(); - void _builtin_text_entered(const String &p_text); void _update_child_rects(); static bool swap_ok_cancel; @@ -128,6 +128,11 @@ protected: virtual void cancel_pressed() {} virtual void custom_action(const String &) {} + // Not private since used by derived classes signal. + void _text_entered(const String &p_text); + void _ok_pressed(); + void _on_close_pressed(); + public: Size2 get_minimum_size() const; diff --git a/scene/scene_string_names.cpp b/scene/scene_string_names.cpp index 59f9bc17f88..d3c5a87caea 100644 --- a/scene/scene_string_names.cpp +++ b/scene/scene_string_names.cpp @@ -162,7 +162,6 @@ SceneStringNames::SceneStringNames() { can_drop_data = StaticCString::create("can_drop_data"); _im_update = StaticCString::create("_im_update"); // Sprite3D - _queue_update = StaticCString::create("_queue_update"); // Sprite3D baked_light_changed = StaticCString::create("baked_light_changed"); _baked_light_changed = StaticCString::create("_baked_light_changed"); diff --git a/scene/scene_string_names.h b/scene/scene_string_names.h index 0d76105f9b6..7976a2072cb 100644 --- a/scene/scene_string_names.h +++ b/scene/scene_string_names.h @@ -174,7 +174,6 @@ public: StringName _get_minimum_size; StringName _im_update; - StringName _queue_update; StringName baked_light_changed; StringName _baked_light_changed;