From 1a2eb487052ea8fb9c20125457a13351d860ed9b Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Thu, 16 Mar 2023 20:54:56 -0500 Subject: [PATCH] Added updating the main menu shortcut keys on editor options saved. Also adds an action that can be used to update plugin short keys if needed. --- Source/Editor/Modules/UIModule.cs | 55 +++++++++++++++----- Source/Editor/Windows/EditorOptionsWindow.cs | 2 + 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/Source/Editor/Modules/UIModule.cs b/Source/Editor/Modules/UIModule.cs index 4edd4540b..2e106e52e 100644 --- a/Source/Editor/Modules/UIModule.cs +++ b/Source/Editor/Modules/UIModule.cs @@ -39,6 +39,7 @@ namespace FlaxEditor.Modules private ContextMenuButton _menuFileSaveScenes; private ContextMenuButton _menuFileCloseScenes; private ContextMenuButton _menuFileGenerateScriptsProjectFiles; + private ContextMenuButton _menuSaveAll; private ContextMenuButton _menuEditUndo; private ContextMenuButton _menuEditRedo; private ContextMenuButton _menuEditCut; @@ -47,6 +48,7 @@ namespace FlaxEditor.Modules private ContextMenuButton _menuEditDelete; private ContextMenuButton _menuEditDuplicate; private ContextMenuButton _menuEditSelectAll; + private ContextMenuButton _menuEditFind; private ContextMenuButton _menuSceneMoveActorToViewport; private ContextMenuButton _menuSceneAlignActorWithViewport; private ContextMenuButton _menuSceneAlignViewportWithActor; @@ -136,6 +138,11 @@ namespace FlaxEditor.Modules /// public MainMenuButton MenuHelp { get; private set; } + /// + /// Fired when the main menu short cut keys are updated. Can be used to update plugin short cut keys. + /// + public event Action MainMenuShortcutKeysUpdated; + internal UIModule(Editor editor) : base(editor) { @@ -464,11 +471,13 @@ namespace FlaxEditor.Modules Parent = mainWindow }; + var inputOptions = Editor.Options.Options.Input; + // File MenuFile = MainMenu.AddButton("File"); var cm = MenuFile.ContextMenu; cm.VisibleChanged += OnMenuFileShowHide; - cm.AddButton("Save All", "Ctrl+S", Editor.SaveAll); + _menuSaveAll = cm.AddButton("Save All", inputOptions.Save.ToString(), Editor.SaveAll); _menuFileSaveScenes = cm.AddButton("Save scenes", Editor.Scene.SaveScenes); _menuFileCloseScenes = cm.AddButton("Close scenes", Editor.Scene.CloseAllScenes); cm.AddSeparator(); @@ -484,18 +493,18 @@ namespace FlaxEditor.Modules MenuEdit = MainMenu.AddButton("Edit"); cm = MenuEdit.ContextMenu; cm.VisibleChanged += OnMenuEditShowHide; - _menuEditUndo = cm.AddButton(string.Empty, "Ctrl+Z", Editor.PerformUndo); - _menuEditRedo = cm.AddButton(string.Empty, "Ctrl+Y", Editor.PerformRedo); + _menuEditUndo = cm.AddButton(string.Empty, inputOptions.Undo.ToString(), Editor.PerformUndo); + _menuEditRedo = cm.AddButton(string.Empty, inputOptions.Redo.ToString(), Editor.PerformRedo); cm.AddSeparator(); - _menuEditCut = cm.AddButton("Cut", "Ctrl+X", Editor.SceneEditing.Cut); - _menuEditCopy = cm.AddButton("Copy", "Ctrl+C", Editor.SceneEditing.Copy); - _menuEditPaste = cm.AddButton("Paste", "Ctrl+V", Editor.SceneEditing.Paste); + _menuEditCut = cm.AddButton("Cut", inputOptions.Cut.ToString(), Editor.SceneEditing.Cut); + _menuEditCopy = cm.AddButton("Copy", inputOptions.Copy.ToString(), Editor.SceneEditing.Copy); + _menuEditPaste = cm.AddButton("Paste", inputOptions.Paste.ToString(), Editor.SceneEditing.Paste); cm.AddSeparator(); - _menuEditDelete = cm.AddButton("Delete", "Del", Editor.SceneEditing.Delete); - _menuEditDuplicate = cm.AddButton("Duplicate", "Ctrl+D", Editor.SceneEditing.Duplicate); + _menuEditDelete = cm.AddButton("Delete", inputOptions.Delete.ToString(), Editor.SceneEditing.Delete); + _menuEditDuplicate = cm.AddButton("Duplicate", inputOptions.Duplicate.ToString(), Editor.SceneEditing.Duplicate); cm.AddSeparator(); - _menuEditSelectAll = cm.AddButton("Select all", "Ctrl+A", Editor.SceneEditing.SelectAllScenes); - cm.AddButton("Find", "Ctrl+F", Editor.Windows.SceneWin.Search); + _menuEditSelectAll = cm.AddButton("Select all", inputOptions.SelectAll.ToString(), Editor.SceneEditing.SelectAllScenes); + _menuEditFind = cm.AddButton("Find", inputOptions.Search.ToString(), Editor.Windows.SceneWin.Search); // Scene MenuScene = MainMenu.AddButton("Scene"); @@ -512,8 +521,8 @@ namespace FlaxEditor.Modules MenuGame = MainMenu.AddButton("Game"); cm = MenuGame.ContextMenu; cm.VisibleChanged += OnMenuGameShowHide; - _menuGamePlay = cm.AddButton("Play", "F5", Editor.Simulation.RequestStartPlay); - _menuGamePause = cm.AddButton("Pause", "F6", Editor.Simulation.RequestPausePlay); + _menuGamePlay = cm.AddButton("Play", inputOptions.Play.ToString(), Editor.Simulation.RequestStartPlay); + _menuGamePause = cm.AddButton("Pause", inputOptions.Pause.ToString(), Editor.Simulation.RequestPausePlay); cm.AddSeparator(); cm.AddButton("Cook&Run", Editor.Windows.GameCookerWin.BuildAndRun).LinkTooltip("Runs Game Cooker to build the game for this platform and runs the game after."); cm.AddButton("Run cooked game", Editor.Windows.GameCookerWin.RunCooked).LinkTooltip("Runs the game build from the last cooking output. Use Cook&Play or Game Cooker first."); @@ -579,6 +588,28 @@ namespace FlaxEditor.Modules cm.AddButton("Information about Flax", () => new AboutDialog().Show()); } + /// + /// Updates the short cut keys for the main menu + /// + public void UpdateMainMenuShortcuts() + { + var inputOptions = Editor.Options.Options.Input; + + _menuSaveAll.ShortKeys = inputOptions.Save.ToString(); + _menuEditUndo.ShortKeys = inputOptions.Undo.ToString(); + _menuEditRedo.ShortKeys = inputOptions.Redo.ToString(); + _menuEditCut.ShortKeys = inputOptions.Cut.ToString(); + _menuEditCopy.ShortKeys = inputOptions.Copy.ToString(); + _menuEditDelete.ShortKeys = inputOptions.Delete.ToString(); + _menuEditDuplicate.ShortKeys = inputOptions.Duplicate.ToString(); + _menuEditSelectAll.ShortKeys = inputOptions.SelectAll.ToString(); + _menuEditFind.ShortKeys = inputOptions.Search.ToString(); + _menuGamePlay.ShortKeys = inputOptions.Play.ToString(); + _menuGamePause.ShortKeys = inputOptions.Pause.ToString(); + + MainMenuShortcutKeysUpdated?.Invoke(); + } + private void InitToolstrip(RootControl mainWindow) { ToolStrip = new ToolStrip(34.0f, MainMenu.Bottom) diff --git a/Source/Editor/Windows/EditorOptionsWindow.cs b/Source/Editor/Windows/EditorOptionsWindow.cs index 2942f98c0..4597eeae5 100644 --- a/Source/Editor/Windows/EditorOptionsWindow.cs +++ b/Source/Editor/Windows/EditorOptionsWindow.cs @@ -144,6 +144,8 @@ namespace FlaxEditor.Windows } Editor.Options.Apply(_options); + + Editor.UI.UpdateMainMenuShortcuts(); ClearDirtyFlag(); }