SettingsWindow.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using System;
  4. using bs;
  5. namespace bs.Editor
  6. {
  7. /** @addtogroup Settings
  8. * @{
  9. */
  10. /// <summary>
  11. /// Displays project and editor settings.
  12. /// </summary>
  13. [DefaultSize(300, 200)]
  14. internal sealed class SettingsWindow : EditorWindow
  15. {
  16. internal const string ActiveCodeEditorKey = "__ActiveCodeEditor";
  17. private GUIFloatField defaultHandleSizeField;
  18. private GUIToggleField autoLoadLastProjectField;
  19. private GUIListBoxField codeEditorField;
  20. private GUIIntField fpsLimitField;
  21. private GUISliderField mouseSensitivityField;
  22. /// <summary>
  23. /// Opens the settings window if its not open already.
  24. /// </summary>
  25. [MenuItem("Tools/Settings", 9250, true)]
  26. private static void OpenSettingsWindow()
  27. {
  28. OpenWindow<SettingsWindow>();
  29. }
  30. /// <inheritdoc/>
  31. protected override LocString GetDisplayName()
  32. {
  33. return new LocEdString("Settings");
  34. }
  35. private void OnInitialize()
  36. {
  37. GUIToggle projectFoldout = new GUIToggle(new LocEdString("Project"), EditorStyles.Foldout);
  38. GUIToggle editorFoldout = new GUIToggle(new LocEdString("Editor"), EditorStyles.Foldout);
  39. projectFoldout.AcceptsKeyFocus = false;
  40. editorFoldout.AcceptsKeyFocus = false;
  41. defaultHandleSizeField = new GUIFloatField(new LocEdString("Handle size"), 200);
  42. defaultHandleSizeField.OnChanged += (x) => { EditorSettings.DefaultHandleSize = x; };
  43. autoLoadLastProjectField = new GUIToggleField(new LocEdString("Automatically load last project"), 200);
  44. autoLoadLastProjectField.OnChanged += (x) => { EditorSettings.AutoLoadLastProject = x; };
  45. CodeEditorType[] availableEditors = CodeEditor.AvailableEditors;
  46. Array.Resize(ref availableEditors, availableEditors.Length + 1);
  47. availableEditors[availableEditors.Length - 1] = CodeEditorType.None;
  48. string[] availableEditorNames = new string[availableEditors.Length];
  49. for (int i = 0; i < availableEditors.Length; i++)
  50. availableEditorNames[i] = Enum.GetName(typeof (CodeEditorType), availableEditors[i]);
  51. codeEditorField = new GUIListBoxField(availableEditorNames, new LocEdString("Code editor"), 200);
  52. codeEditorField.OnSelectionChanged += x =>
  53. {
  54. EditorSettings.SetInt(ActiveCodeEditorKey, (int)availableEditors[x]);
  55. CodeEditor.ActiveEditor = availableEditors[x];
  56. };
  57. fpsLimitField = new GUIIntField(new LocEdString("FPS limit"), 200);
  58. fpsLimitField.OnConfirmed += () => EditorSettings.FPSLimit = fpsLimitField.Value;
  59. fpsLimitField.OnFocusLost += () => EditorSettings.FPSLimit = fpsLimitField.Value;
  60. mouseSensitivityField = new GUISliderField(0.2f, 2.0f, new LocEdString("Mouse sensitivity"));
  61. mouseSensitivityField.OnChanged += (x) => EditorSettings.MouseSensitivity = x;
  62. GUILayout mainLayout = GUI.AddLayoutY();
  63. mainLayout.AddElement(projectFoldout);
  64. GUILayout projectLayoutOuterY = mainLayout.AddLayoutY();
  65. projectLayoutOuterY.AddSpace(5);
  66. GUILayout projectLayoutOuterX = projectLayoutOuterY.AddLayoutX();
  67. projectLayoutOuterX.AddSpace(5);
  68. GUILayout projectLayout = projectLayoutOuterX.AddLayoutY();
  69. projectLayoutOuterX.AddSpace(5);
  70. projectLayoutOuterY.AddSpace(5);
  71. mainLayout.AddElement(editorFoldout);
  72. GUILayout editorLayoutOuterY = mainLayout.AddLayoutY();
  73. editorLayoutOuterY.AddSpace(5);
  74. GUILayout editorLayoutOuterX = editorLayoutOuterY.AddLayoutX();
  75. editorLayoutOuterX.AddSpace(5);
  76. GUILayout editorLayout = editorLayoutOuterX.AddLayoutY();
  77. editorLayoutOuterX.AddSpace(5);
  78. editorLayoutOuterY.AddSpace(5);
  79. mainLayout.AddFlexibleSpace();
  80. editorLayout.AddElement(defaultHandleSizeField);
  81. editorLayout.AddElement(autoLoadLastProjectField);
  82. editorLayout.AddElement(codeEditorField);
  83. editorLayout.AddElement(fpsLimitField);
  84. editorLayout.AddElement(mouseSensitivityField);
  85. projectFoldout.Value = true;
  86. editorFoldout.Value = true;
  87. projectFoldout.OnToggled += (x) => projectLayout.Active = x;
  88. editorFoldout.OnToggled += (x) => editorLayout.Active = x;
  89. }
  90. private void OnEditorUpdate()
  91. {
  92. defaultHandleSizeField.Value = EditorSettings.DefaultHandleSize;
  93. autoLoadLastProjectField.Value = EditorSettings.AutoLoadLastProject;
  94. fpsLimitField.Value = EditorSettings.FPSLimit;
  95. mouseSensitivityField.Value = EditorSettings.MouseSensitivity;
  96. CodeEditorType[] availableEditors = CodeEditor.AvailableEditors;
  97. int idx = Array.IndexOf(availableEditors, CodeEditor.ActiveEditor);
  98. if (idx != -1)
  99. codeEditorField.Index = idx;
  100. }
  101. }
  102. /** @} */
  103. }