mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
Merge pull request #63950 from bruvzg/menu_bar3
Implement MenuBar control to wrap Popup menus or native menu, use native menu for editor.
This commit is contained in:
commit
420a8c888e
25 changed files with 1951 additions and 374 deletions
|
@ -54,6 +54,7 @@
|
|||
#include "scene/gui/dialogs.h"
|
||||
#include "scene/gui/file_dialog.h"
|
||||
#include "scene/gui/link_button.h"
|
||||
#include "scene/gui/menu_bar.h"
|
||||
#include "scene/gui/menu_button.h"
|
||||
#include "scene/gui/panel.h"
|
||||
#include "scene/gui/panel_container.h"
|
||||
|
@ -751,11 +752,7 @@ void EditorNode::_notification(int p_what) {
|
|||
scene_tabs->add_theme_style_override("tab_selected", gui_base->get_theme_stylebox(SNAME("SceneTabFG"), SNAME("EditorStyles")));
|
||||
scene_tabs->add_theme_style_override("tab_unselected", gui_base->get_theme_stylebox(SNAME("SceneTabBG"), SNAME("EditorStyles")));
|
||||
|
||||
file_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
project_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
debug_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
settings_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
help_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
main_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
}
|
||||
|
||||
scene_tabs->set_max_tab_width(int(EDITOR_GET("interface/scene_tabs/maximum_width")) * EDSCALE);
|
||||
|
@ -803,16 +800,15 @@ void EditorNode::_notification(int p_what) {
|
|||
dock_tab_move_right->set_icon(theme->get_icon(SNAME("Forward"), SNAME("EditorIcons")));
|
||||
}
|
||||
|
||||
PopupMenu *p = help_menu->get_popup();
|
||||
p->set_item_icon(p->get_item_index(HELP_SEARCH), gui_base->get_theme_icon(SNAME("HelpSearch"), SNAME("EditorIcons")));
|
||||
p->set_item_icon(p->get_item_index(HELP_DOCS), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
p->set_item_icon(p->get_item_index(HELP_QA), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
p->set_item_icon(p->get_item_index(HELP_REPORT_A_BUG), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
p->set_item_icon(p->get_item_index(HELP_SUGGEST_A_FEATURE), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
p->set_item_icon(p->get_item_index(HELP_SEND_DOCS_FEEDBACK), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
p->set_item_icon(p->get_item_index(HELP_COMMUNITY), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
p->set_item_icon(p->get_item_index(HELP_ABOUT), gui_base->get_theme_icon(SNAME("Godot"), SNAME("EditorIcons")));
|
||||
p->set_item_icon(p->get_item_index(HELP_SUPPORT_GODOT_DEVELOPMENT), gui_base->get_theme_icon(SNAME("Heart"), SNAME("EditorIcons")));
|
||||
help_menu->set_item_icon(help_menu->get_item_index(HELP_SEARCH), gui_base->get_theme_icon(SNAME("HelpSearch"), SNAME("EditorIcons")));
|
||||
help_menu->set_item_icon(help_menu->get_item_index(HELP_DOCS), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
help_menu->set_item_icon(help_menu->get_item_index(HELP_QA), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
help_menu->set_item_icon(help_menu->get_item_index(HELP_REPORT_A_BUG), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
help_menu->set_item_icon(help_menu->get_item_index(HELP_SUGGEST_A_FEATURE), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
help_menu->set_item_icon(help_menu->get_item_index(HELP_SEND_DOCS_FEEDBACK), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
help_menu->set_item_icon(help_menu->get_item_index(HELP_COMMUNITY), gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")));
|
||||
help_menu->set_item_icon(help_menu->get_item_index(HELP_ABOUT), gui_base->get_theme_icon(SNAME("Godot"), SNAME("EditorIcons")));
|
||||
help_menu->set_item_icon(help_menu->get_item_index(HELP_SUPPORT_GODOT_DEVELOPMENT), gui_base->get_theme_icon(SNAME("Heart"), SNAME("EditorIcons")));
|
||||
|
||||
for (int i = 0; i < main_editor_buttons.size(); i++) {
|
||||
main_editor_buttons.write[i]->add_theme_font_override("font", gui_base->get_theme_font(SNAME("main_button_font"), SNAME("EditorFonts")));
|
||||
|
@ -3195,17 +3191,15 @@ void EditorNode::_update_file_menu_opened() {
|
|||
Ref<Shortcut> reopen_closed_scene_sc = ED_GET_SHORTCUT("editor/reopen_closed_scene");
|
||||
reopen_closed_scene_sc->set_name(TTR("Reopen Closed Scene"));
|
||||
|
||||
PopupMenu *pop = file_menu->get_popup();
|
||||
pop->set_item_disabled(pop->get_item_index(FILE_OPEN_PREV), previous_scenes.is_empty());
|
||||
file_menu->set_item_disabled(file_menu->get_item_index(FILE_OPEN_PREV), previous_scenes.is_empty());
|
||||
|
||||
const UndoRedo &undo_redo = editor_data.get_undo_redo();
|
||||
pop->set_item_disabled(pop->get_item_index(EDIT_UNDO), !undo_redo.has_undo());
|
||||
pop->set_item_disabled(pop->get_item_index(EDIT_REDO), !undo_redo.has_redo());
|
||||
file_menu->set_item_disabled(file_menu->get_item_index(EDIT_UNDO), !undo_redo.has_undo());
|
||||
file_menu->set_item_disabled(file_menu->get_item_index(EDIT_REDO), !undo_redo.has_redo());
|
||||
}
|
||||
|
||||
void EditorNode::_update_file_menu_closed() {
|
||||
PopupMenu *pop = file_menu->get_popup();
|
||||
pop->set_item_disabled(pop->get_item_index(FILE_OPEN_PREV), false);
|
||||
file_menu->set_item_disabled(file_menu->get_item_index(FILE_OPEN_PREV), false);
|
||||
}
|
||||
|
||||
Control *EditorNode::get_main_control() {
|
||||
|
@ -6471,15 +6465,20 @@ EditorNode::EditorNode() {
|
|||
main_control->add_theme_constant_override("separation", 0);
|
||||
scene_root_parent->add_child(main_control);
|
||||
|
||||
HBoxContainer *left_menu_hb = memnew(HBoxContainer);
|
||||
menu_hb->add_child(left_menu_hb);
|
||||
bool global_menu = !bool(EDITOR_GET("interface/editor/use_embedded_menu")) && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_GLOBAL_MENU);
|
||||
|
||||
file_menu = memnew(MenuButton);
|
||||
file_menu->set_flat(false);
|
||||
file_menu->set_switch_on_hover(true);
|
||||
file_menu->set_text(TTR("Scene"));
|
||||
file_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
left_menu_hb->add_child(file_menu);
|
||||
main_menu = memnew(MenuBar);
|
||||
menu_hb->add_child(main_menu);
|
||||
main_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
main_menu->set_flat(true);
|
||||
main_menu->set_start_index(0); // Main menu, add to the start of global menu.
|
||||
main_menu->set_prefer_global_menu(global_menu);
|
||||
main_menu->set_switch_on_hover(true);
|
||||
|
||||
file_menu = memnew(PopupMenu);
|
||||
file_menu->set_name(TTR("Scene"));
|
||||
main_menu->add_child(file_menu);
|
||||
main_menu->set_menu_tooltip(0, TTR("Operations with scene files."));
|
||||
|
||||
prev_scene = memnew(Button);
|
||||
prev_scene->set_flat(true);
|
||||
|
@ -6549,84 +6548,75 @@ EditorNode::EditorNode() {
|
|||
command_palette->set_title(TTR("Command Palette"));
|
||||
gui_base->add_child(command_palette);
|
||||
|
||||
PopupMenu *p;
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/new_scene", TTR("New Scene"), KeyModifierMask::CMD + Key::N), FILE_NEW_SCENE);
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/new_inherited_scene", TTR("New Inherited Scene..."), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::N), FILE_NEW_INHERITED_SCENE);
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/open_scene", TTR("Open Scene..."), KeyModifierMask::CMD + Key::O), FILE_OPEN_SCENE);
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/reopen_closed_scene", TTR("Reopen Closed Scene"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::T), FILE_OPEN_PREV);
|
||||
file_menu->add_submenu_item(TTR("Open Recent"), "RecentScenes", FILE_OPEN_RECENT);
|
||||
|
||||
file_menu->set_tooltip(TTR("Operations with scene files."));
|
||||
file_menu->add_separator();
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_scene", TTR("Save Scene"), KeyModifierMask::CMD + Key::S), FILE_SAVE_SCENE);
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_scene_as", TTR("Save Scene As..."), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::S), FILE_SAVE_AS_SCENE);
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_all_scenes", TTR("Save All Scenes"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + KeyModifierMask::ALT + Key::S), FILE_SAVE_ALL_SCENES);
|
||||
|
||||
p = file_menu->get_popup();
|
||||
file_menu->add_separator();
|
||||
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/new_scene", TTR("New Scene"), KeyModifierMask::CMD + Key::N), FILE_NEW_SCENE);
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/new_inherited_scene", TTR("New Inherited Scene..."), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::N), FILE_NEW_INHERITED_SCENE);
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/open_scene", TTR("Open Scene..."), KeyModifierMask::CMD + Key::O), FILE_OPEN_SCENE);
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/reopen_closed_scene", TTR("Reopen Closed Scene"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::T), FILE_OPEN_PREV);
|
||||
p->add_submenu_item(TTR("Open Recent"), "RecentScenes", FILE_OPEN_RECENT);
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open", TTR("Quick Open..."), KeyModifierMask::SHIFT + KeyModifierMask::ALT + Key::O), FILE_QUICK_OPEN);
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open_scene", TTR("Quick Open Scene..."), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::O), FILE_QUICK_OPEN_SCENE);
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open_script", TTR("Quick Open Script..."), KeyModifierMask::CMD + KeyModifierMask::ALT + Key::O), FILE_QUICK_OPEN_SCRIPT);
|
||||
|
||||
p->add_separator();
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_scene", TTR("Save Scene"), KeyModifierMask::CMD + Key::S), FILE_SAVE_SCENE);
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_scene_as", TTR("Save Scene As..."), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::S), FILE_SAVE_AS_SCENE);
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/save_all_scenes", TTR("Save All Scenes"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + KeyModifierMask::ALT + Key::S), FILE_SAVE_ALL_SCENES);
|
||||
|
||||
p->add_separator();
|
||||
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open", TTR("Quick Open..."), KeyModifierMask::SHIFT + KeyModifierMask::ALT + Key::O), FILE_QUICK_OPEN);
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open_scene", TTR("Quick Open Scene..."), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::O), FILE_QUICK_OPEN_SCENE);
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quick_open_script", TTR("Quick Open Script..."), KeyModifierMask::CMD + KeyModifierMask::ALT + Key::O), FILE_QUICK_OPEN_SCRIPT);
|
||||
|
||||
p->add_separator();
|
||||
file_menu->add_separator();
|
||||
export_as_menu = memnew(PopupMenu);
|
||||
export_as_menu->set_name("Export");
|
||||
p->add_child(export_as_menu);
|
||||
p->add_submenu_item(TTR("Export As..."), "Export");
|
||||
file_menu->add_child(export_as_menu);
|
||||
file_menu->add_submenu_item(TTR("Export As..."), "Export");
|
||||
export_as_menu->add_shortcut(ED_SHORTCUT("editor/export_as_mesh_library", TTR("MeshLibrary...")), FILE_EXPORT_MESH_LIBRARY);
|
||||
export_as_menu->connect("index_pressed", callable_mp(this, &EditorNode::_export_as_menu_option));
|
||||
|
||||
p->add_separator();
|
||||
p->add_shortcut(ED_GET_SHORTCUT("ui_undo"), EDIT_UNDO, true);
|
||||
p->add_shortcut(ED_GET_SHORTCUT("ui_redo"), EDIT_REDO, true);
|
||||
file_menu->add_separator();
|
||||
file_menu->add_shortcut(ED_GET_SHORTCUT("ui_undo"), EDIT_UNDO, true);
|
||||
file_menu->add_shortcut(ED_GET_SHORTCUT("ui_redo"), EDIT_REDO, true);
|
||||
|
||||
p->add_separator();
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/reload_saved_scene", TTR("Reload Saved Scene")), EDIT_RELOAD_SAVED_SCENE);
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/close_scene", TTR("Close Scene"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::W), FILE_CLOSE);
|
||||
file_menu->add_separator();
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/reload_saved_scene", TTR("Reload Saved Scene")), EDIT_RELOAD_SAVED_SCENE);
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/close_scene", TTR("Close Scene"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::W), FILE_CLOSE);
|
||||
|
||||
recent_scenes = memnew(PopupMenu);
|
||||
recent_scenes->set_name("RecentScenes");
|
||||
p->add_child(recent_scenes);
|
||||
file_menu->add_child(recent_scenes);
|
||||
recent_scenes->connect("id_pressed", callable_mp(this, &EditorNode::_open_recent_scene));
|
||||
|
||||
p->add_separator();
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/file_quit", TTR("Quit"), KeyModifierMask::CMD + Key::Q), FILE_QUIT, true);
|
||||
if (!global_menu || !OS::get_singleton()->has_feature("macos")) {
|
||||
// On macOS "Quit" and "About" options are in the "app" menu.
|
||||
file_menu->add_separator();
|
||||
file_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/file_quit", TTR("Quit"), KeyModifierMask::CMD + Key::Q), FILE_QUIT, true);
|
||||
}
|
||||
|
||||
project_menu = memnew(MenuButton);
|
||||
project_menu->set_flat(false);
|
||||
project_menu->set_switch_on_hover(true);
|
||||
project_menu->set_tooltip(TTR("Miscellaneous project or scene-wide tools."));
|
||||
project_menu->set_text(TTR("Project"));
|
||||
project_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
left_menu_hb->add_child(project_menu);
|
||||
project_menu = memnew(PopupMenu);
|
||||
project_menu->set_name(TTR("Project"));
|
||||
main_menu->add_child(project_menu);
|
||||
|
||||
p = project_menu->get_popup();
|
||||
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/project_settings", TTR("Project Settings..."), Key::NONE, TTR("Project Settings")), RUN_SETTINGS);
|
||||
p->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
|
||||
project_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/project_settings", TTR("Project Settings..."), Key::NONE, TTR("Project Settings")), RUN_SETTINGS);
|
||||
project_menu->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
|
||||
|
||||
vcs_actions_menu = VersionControlEditorPlugin::get_singleton()->get_version_control_actions_panel();
|
||||
vcs_actions_menu->set_name("Version Control");
|
||||
vcs_actions_menu->connect("index_pressed", callable_mp(this, &EditorNode::_version_control_menu_option));
|
||||
p->add_separator();
|
||||
p->add_child(vcs_actions_menu);
|
||||
p->add_submenu_item(TTR("Version Control"), "Version Control");
|
||||
project_menu->add_separator();
|
||||
project_menu->add_child(vcs_actions_menu);
|
||||
project_menu->add_submenu_item(TTR("Version Control"), "Version Control");
|
||||
vcs_actions_menu->add_item(TTR("Create Version Control Metadata"), RUN_VCS_METADATA);
|
||||
vcs_actions_menu->add_item(TTR("Set Up Version Control"), RUN_VCS_SETTINGS);
|
||||
vcs_actions_menu->add_item(TTR("Shut Down Version Control"), RUN_VCS_SHUT_DOWN);
|
||||
|
||||
p->add_separator();
|
||||
p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/export", TTR("Export..."), Key::NONE, TTR("Export")), FILE_EXPORT_PROJECT);
|
||||
p->add_item(TTR("Install Android Build Template..."), FILE_INSTALL_ANDROID_SOURCE);
|
||||
p->add_item(TTR("Open User Data Folder"), RUN_USER_DATA_FOLDER);
|
||||
project_menu->add_separator();
|
||||
project_menu->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/export", TTR("Export..."), Key::NONE, TTR("Export")), FILE_EXPORT_PROJECT);
|
||||
project_menu->add_item(TTR("Install Android Build Template..."), FILE_INSTALL_ANDROID_SOURCE);
|
||||
project_menu->add_item(TTR("Open User Data Folder"), RUN_USER_DATA_FOLDER);
|
||||
|
||||
p->add_separator();
|
||||
p->add_item(TTR("Customize Engine Build Configuration..."), TOOLS_BUILD_PROFILE_MANAGER);
|
||||
p->add_separator();
|
||||
project_menu->add_separator();
|
||||
project_menu->add_item(TTR("Customize Engine Build Configuration..."), TOOLS_BUILD_PROFILE_MANAGER);
|
||||
project_menu->add_separator();
|
||||
|
||||
plugin_config_dialog = memnew(PluginConfigDialog);
|
||||
plugin_config_dialog->connect("plugin_ready", callable_mp(this, &EditorNode::_on_plugin_ready));
|
||||
|
@ -6635,15 +6625,15 @@ EditorNode::EditorNode() {
|
|||
tool_menu = memnew(PopupMenu);
|
||||
tool_menu->set_name("Tools");
|
||||
tool_menu->connect("index_pressed", callable_mp(this, &EditorNode::_tool_menu_option));
|
||||
p->add_child(tool_menu);
|
||||
p->add_submenu_item(TTR("Tools"), "Tools");
|
||||
project_menu->add_child(tool_menu);
|
||||
project_menu->add_submenu_item(TTR("Tools"), "Tools");
|
||||
tool_menu->add_item(TTR("Orphan Resource Explorer..."), TOOLS_ORPHAN_RESOURCES);
|
||||
|
||||
p->add_separator();
|
||||
p->add_shortcut(ED_SHORTCUT("editor/reload_current_project", TTR("Reload Current Project")), RELOAD_CURRENT_PROJECT);
|
||||
project_menu->add_separator();
|
||||
project_menu->add_shortcut(ED_SHORTCUT("editor/reload_current_project", TTR("Reload Current Project")), RELOAD_CURRENT_PROJECT);
|
||||
ED_SHORTCUT_AND_COMMAND("editor/quit_to_project_list", TTR("Quit to Project List"), KeyModifierMask::CMD + KeyModifierMask::SHIFT + Key::Q);
|
||||
ED_SHORTCUT_OVERRIDE("editor/quit_to_project_list", "macos", KeyModifierMask::SHIFT + KeyModifierMask::ALT + Key::Q);
|
||||
p->add_shortcut(ED_GET_SHORTCUT("editor/quit_to_project_list"), RUN_PROJECT_MANAGER, true);
|
||||
project_menu->add_shortcut(ED_GET_SHORTCUT("editor/quit_to_project_list"), RUN_PROJECT_MANAGER, true);
|
||||
|
||||
menu_hb->add_spacer();
|
||||
|
||||
|
@ -6651,85 +6641,79 @@ EditorNode::EditorNode() {
|
|||
menu_hb->add_child(main_editor_button_vb);
|
||||
|
||||
// Options are added and handled by DebuggerEditorPlugin.
|
||||
debug_menu = memnew(MenuButton);
|
||||
debug_menu->set_flat(false);
|
||||
debug_menu->set_switch_on_hover(true);
|
||||
debug_menu->set_text(TTR("Debug"));
|
||||
debug_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
left_menu_hb->add_child(debug_menu);
|
||||
debug_menu = memnew(PopupMenu);
|
||||
debug_menu->set_name(TTR("Debug"));
|
||||
main_menu->add_child(debug_menu);
|
||||
|
||||
menu_hb->add_spacer();
|
||||
|
||||
settings_menu = memnew(MenuButton);
|
||||
settings_menu->set_flat(false);
|
||||
settings_menu->set_switch_on_hover(true);
|
||||
settings_menu->set_text(TTR("Editor"));
|
||||
settings_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
left_menu_hb->add_child(settings_menu);
|
||||
|
||||
p = settings_menu->get_popup();
|
||||
settings_menu = memnew(PopupMenu);
|
||||
settings_menu->set_name(TTR("Editor"));
|
||||
main_menu->add_child(settings_menu);
|
||||
|
||||
ED_SHORTCUT_AND_COMMAND("editor/editor_settings", TTR("Editor Settings..."));
|
||||
ED_SHORTCUT_OVERRIDE("editor/editor_settings", "macos", KeyModifierMask::CMD + Key::COMMA);
|
||||
p->add_shortcut(ED_GET_SHORTCUT("editor/editor_settings"), SETTINGS_PREFERENCES);
|
||||
p->add_shortcut(ED_SHORTCUT("editor/command_palette", TTR("Command Palette..."), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::P), HELP_COMMAND_PALETTE);
|
||||
p->add_separator();
|
||||
settings_menu->add_shortcut(ED_GET_SHORTCUT("editor/editor_settings"), SETTINGS_PREFERENCES);
|
||||
settings_menu->add_shortcut(ED_SHORTCUT("editor/command_palette", TTR("Command Palette..."), KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::P), HELP_COMMAND_PALETTE);
|
||||
settings_menu->add_separator();
|
||||
|
||||
editor_layouts = memnew(PopupMenu);
|
||||
editor_layouts->set_name("Layouts");
|
||||
p->add_child(editor_layouts);
|
||||
settings_menu->add_child(editor_layouts);
|
||||
editor_layouts->connect("id_pressed", callable_mp(this, &EditorNode::_layout_menu_option));
|
||||
p->add_submenu_item(TTR("Editor Layout"), "Layouts");
|
||||
p->add_separator();
|
||||
settings_menu->add_submenu_item(TTR("Editor Layout"), "Layouts");
|
||||
settings_menu->add_separator();
|
||||
|
||||
ED_SHORTCUT_AND_COMMAND("editor/take_screenshot", TTR("Take Screenshot"), KeyModifierMask::CTRL | Key::F12);
|
||||
ED_SHORTCUT_OVERRIDE("editor/take_screenshot", "macos", KeyModifierMask::CMD | Key::F12);
|
||||
p->add_shortcut(ED_GET_SHORTCUT("editor/take_screenshot"), EDITOR_SCREENSHOT);
|
||||
settings_menu->add_shortcut(ED_GET_SHORTCUT("editor/take_screenshot"), EDITOR_SCREENSHOT);
|
||||
|
||||
p->set_item_tooltip(-1, TTR("Screenshots are stored in the Editor Data/Settings Folder."));
|
||||
settings_menu->set_item_tooltip(-1, TTR("Screenshots are stored in the Editor Data/Settings Folder."));
|
||||
|
||||
ED_SHORTCUT_AND_COMMAND("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KeyModifierMask::SHIFT | Key::F11);
|
||||
ED_SHORTCUT_OVERRIDE("editor/fullscreen_mode", "macos", KeyModifierMask::CMD | KeyModifierMask::CTRL | Key::F);
|
||||
p->add_shortcut(ED_GET_SHORTCUT("editor/fullscreen_mode"), SETTINGS_TOGGLE_FULLSCREEN);
|
||||
settings_menu->add_shortcut(ED_GET_SHORTCUT("editor/fullscreen_mode"), SETTINGS_TOGGLE_FULLSCREEN);
|
||||
|
||||
p->add_separator();
|
||||
settings_menu->add_separator();
|
||||
|
||||
if (OS::get_singleton()->get_data_path() == OS::get_singleton()->get_config_path()) {
|
||||
// Configuration and data folders are located in the same place (Windows/MacOS).
|
||||
p->add_item(TTR("Open Editor Data/Settings Folder"), SETTINGS_EDITOR_DATA_FOLDER);
|
||||
settings_menu->add_item(TTR("Open Editor Data/Settings Folder"), SETTINGS_EDITOR_DATA_FOLDER);
|
||||
} else {
|
||||
// Separate configuration and data folders (Linux).
|
||||
p->add_item(TTR("Open Editor Data Folder"), SETTINGS_EDITOR_DATA_FOLDER);
|
||||
p->add_item(TTR("Open Editor Settings Folder"), SETTINGS_EDITOR_CONFIG_FOLDER);
|
||||
settings_menu->add_item(TTR("Open Editor Data Folder"), SETTINGS_EDITOR_DATA_FOLDER);
|
||||
settings_menu->add_item(TTR("Open Editor Settings Folder"), SETTINGS_EDITOR_CONFIG_FOLDER);
|
||||
}
|
||||
p->add_separator();
|
||||
settings_menu->add_separator();
|
||||
|
||||
p->add_item(TTR("Manage Editor Features..."), SETTINGS_MANAGE_FEATURE_PROFILES);
|
||||
p->add_item(TTR("Manage Export Templates..."), SETTINGS_MANAGE_EXPORT_TEMPLATES);
|
||||
settings_menu->add_item(TTR("Manage Editor Features..."), SETTINGS_MANAGE_FEATURE_PROFILES);
|
||||
settings_menu->add_item(TTR("Manage Export Templates..."), SETTINGS_MANAGE_EXPORT_TEMPLATES);
|
||||
|
||||
help_menu = memnew(MenuButton);
|
||||
help_menu->set_flat(false);
|
||||
help_menu->set_switch_on_hover(true);
|
||||
help_menu->set_text(TTR("Help"));
|
||||
help_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("MenuHover"), SNAME("EditorStyles")));
|
||||
left_menu_hb->add_child(help_menu);
|
||||
help_menu = memnew(PopupMenu);
|
||||
help_menu->set_name(TTR("Help"));
|
||||
main_menu->add_child(help_menu);
|
||||
|
||||
p = help_menu->get_popup();
|
||||
p->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
|
||||
help_menu->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
|
||||
|
||||
ED_SHORTCUT_AND_COMMAND("editor/editor_help", TTR("Search Help"), Key::F1);
|
||||
ED_SHORTCUT_OVERRIDE("editor/editor_help", "macos", KeyModifierMask::ALT | Key::SPACE);
|
||||
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("HelpSearch"), SNAME("EditorIcons")), ED_GET_SHORTCUT("editor/editor_help"), HELP_SEARCH);
|
||||
p->add_separator();
|
||||
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/online_docs", TTR("Online Documentation")), HELP_DOCS);
|
||||
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/q&a", TTR("Questions & Answers")), HELP_QA);
|
||||
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/report_a_bug", TTR("Report a Bug")), HELP_REPORT_A_BUG);
|
||||
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/suggest_a_feature", TTR("Suggest a Feature")), HELP_SUGGEST_A_FEATURE);
|
||||
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/send_docs_feedback", TTR("Send Docs Feedback")), HELP_SEND_DOCS_FEEDBACK);
|
||||
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/community", TTR("Community")), HELP_COMMUNITY);
|
||||
p->add_separator();
|
||||
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("Godot"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/about", TTR("About Godot")), HELP_ABOUT);
|
||||
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("Heart"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/support_development", TTR("Support Godot Development")), HELP_SUPPORT_GODOT_DEVELOPMENT);
|
||||
help_menu->add_icon_shortcut(gui_base->get_theme_icon(SNAME("HelpSearch"), SNAME("EditorIcons")), ED_GET_SHORTCUT("editor/editor_help"), HELP_SEARCH);
|
||||
help_menu->add_separator();
|
||||
help_menu->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/online_docs", TTR("Online Documentation")), HELP_DOCS);
|
||||
help_menu->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/q&a", TTR("Questions & Answers")), HELP_QA);
|
||||
help_menu->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/report_a_bug", TTR("Report a Bug")), HELP_REPORT_A_BUG);
|
||||
help_menu->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/suggest_a_feature", TTR("Suggest a Feature")), HELP_SUGGEST_A_FEATURE);
|
||||
help_menu->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/send_docs_feedback", TTR("Send Docs Feedback")), HELP_SEND_DOCS_FEEDBACK);
|
||||
help_menu->add_icon_shortcut(gui_base->get_theme_icon(SNAME("ExternalLink"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/community", TTR("Community")), HELP_COMMUNITY);
|
||||
help_menu->add_separator();
|
||||
if (!global_menu || !OS::get_singleton()->has_feature("macos")) {
|
||||
// On macOS "Quit" and "About" options are in the "app" menu.
|
||||
help_menu->add_icon_shortcut(gui_base->get_theme_icon(SNAME("Godot"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/about", TTR("About Godot")), HELP_ABOUT);
|
||||
}
|
||||
help_menu->add_icon_shortcut(gui_base->get_theme_icon(SNAME("Heart"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/support_development", TTR("Support Godot Development")), HELP_SUPPORT_GODOT_DEVELOPMENT);
|
||||
|
||||
Control *right_spacer = memnew(Control);
|
||||
menu_hb->add_child(right_spacer);
|
||||
|
||||
HBoxContainer *play_hb = memnew(HBoxContainer);
|
||||
menu_hb->add_child(play_hb);
|
||||
|
@ -6878,7 +6862,7 @@ EditorNode::EditorNode() {
|
|||
right_menu_hb->add_child(update_spinner);
|
||||
update_spinner->set_icon(gui_base->get_theme_icon(SNAME("Progress1"), SNAME("EditorIcons")));
|
||||
update_spinner->get_popup()->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
|
||||
p = update_spinner->get_popup();
|
||||
PopupMenu *p = update_spinner->get_popup();
|
||||
p->add_radio_check_item(TTR("Update Continuously"), SETTINGS_UPDATE_CONTINUOUSLY);
|
||||
p->add_radio_check_item(TTR("Update When Changed"), SETTINGS_UPDATE_WHEN_CHANGED);
|
||||
p->add_separator();
|
||||
|
@ -7098,11 +7082,11 @@ EditorNode::EditorNode() {
|
|||
gui_base->add_child(file_script);
|
||||
file_script->connect("file_selected", callable_mp(this, &EditorNode::_dialog_action));
|
||||
|
||||
file_menu->get_popup()->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
|
||||
file_menu->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
|
||||
file_menu->connect("about_to_popup", callable_mp(this, &EditorNode::_update_file_menu_opened));
|
||||
file_menu->get_popup()->connect("popup_hide", callable_mp(this, &EditorNode::_update_file_menu_closed));
|
||||
file_menu->connect("popup_hide", callable_mp(this, &EditorNode::_update_file_menu_closed));
|
||||
|
||||
settings_menu->get_popup()->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
|
||||
settings_menu->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
|
||||
|
||||
file->connect("file_selected", callable_mp(this, &EditorNode::_dialog_action));
|
||||
file_templates->connect("file_selected", callable_mp(this, &EditorNode::_dialog_action));
|
||||
|
@ -7385,11 +7369,14 @@ EditorNode::EditorNode() {
|
|||
|
||||
screenshot_timer = memnew(Timer);
|
||||
screenshot_timer->set_one_shot(true);
|
||||
screenshot_timer->set_wait_time(settings_menu->get_popup()->get_submenu_popup_delay() + 0.1f);
|
||||
screenshot_timer->set_wait_time(settings_menu->get_submenu_popup_delay() + 0.1f);
|
||||
screenshot_timer->connect("timeout", callable_mp(this, &EditorNode::_request_screenshot));
|
||||
add_child(screenshot_timer);
|
||||
screenshot_timer->set_owner(get_owner());
|
||||
|
||||
main_menu->set_custom_minimum_size(Size2(MAX(main_menu->get_minimum_size().x, play_hb->get_minimum_size().x + right_menu_hb->get_minimum_size().x), 0));
|
||||
right_spacer->set_custom_minimum_size(Size2(MAX(0, main_menu->get_minimum_size().x - play_hb->get_minimum_size().x - right_menu_hb->get_minimum_size().x), 0));
|
||||
|
||||
String exec = OS::get_singleton()->get_executable_path();
|
||||
// Save editor executable path for third-party tools.
|
||||
EditorSettings::get_singleton()->set_project_metadata("editor_metadata", "executable_path", exec);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue