BetterLayoutElementEditor.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using UnityEditor;
  6. using UnityEngine;
  7. using UnityEngine.UI;
  8. namespace TheraBytes.BetterUi.Editor
  9. {
  10. [CustomEditor(typeof(BetterLayoutElement)), CanEditMultipleObjects]
  11. public class BetterLayoutElementEditor : UnityEditor.Editor
  12. {
  13. InjectedSettingsInspector helper;
  14. SerializedProperty layoutPriority;
  15. void OnEnable()
  16. {
  17. helper = new InjectedSettingsInspector("Settings", serializedObject, "customSettings", "settingsFallback");
  18. helper.RegisterSkipRest("Ignore Layout", "IgnoreLayout", true);
  19. helper.Register("Min Width", "MinWidthEnabled",
  20. "customMinWidthSizers", "minWidthSizerFallback");
  21. helper.Register("Min Height", "MinHeightEnabled",
  22. "customMinHeightSizers", "minHeightSizerFallback");
  23. helper.Register("Preferred Width", "PreferredWidthEnabled",
  24. "customPreferredWidthSizers", "preferredWidthSizerFallback");
  25. helper.Register("Preferred Height", "PreferredHeightEnabled",
  26. "customPreferredHeightSizers", "preferredHeightSizerFallback");
  27. helper.Register("Flexible Width", "FlexibleWidthEnabled", "FlexibleWidth");
  28. helper.Register("Flexible Height", "FlexibleHeightEnabled", "FlexibleHeight");
  29. layoutPriority = serializedObject.FindProperty("m_LayoutPriority");
  30. }
  31. public override void OnInspectorGUI()
  32. {
  33. helper.Draw();
  34. if(layoutPriority != null) // Unity 2017+
  35. {
  36. EditorGUILayout.PropertyField(layoutPriority);
  37. }
  38. }
  39. [MenuItem("CONTEXT/LayoutElement/♠ Make Better")]
  40. public static void MakeBetter(MenuCommand command)
  41. {
  42. LayoutElement layout = command.context as LayoutElement;
  43. var ignore = layout.ignoreLayout;
  44. var minWidth = layout.minWidth;
  45. var minHeight = layout.minHeight;
  46. var prefWidth = layout.preferredWidth;
  47. var prefHeight = layout.preferredHeight;
  48. var flexWidth = layout.flexibleWidth;
  49. var flexHeight = layout.flexibleHeight;
  50. var newLayout = Betterizer.MakeBetter<LayoutElement, BetterLayoutElement>(layout) as BetterLayoutElement;
  51. if(newLayout != null)
  52. {
  53. newLayout.CurrentSettings.IgnoreLayout = ignore;
  54. newLayout.CurrentSettings.MinWidthEnabled = (minWidth >= 0);
  55. newLayout.CurrentSettings.MinHeightEnabled = (minHeight >= 0);
  56. newLayout.CurrentSettings.PreferredWidthEnabled = (prefWidth >= 0);
  57. newLayout.CurrentSettings.PreferredHeightEnabled = (prefHeight >= 0);
  58. newLayout.CurrentSettings.FlexibleWidthEnabled = (flexWidth >= 0);
  59. newLayout.CurrentSettings.FlexibleHeightEnabled = (flexHeight >= 0);
  60. newLayout.MinHeightSizer.SetSize(newLayout, minHeight);
  61. newLayout.MinWidthSizer.SetSize(newLayout, minWidth);
  62. newLayout.PreferredWidthSizer.SetSize(newLayout, prefWidth);
  63. newLayout.PreferredHeightSizer.SetSize(newLayout, prefHeight);
  64. newLayout.CurrentSettings.FlexibleWidth = flexWidth;
  65. newLayout.CurrentSettings.FlexibleHeight = flexHeight;
  66. }
  67. }
  68. }
  69. }