Add input bindings for File menu actions

This commit is contained in:
2023-09-23 15:21:33 +03:00
parent a1cbaba743
commit 52cf4df641
4 changed files with 92 additions and 45 deletions

View File

@@ -42,8 +42,10 @@ namespace FlaxEditor.Modules
private ContextMenuButton _menuFileSaveScenes;
private ContextMenuButton _menuFileCloseScenes;
private ContextMenuButton _menuFileOpenScriptsProject;
private ContextMenuButton _menuFileGenerateScriptsProjectFiles;
private ContextMenuButton _menuSaveAll;
private ContextMenuButton _menuFileRecompileScripts;
private ContextMenuButton _menuFileSaveAll;
private ContextMenuButton _menuEditUndo;
private ContextMenuButton _menuEditRedo;
private ContextMenuButton _menuEditCut;
@@ -514,13 +516,13 @@ namespace FlaxEditor.Modules
MenuFile = MainMenu.AddButton("File");
var cm = MenuFile.ContextMenu;
cm.VisibleChanged += OnMenuFileShowHide;
_menuSaveAll = cm.AddButton("Save All", inputOptions.Save, Editor.SaveAll);
_menuFileSaveScenes = cm.AddButton("Save scenes", Editor.Scene.SaveScenes);
_menuFileCloseScenes = cm.AddButton("Close scenes", Editor.Scene.CloseAllScenes);
_menuFileSaveAll = cm.AddButton("Save All", inputOptions.Save, Editor.SaveAll);
_menuFileSaveScenes = cm.AddButton("Save scenes", inputOptions.SaveScenes, Editor.Scene.SaveScenes);
_menuFileCloseScenes = cm.AddButton("Close scenes", inputOptions.CloseScenes, Editor.Scene.CloseAllScenes);
cm.AddSeparator();
cm.AddButton("Open scripts project", Editor.CodeEditing.OpenSolution);
_menuFileGenerateScriptsProjectFiles = cm.AddButton("Generate scripts project files", Editor.ProgressReporting.GenerateScriptsProjectFiles.RunAsync);
cm.AddButton("Recompile scripts", ScriptsBuilder.Compile);
_menuFileOpenScriptsProject = cm.AddButton("Open scripts project", inputOptions.OpenScriptsProject, Editor.CodeEditing.OpenSolution);
_menuFileGenerateScriptsProjectFiles = cm.AddButton("Generate scripts project files", inputOptions.GenerateScriptsProject, Editor.ProgressReporting.GenerateScriptsProjectFiles.RunAsync);
_menuFileRecompileScripts = cm.AddButton("Recompile scripts", inputOptions.RecompileScripts, ScriptsBuilder.Compile);
cm.AddSeparator();
cm.AddButton("Open project...", OpenProject);
cm.AddSeparator();
@@ -639,7 +641,12 @@ namespace FlaxEditor.Modules
{
var inputOptions = options.Input;
_menuSaveAll.ShortKeys = inputOptions.Save.ToString();
_menuFileSaveAll.ShortKeys = inputOptions.Save.ToString();
_menuFileSaveScenes.ShortKeys = inputOptions.SaveScenes.ToString();
_menuFileCloseScenes.ShortKeys = inputOptions.CloseScenes.ToString();
_menuFileOpenScriptsProject.ShortKeys = inputOptions.OpenScriptsProject.ToString();
_menuFileGenerateScriptsProjectFiles.ShortKeys = inputOptions.GenerateScriptsProject.ToString();
_menuFileRecompileScripts.ShortKeys = inputOptions.RecompileScripts.ToString();
_menuEditUndo.ShortKeys = inputOptions.Undo.ToString();
_menuEditRedo.ShortKeys = inputOptions.Redo.ToString();
_menuEditCut.ShortKeys = inputOptions.Cut.ToString();

View File

@@ -78,6 +78,30 @@ namespace FlaxEditor.Options
#endregion
#region File
[DefaultValue(typeof(InputBinding), "None")]
[EditorDisplay("File"), EditorOrder(300)]
public InputBinding SaveScenes = new InputBinding(KeyboardKeys.None);
[DefaultValue(typeof(InputBinding), "None")]
[EditorDisplay("File"), EditorOrder(310)]
public InputBinding CloseScenes = new InputBinding(KeyboardKeys.None);
[DefaultValue(typeof(InputBinding), "None")]
[EditorDisplay("File"), EditorOrder(320)]
public InputBinding OpenScriptsProject = new InputBinding(KeyboardKeys.None);
[DefaultValue(typeof(InputBinding), "None")]
[EditorDisplay("File"), EditorOrder(330)]
public InputBinding GenerateScriptsProject = new InputBinding(KeyboardKeys.None);
[DefaultValue(typeof(InputBinding), "None")]
[EditorDisplay("File"), EditorOrder(340)]
public InputBinding RecompileScripts = new InputBinding(KeyboardKeys.None);
#endregion
#region Scene
[DefaultValue(typeof(InputBinding), "End")]

View File

@@ -18,10 +18,10 @@ using FlaxEditor.GUI.ContextMenu;
using FlaxEditor.GUI.Input;
using FlaxEditor.GUI.Tree;
using FlaxEditor.SceneGraph;
using FlaxEditor.Scripting;
using FlaxEngine;
using FlaxEngine.GUI;
using FlaxEngine.Utilities;
using FlaxEditor.Windows;
namespace FlaxEngine
{
@@ -1235,5 +1235,56 @@ namespace FlaxEditor.Utilities
}
return s;
}
/// <summary>
/// Binds global input actions for the window.
/// </summary>
/// <param name="window">The editor window.</param>
public static void SetupCommonInputActions(EditorWindow window)
{
var inputActions = window.InputActions;
// Setup input actions
inputActions.Add(options => options.Save, Editor.Instance.SaveAll);
inputActions.Add(options => options.Undo, () =>
{
Editor.Instance.PerformUndo();
window.Focus();
});
inputActions.Add(options => options.Redo, () =>
{
Editor.Instance.PerformRedo();
window.Focus();
});
inputActions.Add(options => options.Cut, Editor.Instance.SceneEditing.Cut);
inputActions.Add(options => options.Copy, Editor.Instance.SceneEditing.Copy);
inputActions.Add(options => options.Paste, Editor.Instance.SceneEditing.Paste);
inputActions.Add(options => options.Duplicate, Editor.Instance.SceneEditing.Duplicate);
inputActions.Add(options => options.SelectAll, Editor.Instance.SceneEditing.SelectAllScenes);
inputActions.Add(options => options.Delete, Editor.Instance.SceneEditing.Delete);
inputActions.Add(options => options.Search, () => Editor.Instance.Windows.SceneWin.Search());
inputActions.Add(options => options.Play, Editor.Instance.Simulation.DelegatePlayOrStopPlayInEditor);
inputActions.Add(options => options.PlayCurrentScenes, Editor.Instance.Simulation.RequestPlayScenesOrStopPlay);
inputActions.Add(options => options.Pause, Editor.Instance.Simulation.RequestResumeOrPause);
inputActions.Add(options => options.StepFrame, Editor.Instance.Simulation.RequestPlayOneFrame);
inputActions.Add(options => options.CookAndRun, () => Editor.Instance.Windows.GameCookerWin.BuildAndRun());
inputActions.Add(options => options.RunCookedGame, () => Editor.Instance.Windows.GameCookerWin.RunCooked());
inputActions.Add(options => options.BuildScenesData, Editor.Instance.BuildScenesOrCancel);
inputActions.Add(options => options.BakeLightmaps, Editor.Instance.BakeLightmapsOrCancel);
inputActions.Add(options => options.ClearLightmaps, Editor.Instance.ClearLightmaps);
inputActions.Add(options => options.BakeEnvProbes, Editor.Instance.BakeAllEnvProbes);
inputActions.Add(options => options.BuildCSG, Editor.Instance.BuildCSG);
inputActions.Add(options => options.BuildNav, Editor.Instance.BuildNavMesh);
inputActions.Add(options => options.BuildSDF, Editor.Instance.BuildAllMeshesSDF);
inputActions.Add(options => options.TakeScreenshot, Editor.Instance.Windows.TakeScreenshot);
inputActions.Add(options => options.ProfilerWindow, () => Editor.Instance.Windows.ProfilerWin.FocusOrShow());
inputActions.Add(options => options.ProfilerStartStop, () => { Editor.Instance.Windows.ProfilerWin.LiveRecording = !Editor.Instance.Windows.ProfilerWin.LiveRecording; Editor.Instance.UI.AddStatusMessage($"Profiling {(Editor.Instance.Windows.ProfilerWin.LiveRecording ? "started" : "stopped")}."); });
inputActions.Add(options => options.ProfilerClear, () => { Editor.Instance.Windows.ProfilerWin.Clear(); Editor.Instance.UI.AddStatusMessage($"Profiling results cleared."); });
inputActions.Add(options => options.SaveScenes, () => Editor.Instance.Scene.SaveScenes());
inputActions.Add(options => options.CloseScenes, () => Editor.Instance.Scene.CloseAllScenes());
inputActions.Add(options => options.OpenScriptsProject, () => Editor.Instance.CodeEditing.OpenSolution());
inputActions.Add(options => options.GenerateScriptsProject, () => Editor.Instance.ProgressReporting.GenerateScriptsProjectFiles.RunAsync());
inputActions.Add(options => options.RecompileScripts, ScriptsBuilder.Compile);
}
}
}

View File

@@ -19,42 +19,7 @@ namespace FlaxEditor.Windows
protected SceneEditorWindow(Editor editor, bool hideOnClose, ScrollBars scrollBars)
: base(editor, hideOnClose, scrollBars)
{
// Setup input actions
InputActions.Add(options => options.Save, Editor.SaveAll);
InputActions.Add(options => options.Undo, () =>
{
Editor.PerformUndo();
Focus();
});
InputActions.Add(options => options.Redo, () =>
{
Editor.PerformRedo();
Focus();
});
InputActions.Add(options => options.Cut, Editor.SceneEditing.Cut);
InputActions.Add(options => options.Copy, Editor.SceneEditing.Copy);
InputActions.Add(options => options.Paste, Editor.SceneEditing.Paste);
InputActions.Add(options => options.Duplicate, Editor.SceneEditing.Duplicate);
InputActions.Add(options => options.SelectAll, Editor.SceneEditing.SelectAllScenes);
InputActions.Add(options => options.Delete, Editor.SceneEditing.Delete);
InputActions.Add(options => options.Search, () => Editor.Windows.SceneWin.Search());
InputActions.Add(options => options.Play, Editor.Simulation.DelegatePlayOrStopPlayInEditor);
InputActions.Add(options => options.PlayCurrentScenes, Editor.Simulation.RequestPlayScenesOrStopPlay);
InputActions.Add(options => options.Pause, Editor.Simulation.RequestResumeOrPause);
InputActions.Add(options => options.StepFrame, Editor.Simulation.RequestPlayOneFrame);
InputActions.Add(options => options.CookAndRun, () => Editor.Windows.GameCookerWin.BuildAndRun());
InputActions.Add(options => options.RunCookedGame, () => Editor.Windows.GameCookerWin.RunCooked());
InputActions.Add(options => options.BuildScenesData, Editor.BuildScenesOrCancel);
InputActions.Add(options => options.BakeLightmaps, Editor.BakeLightmapsOrCancel);
InputActions.Add(options => options.ClearLightmaps, Editor.ClearLightmaps);
InputActions.Add(options => options.BakeEnvProbes, Editor.BakeAllEnvProbes);
InputActions.Add(options => options.BuildCSG, Editor.BuildCSG);
InputActions.Add(options => options.BuildNav, Editor.BuildNavMesh);
InputActions.Add(options => options.BuildSDF, Editor.BuildAllMeshesSDF);
InputActions.Add(options => options.TakeScreenshot, Editor.Windows.TakeScreenshot);
InputActions.Add(options => options.ProfilerWindow, () => Editor.Windows.ProfilerWin.FocusOrShow());
InputActions.Add(options => options.ProfilerStartStop, () => { Editor.Windows.ProfilerWin.LiveRecording = !Editor.Windows.ProfilerWin.LiveRecording; Editor.UI.AddStatusMessage($"Profiling {(Editor.Windows.ProfilerWin.LiveRecording ? "started" : "stopped")}."); });
InputActions.Add(options => options.ProfilerClear, () => { Editor.Windows.ProfilerWin.Clear(); Editor.UI.AddStatusMessage($"Profiling results cleared."); });
FlaxEditor.Utilities.Utils.SetupCommonInputActions(this);
}
}
}