SettingsWindow.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. /// <summary>
  19. /// Opens the settings window if its not open already.
  20. /// </summary>
  21. [MenuItem("Tools/Settings", 9250, true)]
  22. private static void OpenSettingsWindow()
  23. {
  24. OpenWindow<SettingsWindow>();
  25. }
  26. /// <inheritdoc/>
  27. protected override LocString GetDisplayName()
  28. {
  29. return new LocEdString("Settings");
  30. }
  31. private void OnInitialize()
  32. {
  33. GUIToggle projectFoldout = new GUIToggle(new LocEdString("Project"), EditorStyles.Foldout);
  34. GUIToggle editorFoldout = new GUIToggle(new LocEdString("Editor"), EditorStyles.Foldout);
  35. defaultHandleSizeField = new GUIFloatField(new LocEdString("Handle size"), 200);
  36. defaultHandleSizeField.OnChanged += (x) => { EditorSettings.DefaultHandleSize = x; };
  37. autoLoadLastProjectField = new GUIToggleField(new LocEdString("Automatically load last project"), 200);
  38. autoLoadLastProjectField.OnChanged += (x) => { EditorSettings.AutoLoadLastProject = x; };
  39. CodeEditorType[] availableEditors = CodeEditor.AvailableEditors;
  40. Array.Resize(ref availableEditors, availableEditors.Length + 1);
  41. availableEditors[availableEditors.Length - 1] = CodeEditorType.None;
  42. string[] availableEditorNames = new string[availableEditors.Length];
  43. for (int i = 0; i < availableEditors.Length; i++)
  44. availableEditorNames[i] = Enum.GetName(typeof (CodeEditorType), availableEditors[i]);
  45. codeEditorField = new GUIListBoxField(availableEditorNames, new LocEdString("Code editor"), 200);
  46. codeEditorField.OnSelectionChanged += x =>
  47. {
  48. EditorSettings.SetInt(ActiveCodeEditorKey, (int)availableEditors[x]);
  49. CodeEditor.ActiveEditor = availableEditors[x];
  50. };
  51. fpsLimitField = new GUIIntField(new LocEdString("FPS limit"), 200);
  52. fpsLimitField.OnConfirmed += () => EditorSettings.FPSLimit = fpsLimitField.Value;
  53. fpsLimitField.OnFocusLost += () => EditorSettings.FPSLimit = fpsLimitField.Value;
  54. GUILayout mainLayout = GUI.AddLayoutY();
  55. mainLayout.AddElement(projectFoldout);
  56. GUILayout projectLayoutOuterY = mainLayout.AddLayoutY();
  57. projectLayoutOuterY.AddSpace(5);
  58. GUILayout projectLayoutOuterX = projectLayoutOuterY.AddLayoutX();
  59. projectLayoutOuterX.AddSpace(5);
  60. GUILayout projectLayout = projectLayoutOuterX.AddLayoutY();
  61. projectLayoutOuterX.AddSpace(5);
  62. projectLayoutOuterY.AddSpace(5);
  63. mainLayout.AddElement(editorFoldout);
  64. GUILayout editorLayoutOuterY = mainLayout.AddLayoutY();
  65. editorLayoutOuterY.AddSpace(5);
  66. GUILayout editorLayoutOuterX = editorLayoutOuterY.AddLayoutX();
  67. editorLayoutOuterX.AddSpace(5);
  68. GUILayout editorLayout = editorLayoutOuterX.AddLayoutY();
  69. editorLayoutOuterX.AddSpace(5);
  70. editorLayoutOuterY.AddSpace(5);
  71. mainLayout.AddFlexibleSpace();
  72. editorLayout.AddElement(defaultHandleSizeField);
  73. editorLayout.AddElement(autoLoadLastProjectField);
  74. editorLayout.AddElement(codeEditorField);
  75. editorLayout.AddElement(fpsLimitField);
  76. projectFoldout.Value = true;
  77. editorFoldout.Value = true;
  78. projectFoldout.OnToggled += (x) => projectLayout.Active = x;
  79. editorFoldout.OnToggled += (x) => editorLayout.Active = x;
  80. }
  81. private void OnEditorUpdate()
  82. {
  83. defaultHandleSizeField.Value = EditorSettings.DefaultHandleSize;
  84. autoLoadLastProjectField.Value = EditorSettings.AutoLoadLastProject;
  85. fpsLimitField.Value = EditorSettings.FPSLimit;
  86. CodeEditorType[] availableEditors = CodeEditor.AvailableEditors;
  87. int idx = Array.IndexOf(availableEditors, CodeEditor.ActiveEditor);
  88. if (idx != -1)
  89. codeEditorField.Index = idx;
  90. }
  91. }
  92. }