SettingsWindow.cs 5.3 KB

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