void CreateDialog::_favorite_toggled() { TreeItem *item = search_options->get_selected(); if (!item) return; String name = item->get_text(0); if (favorite_list.find(name) == -1) { favorite_list.push_back(name); favorite->set_pressed(true); } else { favorite_list.erase(name); favorite->set_pressed(false); } _save_favorite_list(); _update_favorite_list(); }
void CreateDialog::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) { Dictionary d = p_data; TreeItem *ti = favorites->get_item_at_position(p_point); if (!ti) return; String drop_at = ti->get_text(0); int ds = favorites->get_drop_section_at_position(p_point); int drop_idx = favorite_list.find(drop_at); if (drop_idx < 0) return; String type = d["class"]; int from_idx = favorite_list.find(type); if (from_idx < 0) return; if (drop_idx == from_idx) { ds = -1; //cause it will be gone } else if (drop_idx > from_idx) { drop_idx--; } favorite_list.remove(from_idx); if (ds < 0) { favorite_list.insert(drop_idx, type); } else { if (drop_idx >= favorite_list.size() - 1) { favorite_list.push_back(type); } else { favorite_list.insert(drop_idx + 1, type); } } _save_favorite_list(); _update_favorite_list(); }
void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode) { type_list.clear(); ClassDB::get_class_list(&type_list); ScriptServer::get_global_class_list(&type_list); type_list.sort_custom<StringName::AlphCompare>(); recent->clear(); FileAccess *f = FileAccess::open(EditorSettings::get_singleton()->get_project_settings_dir().plus_file("create_recent." + base_type), FileAccess::READ); if (f) { TreeItem *root = recent->create_item(); while (!f->eof_reached()) { String l = f->get_line().strip_edges(); if (l != String()) { TreeItem *ti = recent->create_item(root); ti->set_text(0, l); ti->set_icon(0, _get_editor_icon(l)); } } memdelete(f); } favorites->clear(); f = FileAccess::open(EditorSettings::get_singleton()->get_project_settings_dir().plus_file("favorites." + base_type), FileAccess::READ); favorite_list.clear(); if (f) { while (!f->eof_reached()) { String l = f->get_line().strip_edges(); if (l != String()) { favorite_list.push_back(l); } } memdelete(f); } _update_favorite_list(); // Restore valid window bounds or pop up at default size. if (EditorSettings::get_singleton()->has_setting("interface/dialogs/create_new_node_bounds")) { popup(EditorSettings::get_singleton()->get("interface/dialogs/create_new_node_bounds")); } else { Size2 popup_size = Size2(900, 700) * editor_get_scale(); Size2 window_size = get_viewport_rect().size; popup_size.x = MIN(window_size.x * 0.8, popup_size.x); popup_size.y = MIN(window_size.y * 0.8, popup_size.y); popup_centered(popup_size); } if (p_dont_clear) { search_box->select_all(); } else { search_box->clear(); } search_box->grab_focus(); _update_search(); bool enable_rl = EditorSettings::get_singleton()->get("docks/scene_tree/draw_relationship_lines"); Color rl_color = EditorSettings::get_singleton()->get("docks/scene_tree/relationship_line_color"); if (enable_rl) { search_options->add_constant_override("draw_relationship_lines", 1); search_options->add_color_override("relationship_line_color", rl_color); } else { search_options->add_constant_override("draw_relationship_lines", 0); } is_replace_mode = p_replace_mode; if (p_replace_mode) { set_title(vformat(TTR("Change %s Type"), base_type)); get_ok()->set_text(TTR("Change")); } else { set_title(vformat(TTR("Create New %s"), base_type)); get_ok()->set_text(TTR("Create")); } }
void CreateDialog::_save_and_update_favorite_list() { _save_favorite_list(); _update_favorite_list(); }
void CreateDialog::popup_create(bool p_dontclear) { recent->clear(); FileAccess *f = FileAccess::open(EditorSettings::get_singleton()->get_project_settings_path().plus_file("create_recent." + base_type), FileAccess::READ); if (f) { TreeItem *root = recent->create_item(); while (!f->eof_reached()) { String l = f->get_line().strip_edges(); if (l != String()) { TreeItem *ti = recent->create_item(root); ti->set_text(0, l); if (has_icon(l, "EditorIcons")) { ti->set_icon(0, get_icon(l, "EditorIcons")); } else { ti->set_icon(0, get_icon("Object", "EditorIcons")); } } } memdelete(f); } favorites->clear(); f = FileAccess::open(EditorSettings::get_singleton()->get_project_settings_path().plus_file("favorites." + base_type), FileAccess::READ); favorite_list.clear(); if (f) { while (!f->eof_reached()) { String l = f->get_line().strip_edges(); if (l != String()) { favorite_list.push_back(l); } } memdelete(f); } _update_favorite_list(); // 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 { search_box->clear(); } search_box->grab_focus(); _update_search(); }
void CreateDialog::popup(bool p_dontclear) { recent->clear(); FileAccess *f = FileAccess::open(EditorSettings::get_singleton()->get_project_settings_path().plus_file("create_recent." + base_type), FileAccess::READ); if (f) { TreeItem *root = recent->create_item(); while (!f->eof_reached()) { String l = f->get_line().strip_edges(); if (l != String()) { TreeItem *ti = recent->create_item(root); ti->set_text(0, l); if (has_icon(l, "EditorIcons")) { ti->set_icon(0, get_icon(l, "EditorIcons")); } else { ti->set_icon(0, get_icon("Object", "EditorIcons")); } } } memdelete(f); } favorites->clear(); f = FileAccess::open(EditorSettings::get_singleton()->get_project_settings_path().plus_file("favorites." + base_type), FileAccess::READ); favorite_list.clear(); if (f) { while (!f->eof_reached()) { String l = f->get_line().strip_edges(); if (l != String()) { favorite_list.push_back(l); } } 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(); if (p_dontclear) search_box->select_all(); else { search_box->clear(); } search_box->grab_focus(); _update_search(); }