diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2017-03-18 14:52:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-18 14:52:34 +0100 |
commit | 00c4782910d6a4ea7d3ab0f8a28dec6e9a7c01d3 (patch) | |
tree | 4512c3cc563692fa83104a3181a2ad39d83ed3a5 | |
parent | f6715ac9cb8b658a2b693f6fcd52d4ca8adaa880 (diff) | |
parent | c0c4ba4e943d0960c652021450d20aceae4d7569 (diff) |
Merge pull request #8051 from RayKoopa/resizable_new_node_dialog
Make Create New Node dialog resizable and burninate old dialog
-rw-r--r-- | editor/create_dialog.cpp | 298 | ||||
-rw-r--r-- | editor/create_dialog.h | 42 | ||||
-rw-r--r-- | editor/editor_node.cpp | 2 | ||||
-rw-r--r-- | editor/property_editor.cpp | 2 | ||||
-rw-r--r-- | editor/scene_tree_dock.cpp | 4 | ||||
-rw-r--r-- | modules/visual_script/visual_script_editor.cpp | 2 |
6 files changed, 35 insertions, 315 deletions
diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index af62a2293b..442ef1fbd3 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -32,14 +32,11 @@ #include "editor_node.h" #include "print_string.h" #include "scene/gui/box_container.h" - -#if 1 - #include "editor_help.h" #include "editor_settings.h" #include "os/keyboard.h" -void CreateDialog::popup(bool p_dontclear) { +void CreateDialog::popup_create(bool p_dontclear) { recent->clear(); @@ -85,34 +82,19 @@ void CreateDialog::popup(bool p_dontclear) { } memdelete(f); - } else { -#if 0 -// I think this was way too confusing - if (base_type=="Node") { - //harcode some favorites :D - favorite_list.push_back("Panel"); - favorite_list.push_back("Button"); - favorite_list.push_back("Label"); - favorite_list.push_back("LineEdit"); - favorite_list.push_back("Node2D"); - favorite_list.push_back("Sprite"); - favorite_list.push_back("Camera2D"); - favorite_list.push_back("Area2D"); - favorite_list.push_back("CollisionShape2D"); - favorite_list.push_back("Spatial"); - favorite_list.push_back("Camera"); - favorite_list.push_back("Area"); - favorite_list.push_back("CollisionShape"); - favorite_list.push_back("TestCube"); - favorite_list.push_back("AnimationPlayer"); - - } -#endif } _update_favorite_list(); - popup_centered_ratio(); + + // Restore valid window bounds or pop up at default size. + if (EditorSettings::get_singleton()->has("interface/dialogs/create_new_node_bounds")) { + popup(EditorSettings::get_singleton()->get("interface/dialogs/create_new_node_bounds")); + } else { + popup_centered_ratio(); + } + + if (p_dontclear) search_box->select_all(); else { @@ -334,23 +316,23 @@ void CreateDialog::_confirmed() { void CreateDialog::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { - - connect("confirmed", this, "_confirmed"); - favorite->set_icon(get_icon("Favorites", "EditorIcons")); - } - if (p_what == NOTIFICATION_EXIT_TREE) { - - disconnect("confirmed", this, "_confirmed"); - } - - if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { - - if (is_visible_in_tree()) { - - search_box->call_deferred("grab_focus"); // still not visible - search_box->select_all(); - } + switch (p_what) { + case NOTIFICATION_ENTER_TREE: { + connect("confirmed", this, "_confirmed"); + favorite->set_icon(get_icon("Favorites", "EditorIcons")); + } break; + case NOTIFICATION_EXIT_TREE: { + disconnect("confirmed", this, "_confirmed"); + } break; + case NOTIFICATION_VISIBILITY_CHANGED: { + if (is_visible_in_tree()) { + search_box->call_deferred("grab_focus"); // still not visible + search_box->select_all(); + } + } break; + case NOTIFICATION_POPUP_HIDE: { + EditorSettings::get_singleton()->set("interface/dialogs/create_new_node_bounds", get_rect()); + } break; } } @@ -608,6 +590,8 @@ void CreateDialog::_bind_methods() { CreateDialog::CreateDialog() { + set_resizable(true); + HSplitContainer *hbc = memnew(HSplitContainer); add_child(hbc); @@ -660,227 +644,3 @@ CreateDialog::CreateDialog() { vbc->add_margin_child(TTR("Description:"), help_bit); help_bit->connect("request_hide", this, "_closed"); } - -#else - -//old create dialog, disabled - -void CreateDialog::_notification(int p_what) { - - if (p_what == NOTIFICATION_READY) { - connect("confirmed", this, "_create"); - update_tree(); - } - if (p_what == NOTIFICATION_DRAW) { - - //RID ci = get_canvas_item(); - //get_stylebox("panel","PopupMenu")->draw(ci,Rect2(Point2(),get_size())); - } -} - -void CreateDialog::_create() { - - if (tree->get_selected()) - emit_signal("create"); - hide(); -} - -void CreateDialog::_cancel() { - - hide(); -} - -void CreateDialog::_text_changed(String p_text) { - - update_tree(); -} - -void CreateDialog::add_type(const String &p_type, HashMap<String, TreeItem *> &p_types, TreeItem *p_root) { - - if (p_types.has(p_type)) - return; - if (!ClassDB::is_type(p_type, base) || p_type == base) - return; - - String inherits = ClassDB::type_inherits_from(p_type); - - TreeItem *parent = p_root; - - if (inherits.length()) { - - if (!p_types.has(inherits)) { - - add_type(inherits, p_types, p_root); - } - - if (p_types.has(inherits)) - parent = p_types[inherits]; - } - - TreeItem *item = tree->create_item(parent); - item->set_text(0, p_type); - if (!ClassDB::can_instance(p_type)) { - item->set_custom_color(0, Color(0.5, 0.5, 0.5)); - item->set_selectable(0, false); - } - - if (has_icon(p_type, "EditorIcons")) { - - item->set_icon(0, get_icon(p_type, "EditorIcons")); - } - - p_types[p_type] = item; -} - -void CreateDialog::update_tree() { - - tree->clear(); - - List<String> type_list; - ClassDB::get_type_list(&type_list); - - HashMap<String, TreeItem *> types; - - TreeItem *root = tree->create_item(); - - root->set_text(0, base); - - List<String>::Element *I = type_list.front(); - - for (; I; I = I->next()) { - - String type = I->get(); - - if (!ClassDB::can_instance(type)) - continue; // cant create what can't be instanced - if (filter->get_text() == "") - add_type(type, types, root); - else { - - bool found = false; - String type = I->get(); - while (type != "" && ClassDB::is_type(type, base) && type != base) { - if (type.findn(filter->get_text()) != -1) { - - found = true; - break; - } - - type = ClassDB::type_inherits_from(type); - } - - if (found) - add_type(I->get(), types, root); - } - - if (EditorNode::get_editor_data().get_custom_types().has(type)) { - //there are custom types based on this... cool. - - const Vector<EditorData::CustomType> &ct = EditorNode::get_editor_data().get_custom_types()[type]; - for (int i = 0; i < ct.size(); i++) { - - bool show = filter->get_text() == "" || ct[i].name.findn(filter->get_text()) != -1; - - if (!show) - continue; - if (!types.has(type)) - add_type(type, types, root); - - TreeItem *ti; - if (types.has(type)) - ti = types[type]; - else - ti = tree->get_root(); - - TreeItem *item = tree->create_item(ti); - item->set_metadata(0, type); - item->set_text(0, ct[i].name); - if (ct[i].icon.is_valid()) { - item->set_icon(0, ct[i].icon); - } - } - } - } -} - -Object *CreateDialog::instance_selected() { - - if (!tree->get_selected()) - return NULL; - - String base = String(tree->get_selected()->get_metadata(0)); - if (base != "") { - - String name = tree->get_selected()->get_text(0); - if (EditorNode::get_editor_data().get_custom_types().has(base)) { - - const Vector<EditorData::CustomType> &ct = EditorNode::get_editor_data().get_custom_types()[base]; - for (int i = 0; i < ct.size(); i++) { - - if (ct[i].name == name) { - - Object *obj = ClassDB::instance(base); - ERR_FAIL_COND_V(!obj, NULL); - obj->set_script(ct[i].script.get_ref_ptr()); - if (ct[i].icon.is_valid()) - obj->set_meta("_editor_icon", ct[i].icon); - return obj; - } - } - } - - ERR_FAIL_V(NULL); - } - - return ClassDB::instance(tree->get_selected()->get_text(0)); -} - -void CreateDialog::_bind_methods() { - - ClassDB::bind_method("_create", &CreateDialog::_create); - ClassDB::bind_method("_cancel", &CreateDialog::_cancel); - ClassDB::bind_method("_text_changed", &CreateDialog::_text_changed); - ADD_SIGNAL(MethodInfo("create")); -} - -void CreateDialog::set_base_type(const String &p_base) { - - set_title(vformat("Create %s Type", p_base)); - - if (base == p_base) - return; - base = p_base; - if (is_inside_scene()) - update_tree(); -} - -String CreateDialog::get_base_type() const { - - return base; -} - -CreateDialog::CreateDialog() { - - VBoxContainer *vbc = memnew(VBoxContainer); - add_child(vbc); - - get_ok()->set_text("Create"); - - tree = memnew(Tree); - vbc->add_margin_child("Type:", tree, true); - //tree->set_hide_root(true); - - filter = memnew(LineEdit); - vbc->add_margin_child("Filter:", filter); - - base = "Node"; - set_as_toplevel(true); - - tree->connect("item_activated", this, "_create"); - filter->connect("text_changed", this, "_text_changed"); -} - -CreateDialog::~CreateDialog() { -} - -#endif diff --git a/editor/create_dialog.h b/editor/create_dialog.h index aff6b9c62b..5f0b16bc34 100644 --- a/editor/create_dialog.h +++ b/editor/create_dialog.h @@ -40,8 +40,6 @@ @author Juan Linietsky <reduzio@gmail.com> */ -#if 1 - class CreateDialog : public ConfirmationDialog { GDCLASS(CreateDialog, ConfirmationDialog) @@ -92,47 +90,9 @@ public: void set_base_type(const String &p_base); String get_base_type() const; - void popup(bool p_dontclear); + void popup_create(bool p_dontclear); CreateDialog(); }; -#else - -//old create dialog, disabled - -class CreateDialog : public ConfirmationDialog { - - GDCLASS(CreateDialog, ConfirmationDialog); - - Tree *tree; - Button *create; - Button *cancel; - LineEdit *filter; - - void update_tree(); - void _create(); - void _cancel(); - void add_type(const String &p_type, HashMap<String, TreeItem *> &p_types, TreeItem - *p_root); - - String base; - void _text_changed(String p_text); - virtual void _post_popup() { tree->grab_focus(); } - -protected: - static void _bind_methods(); - void _notification(int p_what); - -public: - Object *instance_selected(); - - void set_base_type(const String &p_base); - String get_base_type() const; - CreateDialog(); - ~CreateDialog(); -}; - -#endif - #endif diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index f43d80f62d..3319f1cbee 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -2294,7 +2294,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { #endif case RESOURCE_NEW: { - create_dialog->popup(true); + create_dialog->popup_create(true); } break; case RESOURCE_LOAD: { diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index f8234d93fd..cc26769939 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -541,7 +541,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: create_dialog->set_base_type("Object"); } - create_dialog->popup(false); + create_dialog->popup_create(false); hide(); updating = false; return false; diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 04b10959ef..f9baa7ea3c 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -276,7 +276,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (!_validate_no_foreign()) break; */ - create_dialog->popup(true); + create_dialog->popup_create(true); } break; case TOOL_INSTANCE: { @@ -316,7 +316,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { } break; case TOOL_REPLACE: { - create_dialog->popup(false); + create_dialog->popup_create(false); } break; case TOOL_CONNECT: { diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp index 5b1b496f72..ae2d4d5df3 100644 --- a/modules/visual_script/visual_script_editor.cpp +++ b/modules/visual_script/visual_script_editor.cpp @@ -2271,7 +2271,7 @@ Control *VisualScriptEditor::get_edit_menu() { void VisualScriptEditor::_change_base_type() { - select_base_type->popup(true); + select_base_type->popup_create(true); } void VisualScriptEditor::_change_base_type_callback() { |