void EditorRunNative::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { for (int i = 0; i < EditorExport::get_singleton()->get_export_platform_count(); i++) { Ref<EditorExportPlatform> eep = EditorExport::get_singleton()->get_export_platform(i); if (eep.is_null()) continue; Ref<ImageTexture> icon = eep->get_run_icon(); if (!icon.is_null()) { Ref<Image> im = icon->get_data(); im = im->duplicate(); im->clear_mipmaps(); if (!im->empty()) { im->resize(16 * EDSCALE, 16 * EDSCALE); Ref<ImageTexture> small_icon; small_icon.instance(); small_icon->create_from_image(im, 0); MenuButton *mb = memnew(MenuButton); mb->get_popup()->connect("id_pressed", this, "_run_native", varray(i)); //mb->connect("pressed", this, "_run_native", varray(-1, i)); mb->set_icon(small_icon); add_child(mb); menus[i] = mb; } } } } if (p_what == NOTIFICATION_PROCESS) { bool changed = EditorExport::get_singleton()->poll_export_platforms() || first; if (changed) { for (Map<int, MenuButton *>::Element *E = menus.front(); E; E = E->next()) { Ref<EditorExportPlatform> eep = EditorExport::get_singleton()->get_export_platform(E->key()); MenuButton *mb = E->get(); int dc = eep->get_device_count(); if (dc == 0) { mb->hide(); } else { mb->get_popup()->clear(); mb->show(); mb->set_tooltip(TTR("Select device from the list")); for (int i = 0; i < dc; i++) { mb->get_popup()->add_icon_item(get_icon("Play", "EditorIcons"), eep->get_device_name(i)); mb->get_popup()->set_item_tooltip(mb->get_popup()->get_item_count() - 1, eep->get_device_info(i).strip_edges()); } } } first = false; } } }
TileSetEditor::TileSetEditor(EditorNode *p_editor) { Panel *panel = memnew(Panel); panel->set_area_as_parent_rect(); add_child(panel); MenuButton *options = memnew(MenuButton); panel->add_child(options); options->set_position(Point2(1, 1)); options->set_text("Theme"); options->get_popup()->add_item(TTR("Add Item"), MENU_OPTION_ADD_ITEM); options->get_popup()->add_item(TTR("Remove Item"), MENU_OPTION_REMOVE_ITEM); options->get_popup()->add_separator(); options->get_popup()->add_item(TTR("Create from Scene"), MENU_OPTION_CREATE_FROM_SCENE); options->get_popup()->add_item(TTR("Merge from Scene"), MENU_OPTION_MERGE_FROM_SCENE); options->get_popup()->connect("id_pressed", this, "_menu_cbk"); editor = p_editor; cd = memnew(ConfirmationDialog); add_child(cd); cd->get_ok()->connect("pressed", this, "_menu_confirm"); nd = memnew(EditorNameDialog); add_child(nd); nd->set_hide_on_ok(true); nd->get_line_edit()->set_margin(MARGIN_TOP, 28); nd->connect("name_confirmed", this, "_name_dialog_confirm"); err_dialog = memnew(AcceptDialog); add_child(err_dialog); err_dialog->set_title(TTR("Error")); }
MeshLibraryEditor::MeshLibraryEditor(EditorNode *p_editor) { file = memnew( EditorFileDialog ); file->set_mode(EditorFileDialog::MODE_OPEN_FILE); //not for now? List<String> extensions; ResourceLoader::get_recognized_extensions_for_type("PackedScene",&extensions); file->clear_filters(); file->set_title("Import Scene"); for(int i=0;i<extensions.size();i++) { file->add_filter("*."+extensions[i]+" ; "+extensions[i].to_upper()); } add_child(file); file->connect("file_selected",this,"_import_scene_cbk"); Panel *panel = memnew( Panel ); panel->set_area_as_parent_rect(); add_child(panel); MenuButton * options = memnew( MenuButton ); panel->add_child(options); options->set_pos(Point2(1,1)); options->set_text("Theme"); options->get_popup()->add_item("Add Item",MENU_OPTION_ADD_ITEM); options->get_popup()->add_item("Remove Selected Item",MENU_OPTION_REMOVE_ITEM); options->get_popup()->add_separator(); options->get_popup()->add_item("Import from Scene",MENU_OPTION_IMPORT_FROM_SCENE); options->get_popup()->add_item("Update from Scene",MENU_OPTION_UPDATE_FROM_SCENE); options->get_popup()->set_item_disabled(options->get_popup()->get_item_index(MENU_OPTION_UPDATE_FROM_SCENE),true); options->get_popup()->connect("item_pressed", this,"_menu_cbk"); menu=options; editor=p_editor; cd = memnew(ConfirmationDialog); add_child(cd); cd->get_ok()->connect("pressed", this,"_menu_confirm"); }
TileSetEditor::TileSetEditor(EditorNode *p_editor) { Panel *panel = memnew( Panel ); panel->set_area_as_parent_rect(); add_child(panel); MenuButton * options = memnew( MenuButton ); panel->add_child(options); options->set_pos(Point2(1,1)); options->set_text("Theme"); options->get_popup()->add_item("Add Item",MENU_OPTION_ADD_ITEM); options->get_popup()->add_item("Remove Selected Item",MENU_OPTION_REMOVE_ITEM); options->get_popup()->add_separator(); options->get_popup()->add_item("Create from Scene",MENU_OPTION_CREATE_FROM_SCENE); options->get_popup()->add_item("Merge from Scene",MENU_OPTION_MERGE_FROM_SCENE); options->get_popup()->connect("item_pressed", this,"_menu_cbk"); editor=p_editor; cd = memnew(ConfirmationDialog); add_child(cd); cd->get_ok()->connect("pressed", this,"_menu_confirm"); }
ResourcesDock::ResourcesDock(EditorNode *p_editor) { editor=p_editor; VBoxContainer *vbc = this; HBoxContainer *hbc = memnew( HBoxContainer ); vbc->add_child(hbc); Button *b; b = memnew( ToolButton ); b->set_tooltip(TTR("Create New Resource")); b->connect("pressed",this,"_tool_selected",make_binds(TOOL_NEW)); hbc->add_child( b ); button_new=b; b = memnew( ToolButton ); b->set_tooltip(TTR("Open Resource")); b->connect("pressed",this,"_tool_selected",make_binds(TOOL_OPEN)); hbc->add_child( b ); button_open=b; MenuButton *mb = memnew( MenuButton ); mb->set_tooltip(TTR("Save Resource")); mb->get_popup()->add_item(TTR("Save Resource"),TOOL_SAVE); mb->get_popup()->add_item(TTR("Save Resource As.."),TOOL_SAVE_AS); mb->get_popup()->connect("item_pressed",this,"_tool_selected" ); hbc->add_child( mb ); button_save=mb; hbc->add_spacer(); mb = memnew( MenuButton ); mb->set_tooltip(TTR("Resource Tools")); mb->get_popup()->add_item(TTR("Make Local"),TOOL_MAKE_LOCAL); mb->get_popup()->add_item(TTR("Copy"),TOOL_COPY); mb->get_popup()->add_item(TTR("Paste"),TOOL_PASTE); mb->get_popup()->connect("item_pressed",this,"_tool_selected" ); hbc->add_child( mb ); button_tools=mb; resources = memnew( Tree ); vbc->add_child(resources); resources->set_v_size_flags(SIZE_EXPAND_FILL); resources->create_item(); //root resources->set_hide_root(true); resources->connect("cell_selected",this,"_resource_selected"); resources->connect("button_pressed",this,"_delete"); create_dialog = memnew( CreateDialog ); add_child(create_dialog); create_dialog->set_base_type("Resource"); create_dialog->connect("create",this,"_create"); accept = memnew (AcceptDialog); add_child(accept); file = memnew( EditorFileDialog ); add_child(file); file->connect("file_selected",this,"_file_action"); block_add=false; }
void EditorRunNative::_notification(int p_what) { if (p_what==NOTIFICATION_ENTER_TREE) { List<StringName> ep; EditorImportExport::get_singleton()->get_export_platforms(&ep); ep.sort_custom<StringName::AlphCompare>(); for(List<StringName>::Element *E=ep.front();E;E=E->next()) { Ref<EditorExportPlatform> eep = EditorImportExport::get_singleton()->get_export_platform(E->get()); if (eep.is_null()) continue; Ref<ImageTexture> icon = eep->get_logo(); if (!icon.is_null()) { Image im = icon->get_data(); im.clear_mipmaps(); if (!im.empty()) { im.resize(16,16); Ref<ImageTexture> small_icon = memnew( ImageTexture); small_icon->create_from_image(im); MenuButton *mb = memnew( MenuButton ); mb->get_popup()->connect("item_pressed",this,"_run_native",varray(E->get())); mb->set_icon(small_icon); add_child(mb); menus[E->get()]=mb; } } } } if (p_what==NOTIFICATION_PROCESS) { bool changed = EditorImportExport::get_singleton()->poll_export_platforms() || first; if (changed) { for(Map<StringName,MenuButton*>::Element *E=menus.front();E;E=E->next()) { Ref<EditorExportPlatform> eep = EditorImportExport::get_singleton()->get_export_platform(E->key()); MenuButton *mb = E->get(); int dc = eep->get_device_count(); if (dc==0) { mb->hide(); } else { mb->get_popup()->clear(); mb->show(); for(int i=0;i<dc;i++) { mb->get_popup()->add_icon_item(get_icon("Play","EditorIcons"),eep->get_device_name(i)); mb->get_popup()->set_item_tooltip(mb->get_popup()->get_item_count() -1,eep->get_device_info(i)); } } } first=false; } } }
void AnimationNodeBlendTreeEditor::_update_graph() { if (updating) return; graph->set_scroll_ofs(blend_tree->get_graph_offset() * EDSCALE); if (blend_tree->get_parent().is_valid()) { goto_parent->show(); } else { goto_parent->hide(); } graph->clear_connections(); //erase all nodes for (int i = 0; i < graph->get_child_count(); i++) { if (Object::cast_to<GraphNode>(graph->get_child(i))) { memdelete(graph->get_child(i)); i--; } } animations.clear(); List<StringName> nodes; blend_tree->get_node_list(&nodes); for (List<StringName>::Element *E = nodes.front(); E; E = E->next()) { GraphNode *node = memnew(GraphNode); graph->add_child(node); Ref<AnimationNode> agnode = blend_tree->get_node(E->get()); if (!agnode->is_connected("changed", this, "_node_changed")) { agnode->connect("changed", this, "_node_changed", varray(agnode->get_instance_id()), CONNECT_DEFERRED); } node->set_offset(agnode->get_position() * EDSCALE); node->set_title(agnode->get_caption()); node->set_name(E->get()); int base = 0; if (String(E->get()) != "output") { LineEdit *name = memnew(LineEdit); name->set_text(E->get()); name->set_expand_to_text_length(true); node->add_child(name); node->set_slot(0, false, 0, Color(), true, 0, get_color("font_color", "Label")); name->connect("text_entered", this, "_node_renamed", varray(agnode)); name->connect("focus_exited", this, "_node_renamed_focus_out", varray(name, agnode)); base = 1; node->set_show_close_button(true); node->connect("close_request", this, "_delete_request", varray(E->get()), CONNECT_DEFERRED); } for (int i = 0; i < agnode->get_input_count(); i++) { Label *in_name = memnew(Label); node->add_child(in_name); in_name->set_text(agnode->get_input_name(i)); node->set_slot(base + i, true, 0, get_color("font_color", "Label"), false, 0, Color()); } node->connect("dragged", this, "_node_dragged", varray(agnode)); if (EditorNode::get_singleton()->item_has_editor(agnode.ptr())) { node->add_child(memnew(HSeparator)); Button *open_in_editor = memnew(Button); open_in_editor->set_text(TTR("Open Editor")); open_in_editor->set_icon(get_icon("Edit", "EditorIcons")); node->add_child(open_in_editor); open_in_editor->connect("pressed", this, "_open_in_editor", varray(E->get()), CONNECT_DEFERRED); open_in_editor->set_h_size_flags(SIZE_SHRINK_CENTER); } if (agnode->has_filter()) { node->add_child(memnew(HSeparator)); Button *edit_filters = memnew(Button); edit_filters->set_text(TTR("Edit Filters")); edit_filters->set_icon(get_icon("AnimationFilter", "EditorIcons")); node->add_child(edit_filters); edit_filters->connect("pressed", this, "_edit_filters", varray(E->get()), CONNECT_DEFERRED); edit_filters->set_h_size_flags(SIZE_SHRINK_CENTER); } Ref<AnimationNodeAnimation> anim = agnode; if (anim.is_valid()) { MenuButton *mb = memnew(MenuButton); mb->set_text(anim->get_animation()); mb->set_icon(get_icon("Animation", "EditorIcons")); Array options; node->add_child(memnew(HSeparator)); node->add_child(mb); ProgressBar *pb = memnew(ProgressBar); AnimationTree *player = anim->get_tree(); if (player->has_node(player->get_animation_player())) { AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(player->get_node(player->get_animation_player())); if (ap) { List<StringName> anims; ap->get_animation_list(&anims); for (List<StringName>::Element *F = anims.front(); F; F = F->next()) { mb->get_popup()->add_item(F->get()); options.push_back(F->get()); } if (ap->has_animation(anim->get_animation())) { pb->set_max(ap->get_animation(anim->get_animation())->get_length()); } } } pb->set_percent_visible(false); animations[E->get()] = pb; node->add_child(pb); mb->get_popup()->connect("index_pressed", this, "_anim_selected", varray(options, E->get()), CONNECT_DEFERRED); } Ref<AnimationNodeOneShot> oneshot = agnode; if (oneshot.is_valid()) { HBoxContainer *play_stop = memnew(HBoxContainer); play_stop->add_spacer(); Button *play = memnew(Button); play->set_icon(get_icon("Play", "EditorIcons")); play->connect("pressed", this, "_oneshot_start", varray(E->get()), CONNECT_DEFERRED); play_stop->add_child(play); Button *stop = memnew(Button); stop->set_icon(get_icon("Stop", "EditorIcons")); stop->connect("pressed", this, "_oneshot_stop", varray(E->get()), CONNECT_DEFERRED); play_stop->add_child(stop); play_stop->add_spacer(); node->add_child(play_stop); } } List<AnimationNodeBlendTree::NodeConnection> connections; blend_tree->get_node_connections(&connections); for (List<AnimationNodeBlendTree::NodeConnection>::Element *E = connections.front(); E; E = E->next()) { StringName from = E->get().output_node; StringName to = E->get().input_node; int to_idx = E->get().input_index; graph->connect_node(from, 0, to, to_idx); } }