diff --git a/Source/Editor/Modules/UIModule.cs b/Source/Editor/Modules/UIModule.cs
index e675b4fe0..6b3c705cc 100644
--- a/Source/Editor/Modules/UIModule.cs
+++ b/Source/Editor/Modules/UIModule.cs
@@ -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();
diff --git a/Source/Editor/Options/InputOptions.cs b/Source/Editor/Options/InputOptions.cs
index b19a46596..90d098bb6 100644
--- a/Source/Editor/Options/InputOptions.cs
+++ b/Source/Editor/Options/InputOptions.cs
@@ -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")]
diff --git a/Source/Editor/Utilities/Utils.cs b/Source/Editor/Utilities/Utils.cs
index fe801bbaf..134f9cae4 100644
--- a/Source/Editor/Utilities/Utils.cs
+++ b/Source/Editor/Utilities/Utils.cs
@@ -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;
}
+
+ ///
+ /// Binds global input actions for the window.
+ ///
+ /// The editor window.
+ 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);
+ }
}
}
diff --git a/Source/Editor/Windows/SceneEditorWindow.cs b/Source/Editor/Windows/SceneEditorWindow.cs
index 0241207ac..04cce47e8 100644
--- a/Source/Editor/Windows/SceneEditorWindow.cs
+++ b/Source/Editor/Windows/SceneEditorWindow.cs
@@ -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);
}
}
}