From 8ed4bf9f097c2e8a919b1777041211c2e5c3912d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 3 Jul 2021 15:19:04 +0200 Subject: [PATCH 1/7] Dedicated GUI method to draw only children one level deep --- .../IgnoreParentAttributeDrawer.cs | 18 ++----- .../Editor Toolbox/Editor/ToolboxEditorGui.cs | 47 +++++++++++++------ 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertySelfDrawers/IgnoreParentAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertySelfDrawers/IgnoreParentAttributeDrawer.cs index d718165a..e89a3cec 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertySelfDrawers/IgnoreParentAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertySelfDrawers/IgnoreParentAttributeDrawer.cs @@ -7,21 +7,13 @@ public class IgnoreParentAttributeDrawer : ToolboxSelfPropertyDrawer targetDepth) - { - break; - } - - //draw all children in order but only one level depth - ToolboxEditorGui.DrawToolboxProperty(targetProperty.Copy()); + ToolboxEditorGui.DrawNativeProperty(property, label); + return; } + + ToolboxEditorGui.DrawPropertyChildren(property); } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs b/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs index dc0ba312..00a0869e 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs @@ -433,26 +433,43 @@ public static void DrawDefaultProperty(SerializedProperty property, GUIContent l return; } - var enterChildren = true; - //cache all needed property references - var targetProperty = property.Copy(); - var endingProperty = property.GetEndProperty(); EditorGUI.indentLevel++; - //iterate over all children (but only 1 level depth) - while (targetProperty.NextVisible(enterChildren)) - { - if (SerializedProperty.EqualContents(targetProperty, endingProperty)) - { - break; - } + DrawPropertyChildren(property, drawElementAction); + EditorGUI.indentLevel--; + } + } + + /// + /// Draws property's children but only one level deep. + /// + public static void DrawPropertyChildren(SerializedProperty property) + { + DrawPropertyChildren(property, DrawToolboxProperty); + } - enterChildren = false; - //handle current property using Toolbox features - drawElementAction(targetProperty.Copy()); + /// + /// Draws property's children but only one level deep. + /// + public static void DrawPropertyChildren(SerializedProperty property, Action drawElementAction) + { + var enterChildren = true; + //cache all needed property references + var targetProperty = property.Copy(); + var endingProperty = property.GetEndProperty(); + + //iterate over all children (but only 1 level depth) + while (targetProperty.NextVisible(enterChildren)) + { + if (SerializedProperty.EqualContents(targetProperty, endingProperty)) + { + break; } - EditorGUI.indentLevel--; + enterChildren = false; + var childProperty = targetProperty.Copy(); + //handle current property using Toolbox features + drawElementAction(childProperty); } } From e4bb1505a7cf05a25370a0c6dc17a9a3d70498d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 3 Jul 2021 17:12:41 +0200 Subject: [PATCH 2/7] Fix property drawing within horizontal groups --- Assets/Editor Toolbox/Editor/ToolboxEditor.cs | 2 +- .../Editor/ToolboxPropertyHandler.cs | 21 +++++++++++++----- Assets/Editor Toolbox/Editor/ToolboxStyles.cs | 22 +++++++++++++++++++ .../Editor/ToolboxStyles.cs.meta | 11 ++++++++++ 4 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 Assets/Editor Toolbox/Editor/ToolboxStyles.cs create mode 100644 Assets/Editor Toolbox/Editor/ToolboxStyles.cs.meta diff --git a/Assets/Editor Toolbox/Editor/ToolboxEditor.cs b/Assets/Editor Toolbox/Editor/ToolboxEditor.cs index 6da80084..0e38b6ec 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxEditor.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxEditor.cs @@ -88,7 +88,7 @@ public virtual void DrawCustomInspector() public static event Action OnBeginToolboxEditor; - public static event Action OnBreakToolboxEditor; + public static event Action OnBreakToolboxEditor; public static event Action OnCloseToolboxEditor; } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs index b4ad536d..93f53beb 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs @@ -268,12 +268,6 @@ private void DrawProperty(GUIContent label) } else { - if (hasToolboxPropertyDrawer) - { - //TODO: warning - //NOTE: since property has a custom drawer it will override any Toolbox-related one - } - OnGuiDefault(label); } } @@ -314,6 +308,19 @@ private PropertyCondition Validate() return ToolboxDrawerModule.GetConditionDrawer(conditionAttribute)?.OnGuiValidate(property, conditionAttribute) ?? PropertyCondition.Valid; } + /// + /// Begins vertical group to "pack" all property-related controls into one body. + /// + private void BeginVerticalLayoutBody() + { + EditorGUILayout.BeginVertical(ToolboxStyles.ZeroMargins); + } + + private void CloseVerticalLayoutBody() + { + EditorGUILayout.EndVertical(); + } + /// /// Draw property using built-in layout system and cached s. @@ -343,7 +350,9 @@ public void OnGuiLayout(GUIContent label) { using (new EditorGUI.DisabledScope(disable)) { + BeginVerticalLayoutBody(); DrawProperty(label); + CloseVerticalLayoutBody(); } } diff --git a/Assets/Editor Toolbox/Editor/ToolboxStyles.cs b/Assets/Editor Toolbox/Editor/ToolboxStyles.cs new file mode 100644 index 00000000..ace8ebcf --- /dev/null +++ b/Assets/Editor Toolbox/Editor/ToolboxStyles.cs @@ -0,0 +1,22 @@ +using UnityEditor; +using UnityEngine; + +namespace Toolbox.Editor +{ + /// + /// Utility class responsible for creation and sharing custom s. + /// + public static class ToolboxStyles + { + static ToolboxStyles() + { + ZeroMargins = new GUIStyle(EditorStyles.inspectorFullWidthMargins) + { + padding = new RectOffset() + }; + } + + + public static GUIStyle ZeroMargins { get; private set; } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/ToolboxStyles.cs.meta b/Assets/Editor Toolbox/Editor/ToolboxStyles.cs.meta new file mode 100644 index 00000000..dae9cd42 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/ToolboxStyles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20aca2728ee044d4396372bd07d1cdeb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 6e9a47fd19bc099adab94878ad15ed69b4efe9e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 4 Jul 2021 00:42:22 +0200 Subject: [PATCH 3/7] Fix general layouting issues --- .../Editor/Internal/PropertyScope.cs | 21 +++++------------- .../Editor Toolbox/Editor/ToolboxEditorGui.cs | 2 -- .../Editor/ToolboxLayoutHelper.cs | 4 ++-- .../Editor/ToolboxPropertyHandler.cs | 2 +- Assets/Editor Toolbox/Editor/ToolboxStyles.cs | 22 ------------------- .../Editor/ToolboxStyles.cs.meta | 11 ---------- 6 files changed, 9 insertions(+), 53 deletions(-) delete mode 100644 Assets/Editor Toolbox/Editor/ToolboxStyles.cs delete mode 100644 Assets/Editor Toolbox/Editor/ToolboxStyles.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Internal/PropertyScope.cs b/Assets/Editor Toolbox/Editor/Internal/PropertyScope.cs index 5c68b7a8..c359e68b 100644 --- a/Assets/Editor Toolbox/Editor/Internal/PropertyScope.cs +++ b/Assets/Editor Toolbox/Editor/Internal/PropertyScope.cs @@ -1,7 +1,6 @@ using System; - -using UnityEngine; using UnityEditor; +using UnityEngine; namespace Toolbox.Editor.Internal { @@ -13,21 +12,13 @@ internal class PropertyScope : IDisposable { private readonly SerializedProperty property; - public PropertyScope(SerializedProperty property, GUIContent label, Action drawLabelAction = null) + public PropertyScope(SerializedProperty property, GUIContent label) { this.property = property; - using (var labelScope = new EditorGUILayout.VerticalScope()) - { - label = EditorGUI.BeginProperty(labelScope.rect, label, property); - if (drawLabelAction != null) - { - drawLabelAction(label); - } - else - { - property.isExpanded = EditorGUILayout.Foldout(property.isExpanded, label, true); - } - } + var rowHeight = EditorGUIUtility.singleLineHeight; + var rect = EditorGUILayout.GetControlRect(true, rowHeight); + label = EditorGUI.BeginProperty(rect, label, property); + property.isExpanded = EditorGUI.Foldout(rect, property.isExpanded, label, true); } public void Dispose() diff --git a/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs b/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs index 00a0869e..9042da1c 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs @@ -433,7 +433,6 @@ public static void DrawDefaultProperty(SerializedProperty property, GUIContent l return; } - EditorGUI.indentLevel++; DrawPropertyChildren(property, drawElementAction); EditorGUI.indentLevel--; @@ -457,7 +456,6 @@ public static void DrawPropertyChildren(SerializedProperty property, Action private void BeginVerticalLayoutBody() { - EditorGUILayout.BeginVertical(ToolboxStyles.ZeroMargins); + EditorGUILayout.BeginVertical(); } private void CloseVerticalLayoutBody() diff --git a/Assets/Editor Toolbox/Editor/ToolboxStyles.cs b/Assets/Editor Toolbox/Editor/ToolboxStyles.cs deleted file mode 100644 index ace8ebcf..00000000 --- a/Assets/Editor Toolbox/Editor/ToolboxStyles.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace Toolbox.Editor -{ - /// - /// Utility class responsible for creation and sharing custom s. - /// - public static class ToolboxStyles - { - static ToolboxStyles() - { - ZeroMargins = new GUIStyle(EditorStyles.inspectorFullWidthMargins) - { - padding = new RectOffset() - }; - } - - - public static GUIStyle ZeroMargins { get; private set; } - } -} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/ToolboxStyles.cs.meta b/Assets/Editor Toolbox/Editor/ToolboxStyles.cs.meta deleted file mode 100644 index dae9cd42..00000000 --- a/Assets/Editor Toolbox/Editor/ToolboxStyles.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 20aca2728ee044d4396372bd07d1cdeb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From 73b6862d2fc1080e879744bd6bf01b192f136d36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 4 Jul 2021 16:06:52 +0200 Subject: [PATCH 4/7] Refactor DrawerDataStorage and related classes. Add Begin/EndHorizontalGroupAttribute&Drawer --- .../ToolboxNativePropertyDrawer.cs | 0 .../ToolboxNativePropertyDrawer.cs.meta | 0 .../Editor/Drawers/Storages.meta | 8 ++ .../Drawers/Storages/ControlDataStorage.cs | 24 ++++ .../Storages/ControlDataStorage.cs.meta | 11 ++ .../Drawers/Storages/DrawerDataStorage.cs | 102 +++++++++++++ .../Storages}/DrawerDataStorage.cs.meta | 2 +- .../Drawers/Storages/DrawerDataStorageBase.cs | 38 +++++ .../Storages/DrawerDataStorageBase.cs.meta | 11 ++ .../Drawers/Storages/PropertyDataStorage.cs | 49 +++++++ .../Storages/PropertyDataStorage.cs.meta | 11 ++ .../BeginHorizontalAttributeDrawer.cs | 2 +- .../BeginHorizontalGroupAttributeDrawer.cs | 73 ++++++++++ ...eginHorizontalGroupAttributeDrawer.cs.meta | 11 ++ .../EndHorizontalGroupAttributeDrawer.cs | 18 +++ .../EndHorizontalGroupAttributeDrawer.cs.meta | 11 ++ .../ReorderableListAttributeDrawer.cs | 4 +- .../ReorderableListExposedAttributeDrawer.cs | 5 +- .../ScrollableItemsAttributeDrawer.cs | 6 +- .../InLineEditorAttributeDrawer.cs | 10 +- .../SerializedDictionaryDrawer.cs | 6 +- .../Editor/Internal/DrawerDataStorage.cs | 136 ------------------ .../Editor/Internal/PropertyScope.cs | 6 +- .../Editor/ToolboxLayoutHelper.cs | 22 +-- Assets/Editor Toolbox/EditorSettings.asset | 2 + .../BeginHorizontalAttribute.cs | 2 +- .../BeginHorizontalGroupAttribute.cs | 22 +++ .../BeginHorizontalGroupAttribute.cs.meta | 11 ++ .../EndHorizontalGroupAttribute.cs | 8 ++ .../EndHorizontalGroupAttribute.cs.meta | 11 ++ Assets/Examples/Scripts/SampleBehaviour2.cs | 7 +- 31 files changed, 460 insertions(+), 169 deletions(-) rename Assets/Editor Toolbox/Editor/Drawers/{ => RegularDrawers}/ToolboxNativePropertyDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/{ => RegularDrawers}/ToolboxNativePropertyDrawer.cs.meta (100%) create mode 100644 Assets/Editor Toolbox/Editor/Drawers/Storages.meta create mode 100644 Assets/Editor Toolbox/Editor/Drawers/Storages/ControlDataStorage.cs create mode 100644 Assets/Editor Toolbox/Editor/Drawers/Storages/ControlDataStorage.cs.meta create mode 100644 Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorage.cs rename Assets/Editor Toolbox/Editor/{Internal => Drawers/Storages}/DrawerDataStorage.cs.meta (83%) create mode 100644 Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorageBase.cs create mode 100644 Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorageBase.cs.meta create mode 100644 Assets/Editor Toolbox/Editor/Drawers/Storages/PropertyDataStorage.cs create mode 100644 Assets/Editor Toolbox/Editor/Drawers/Storages/PropertyDataStorage.cs.meta create mode 100644 Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs create mode 100644 Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs.meta create mode 100644 Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs create mode 100644 Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs.meta delete mode 100644 Assets/Editor Toolbox/Editor/Internal/DrawerDataStorage.cs create mode 100644 Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs create mode 100644 Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta create mode 100644 Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs create mode 100644 Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxNativePropertyDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/RegularDrawers/ToolboxNativePropertyDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/ToolboxNativePropertyDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/RegularDrawers/ToolboxNativePropertyDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxNativePropertyDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/RegularDrawers/ToolboxNativePropertyDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/ToolboxNativePropertyDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/RegularDrawers/ToolboxNativePropertyDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Storages.meta b/Assets/Editor Toolbox/Editor/Drawers/Storages.meta new file mode 100644 index 00000000..065cb78f --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/Storages.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 585b8e2c7a46a524aba7e6e4a0683b36 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Drawers/Storages/ControlDataStorage.cs b/Assets/Editor Toolbox/Editor/Drawers/Storages/ControlDataStorage.cs new file mode 100644 index 00000000..95a24f22 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/Storages/ControlDataStorage.cs @@ -0,0 +1,24 @@ +using System; + +using UnityEngine; + +namespace Toolbox.Editor.Drawers +{ + public class ControlDataStorage : DrawerDataStorage + { + public ControlDataStorage(Func createMethod) : base(createMethod) + { } + + + protected override string GetKey(int context) + { + return context.ToString(); + } + + + public int GetControlId() + { + return GUIUtility.GetControlID(FocusType.Passive); + } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Drawers/Storages/ControlDataStorage.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Storages/ControlDataStorage.cs.meta new file mode 100644 index 00000000..7d868b51 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/Storages/ControlDataStorage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b017609e4fff016488a238d7eb2e1ec6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorage.cs b/Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorage.cs new file mode 100644 index 00000000..b038df5e --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorage.cs @@ -0,0 +1,102 @@ +using System.Collections.Generic; +using System; + +namespace Toolbox.Editor.Drawers +{ + /// + /// Internal system responsible for keeping and clearing data between s. + /// This small system works only for attribute-based drawers and should be defined as a static field. + /// + /// Key-related object. + /// Data to store. + /// Any type needed for storage item creation. Pass if no additional data is needed. + public abstract class DrawerDataStorage : DrawerDataStorageBase + { + protected readonly Dictionary items = new Dictionary(); + + protected readonly Func createMethod; + protected readonly Action removeMethod; + + + public DrawerDataStorage(Func createMethod) : this(createMethod, null) + { } + + public DrawerDataStorage(Func createMethod, Action removeMethod) + { + this.createMethod = createMethod; + this.removeMethod = removeMethod; + } + + + protected abstract string GetKey(T context); + + + /// + /// Returns and if needed creates new item. + /// + public virtual T1 ReturnItem(T context, T2 args) + { + var key = GetKey(context); + if (items.TryGetValue(key, out var item)) + { + return item; + } + else + { + return items[key] = CreateItem(context, args); + } + } + + public virtual T1 CreateItem(T context, T2 args) + { + return CreateItem(context, args, true); + } + + public virtual T1 CreateItem(T context, T2 args, bool append) + { + var item = createMethod(context, args); + if (append) + { + AppendItem(context, item); + } + + return item; + } + + public virtual T1 AppendItem(T context, T1 item) + { + var key = GetKey(context); + return items[key] = item; + } + + public virtual void ClearItem(T context) + { + var key = GetKey(context); + if (removeMethod != null) + { + if (items.TryGetValue(key, out var value)) + { + removeMethod(value); + items.Remove(key); + } + } + else + { + items.Remove(key); + } + } + + public override void ClearItems() + { + if (removeMethod != null) + { + foreach (var item in items.Values) + { + removeMethod(item); + } + } + + items.Clear(); + } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/DrawerDataStorage.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorage.cs.meta similarity index 83% rename from Assets/Editor Toolbox/Editor/Internal/DrawerDataStorage.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorage.cs.meta index 97d76664..3e3376c4 100644 --- a/Assets/Editor Toolbox/Editor/Internal/DrawerDataStorage.cs.meta +++ b/Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorage.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d44d84f2e729b05449db8c912fe8dffe +guid: f8ae6cb9b3ffe1349bc87f909df163ee MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorageBase.cs b/Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorageBase.cs new file mode 100644 index 00000000..56c7d928 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorageBase.cs @@ -0,0 +1,38 @@ +using System.Collections.Generic; + +namespace Toolbox.Editor.Drawers +{ + public abstract class DrawerDataStorageBase + { + static DrawerDataStorageBase() + { + InspectorUtility.OnEditorReload += () => + { + for (var i = 0; i < storages.Count; i++) + { + storages[i].ClearItems(); + } + }; + } + + + protected DrawerDataStorageBase() + { + storages.Add(this); + } + + ~DrawerDataStorageBase() + { + storages.Remove(this); + } + + + private static readonly List storages = new List(); + + + /// + /// Called each time Editor is completely destroyed. + /// + public abstract void ClearItems(); + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorageBase.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorageBase.cs.meta new file mode 100644 index 00000000..37f13fc2 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/Storages/DrawerDataStorageBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c13a6da2d6177824ea454ff1d7b723da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Drawers/Storages/PropertyDataStorage.cs b/Assets/Editor Toolbox/Editor/Drawers/Storages/PropertyDataStorage.cs new file mode 100644 index 00000000..c22c1437 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/Storages/PropertyDataStorage.cs @@ -0,0 +1,49 @@ +using System; + +using UnityEditor; + +namespace Toolbox.Editor.Drawers +{ + public class PropertyDataStorage : DrawerDataStorage + { + private readonly bool isPersistant; + + + public PropertyDataStorage(bool isPersistant, Func createMethod) : this(isPersistant, createMethod, null) + { } + + public PropertyDataStorage(bool isPersistant, Func createMethod, Action removeMethod) : base (createMethod, removeMethod) + { + this.isPersistant = isPersistant; + } + + + protected override string GetKey(SerializedProperty property) + { + return isPersistant + ? property.GetPropertyTypeKey() + : property.GetPropertyHashKey(); + } + + + public override void ClearItems() + { + if (isPersistant) + { + return; + } + else + { + if (removeMethod != null) + { + foreach (var item in items.Values) + { + removeMethod(item); + } + } + + items.Clear(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Drawers/Storages/PropertyDataStorage.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Storages/PropertyDataStorage.cs.meta new file mode 100644 index 00000000..62c08885 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/Storages/PropertyDataStorage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdb7229c9f954bc41a43b198a6c708f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalAttributeDrawer.cs index 6fe6d024..ae039601 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalAttributeDrawer.cs @@ -8,7 +8,7 @@ public class BeginHorizontalAttributeDrawer : ToolboxDecoratorDrawer + { + static BeginHorizontalGroupAttributeDrawer() + { + storage = new ControlDataStorage((i, defaultValue) => defaultValue); + } + + /// + /// Storage used to cache scroll values depending on the given control ID. + /// + private static readonly ControlDataStorage storage; + + + private void HandleScrollView() + { + var controlId = storage.GetControlId(); + var oldScroll = storage.ReturnItem(controlId, Vector2.zero); + var newScroll = EditorGUILayout.BeginScrollView(oldScroll); + storage.AppendItem(controlId, newScroll); + } + + private void AdjustLeftMargin() + { + EditorGUILayout.Space(Style.extraLeftPadding); + } + + + protected override void OnGuiBeginSafe(BeginHorizontalGroupAttribute attribute) + { + var width = EditorGUIUtility.currentViewWidth; + EditorGUIUtility.labelWidth = width * attribute.LabelToWidthRatio; + EditorGUIUtility.fieldWidth = width * attribute.FieldToWidthRatio; + + ToolboxLayoutHelper.BeginVertical(Style.groupBackgroundStyle); + if (attribute.HasLabel) + { + GUILayout.Label(attribute.Label, EditorStyles.boldLabel); + } + + HandleScrollView(); + ToolboxLayoutHelper.BeginHorizontal(); + AdjustLeftMargin(); + } + + + private static class Style + { + /// + /// Additional padding applied to keep foldout-based labels within the group. + /// + internal static readonly float extraLeftPadding = 8.0f; + + internal static readonly GUIStyle groupBackgroundStyle; + + static Style() + { +#if UNITY_2019_3_OR_NEWER + groupBackgroundStyle = new GUIStyle("helpBox") +#else + groupBackgroundStyle = new GUIStyle("box") +#endif + { + padding = new RectOffset(13, 12, 5, 5) + }; + } + } + } +} diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs.meta new file mode 100644 index 00000000..71d7b539 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 916b488f13debc149a401b405cd684ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs new file mode 100644 index 00000000..addc06af --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs @@ -0,0 +1,18 @@ +using UnityEditor; +using UnityEngine; + +namespace Toolbox.Editor.Drawers +{ + public class EndHorizontalGroupAttributeDrawer : ToolboxDecoratorDrawer + { + protected override void OnGuiCloseSafe(EndHorizontalGroupAttribute attribute) + { + ToolboxLayoutHelper.CloseHorizontal(); + EditorGUILayout.EndScrollView(); + ToolboxLayoutHelper.CloseVertical(); + + EditorGUIUtility.labelWidth = 0.0f; + EditorGUIUtility.fieldWidth = 0.0f; + } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs.meta new file mode 100644 index 00000000..d3ffa5bb --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 736c8d5185d16a2459f4b1fdd6e0c4b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ReorderableListAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ReorderableListAttributeDrawer.cs index 7e2ef955..40be98ea 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ReorderableListAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ReorderableListAttributeDrawer.cs @@ -9,7 +9,7 @@ public class ReorderableListAttributeDrawer : ToolboxListPropertyDrawer(false, (p, a) => + storage = new PropertyDataStorage(false, (p, a) => { return ToolboxEditorGui.CreateList(p, a.ListStyle, @@ -21,7 +21,7 @@ static ReorderableListAttributeDrawer() }); } - private static readonly DrawerDataStorage storage; + private static readonly PropertyDataStorage storage; /// diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs index 56c2b530..93834b2a 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs @@ -12,7 +12,7 @@ public class ReorderableListExposedAttributeDrawer : ToolboxListPropertyDrawer(false, (p, a) => + storage = new PropertyDataStorage(false, (p, a) => { //create list in the standard way var list = ToolboxEditorGui.CreateList(p, @@ -28,7 +28,7 @@ static ReorderableListExposedAttributeDrawer() }); } - private static readonly DrawerDataStorage storage; + private static readonly PropertyDataStorage storage; private static void ConnectCallbacks(ReorderableListBase list, ReorderableListExposedAttribute attribute) @@ -47,7 +47,6 @@ private static void ConnectCallbacks(ReorderableListBase list, ReorderableListEx { return methodInfo.Invoke(listTarget.targetObject, null); }; - //TODO: add more useful callbacks to expose } private static MethodInfo FindMethod(SerializedObject target, string methodName, Type expectedReturnType = null) diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ScrollableItemsAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ScrollableItemsAttributeDrawer.cs index 98b3bafc..bfc01460 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ScrollableItemsAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertyListDrawers/ScrollableItemsAttributeDrawer.cs @@ -9,13 +9,13 @@ public class ScrollableItemsAttributeDrawer : ToolboxListPropertyDrawer(true, (p, a) => + storage = new PropertyDataStorage(true, (p, a) => { return new Vector2(a.DefaultMinIndex, a.DefaultMaxIndex); }); } - private static readonly DrawerDataStorage storage; + private static readonly PropertyDataStorage storage; private void DrawSettingsBody(SerializedProperty property, ScrollableItemsAttribute attribute, out int size, out Vector2 indexRange) @@ -34,7 +34,7 @@ private void DrawSettingsBody(SerializedProperty property, ScrollableItemsAttrib //fix values to the integral part indexRange.x = Mathf.Max(Mathf.RoundToInt(indexRange.x), 0); indexRange.y = Mathf.Min(Mathf.RoundToInt(indexRange.y), size); - storage.ApplyItem(property, indexRange); + storage.AppendItem(property, indexRange); } private void DrawElementsBody(SerializedProperty property, ScrollableItemsAttribute attribute, int size, Vector2 indexRange) diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertySelfDrawers/InLineEditorAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertySelfDrawers/InLineEditorAttributeDrawer.cs index 00e7e549..7c87c101 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertySelfDrawers/InLineEditorAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/PropertySelfDrawers/InLineEditorAttributeDrawer.cs @@ -11,7 +11,7 @@ public class InLineEditorAttributeDrawer : ToolboxSelfPropertyDrawer(false, + storage = new PropertyDataStorage(false, (p, a) => { var value = p.objectReferenceValue; @@ -36,7 +36,7 @@ static InLineEditorAttributeDrawer() }); } - private static readonly DrawerDataStorage storage; + private static readonly PropertyDataStorage storage; private void DrawEditor(Editor editor, InLineEditorAttribute attribute) @@ -110,7 +110,9 @@ protected override void OnGuiSafe(SerializedProperty property, GUIContent label, } property.isExpanded = GUILayout.Toggle(property.isExpanded, - Style.foldoutContent, Style.foldoutStyle, Style.foldoutOptions); + Style.foldoutContent, + Style.foldoutStyle, + Style.foldoutOptions); } //create additional Editor for the associated reference @@ -120,7 +122,7 @@ protected override void OnGuiSafe(SerializedProperty property, GUIContent label, if (editor.target != property.objectReferenceValue) { //validate target value change (e.g. list reorder) - editor = storage.ApplyItem(property, attribute); + editor = storage.CreateItem(property, attribute); } InspectorUtility.SetIsEditorExpanded(editor, true); diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/TargetTypeDrawers/SerializedDictionaryDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/TargetTypeDrawers/SerializedDictionaryDrawer.cs index 1906608a..eb702155 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/TargetTypeDrawers/SerializedDictionaryDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/TargetTypeDrawers/SerializedDictionaryDrawer.cs @@ -12,7 +12,7 @@ public class SerializedDictionaryDrawer : ToolboxTargetTypeDrawer { static SerializedDictionaryDrawer() { - storage = new DrawerDataStorage(false, (p, a) => + storage = new PropertyDataStorage(false, (p, a) => { var pairsProperty = a.pairsProperty; var errorProperty = a.errorProperty; @@ -22,7 +22,7 @@ static SerializedDictionaryDrawer() { //cache preprocessed label to get prefab related functions var label = EditorGUI.BeginProperty(rect, null, p); - //create additional warning message if there is key collision + //create additional warning message if there is a collision if (errorProperty.boolValue) { label.image = EditorGuiUtility.GetHelpIcon(MessageType.Warning); @@ -58,7 +58,7 @@ static SerializedDictionaryDrawer() }); } - private static readonly DrawerDataStorage storage; + private static readonly PropertyDataStorage storage; public override void OnGui(SerializedProperty property, GUIContent label) diff --git a/Assets/Editor Toolbox/Editor/Internal/DrawerDataStorage.cs b/Assets/Editor Toolbox/Editor/Internal/DrawerDataStorage.cs deleted file mode 100644 index 2b461243..00000000 --- a/Assets/Editor Toolbox/Editor/Internal/DrawerDataStorage.cs +++ /dev/null @@ -1,136 +0,0 @@ -using System; -using System.Collections.Generic; - -using UnityEditor; - -namespace Toolbox.Editor.Internal -{ - abstract class DrawerDataStorage - { - static DrawerDataStorage() - { - InspectorUtility.OnEditorReload += () => - { - for (var i = 0; i < storages.Count; i++) - { - storages[i].ClearItems(); - } - }; - } - - - protected DrawerDataStorage() - { - storages.Add(this); - } - - - //TODO: clean up - private static readonly List storages = new List(); - - - public abstract void ClearItems(); - } - - /// - /// Internal system responsible for keeping and clearing data between s. - /// This small system works only for attribute-based drawers and should be defined as a static field. - /// - /// Data to store. - /// Any type needed for storage item creation. Pass if no additional data is needed. - internal class DrawerDataStorage : DrawerDataStorage - { - internal DrawerDataStorage(bool isPersistant, Func createMethod) : this(isPersistant, createMethod, null) - { } - - internal DrawerDataStorage(bool isPersistant, Func createMethod, Action removeMethod) - { - this.isPersistant = isPersistant; - this.createMethod = createMethod; - this.removeMethod = removeMethod; - } - - - private readonly bool isPersistant; - - private readonly Dictionary items = new Dictionary(); - - private readonly Func createMethod; - private readonly Action removeMethod; - - - private string GetKey(SerializedProperty property) - { - return isPersistant - ? property.GetPropertyTypeKey() - : property.GetPropertyHashKey(); - } - - public T ReturnItem(SerializedProperty property, T1 args) - { - var key = GetKey(property); - if (items.TryGetValue(key, out T item)) - { - return item; - } - else - { - return items[key] = CreateItem(property, args); - } - } - - public T CreateItem(SerializedProperty property, T1 args) - { - return createMethod(property, args); - } - - public T ApplyItem(SerializedProperty property, T1 args) - { - return ApplyItem(property, createMethod(property, args)); - } - - public T ApplyItem(SerializedProperty property, T item) - { - var key = GetKey(property); - return items[key] = item; - } - - public void ClearItem(SerializedProperty property) - { - var key = GetKey(property); - - if (removeMethod != null) - { - if (items.TryGetValue(key, out T value)) - { - removeMethod(value); - items.Remove(key); - } - } - else - { - items.Remove(key); - } - } - - public override void ClearItems() - { - if (isPersistant) - { - return; - } - else - { - if (removeMethod != null) - { - foreach (var item in items.Values) - { - removeMethod(item); - } - } - - items.Clear(); - } - } - } -} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/PropertyScope.cs b/Assets/Editor Toolbox/Editor/Internal/PropertyScope.cs index c359e68b..fd08da9e 100644 --- a/Assets/Editor Toolbox/Editor/Internal/PropertyScope.cs +++ b/Assets/Editor Toolbox/Editor/Internal/PropertyScope.cs @@ -16,9 +16,9 @@ public PropertyScope(SerializedProperty property, GUIContent label) { this.property = property; var rowHeight = EditorGUIUtility.singleLineHeight; - var rect = EditorGUILayout.GetControlRect(true, rowHeight); - label = EditorGUI.BeginProperty(rect, label, property); - property.isExpanded = EditorGUI.Foldout(rect, property.isExpanded, label, true); + var labelRect = EditorGUILayout.GetControlRect(true, rowHeight); + label = EditorGUI.BeginProperty(labelRect, label, property); + property.isExpanded = EditorGUI.Foldout(labelRect, property.isExpanded, label, true); } public void Dispose() diff --git a/Assets/Editor Toolbox/Editor/ToolboxLayoutHelper.cs b/Assets/Editor Toolbox/Editor/ToolboxLayoutHelper.cs index 801541dc..bc6974d1 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxLayoutHelper.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxLayoutHelper.cs @@ -87,21 +87,21 @@ private static bool ValidateScopes() } - internal static void BeginVertical() + internal static Rect BeginVertical() { - BeginVertical(GUIStyle.none); + return BeginVertical(GUIStyle.none); } - internal static void BeginVertical(GUIStyle style, params GUILayoutOption[] options) + internal static Rect BeginVertical(GUIStyle style, params GUILayoutOption[] options) { if (!inEditorLayout) { ToolboxEditorLog.LogWarning("Begin vertical layout group action can be executed only within the Toolbox Editor."); - return; + return Rect.zero; } vLayoutClips++; - EditorGUILayout.BeginVertical(style, options); + return EditorGUILayout.BeginVertical(style, options); } internal static void CloseVertical() @@ -116,27 +116,27 @@ internal static void CloseVertical() EditorGUILayout.EndVertical(); } - internal static void BeginHorizontal() + internal static Rect BeginHorizontal() { - BeginHorizontal(GUIStyle.none); + return BeginHorizontal(GUIStyle.none); } - internal static void BeginHorizontal(GUIStyle style, params GUILayoutOption[] options) + internal static Rect BeginHorizontal(GUIStyle style, params GUILayoutOption[] options) { if (!inEditorLayout) { ToolboxEditorLog.LogWarning("Begin horizontal layout group action can be executed only within the Toolbox Editor."); - return; + return Rect.zero; } if (hLayoutClips > 0) { ToolboxEditorLog.LogWarning("Nested horizontal layout groups are not supported."); - return; + return Rect.zero; } hLayoutClips++; - EditorGUILayout.BeginHorizontal(style, options); + return EditorGUILayout.BeginHorizontal(style, options); } internal static void CloseHorizontal() diff --git a/Assets/Editor Toolbox/EditorSettings.asset b/Assets/Editor Toolbox/EditorSettings.asset index 1f385381..0d1e0f7f 100644 --- a/Assets/Editor Toolbox/EditorSettings.asset +++ b/Assets/Editor Toolbox/EditorSettings.asset @@ -50,10 +50,12 @@ MonoBehaviour: decoratorDrawerHandlers: - classReference: Toolbox.Editor.Drawers.BeginGroupAttributeDrawer, Toolbox-Editor - classReference: Toolbox.Editor.Drawers.BeginHorizontalAttributeDrawer, Toolbox-Editor + - classReference: Toolbox.Editor.Drawers.BeginHorizontalGroupAttributeDrawer, Toolbox-Editor - classReference: Toolbox.Editor.Drawers.BeginIndentAttributeDrawer, Toolbox-Editor - classReference: Toolbox.Editor.Drawers.EditorButtonAttributeDrawer, Toolbox-Editor - classReference: Toolbox.Editor.Drawers.EndGroupAttributeDrawer, Toolbox-Editor - classReference: Toolbox.Editor.Drawers.EndHorizontalAttributeDrawer, Toolbox-Editor + - classReference: Toolbox.Editor.Drawers.EndHorizontalGroupAttributeDrawer, Toolbox-Editor - classReference: Toolbox.Editor.Drawers.EndIndentAttributeDrawer, Toolbox-Editor - classReference: Toolbox.Editor.Drawers.HelpAttributeDrawer, Toolbox-Editor - classReference: Toolbox.Editor.Drawers.HighlightAttributeDrawer, Toolbox-Editor diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalAttribute.cs index 54ef6727..c8848d9e 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalAttribute.cs @@ -8,7 +8,7 @@ namespace UnityEngine [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] public class BeginHorizontalAttribute : ToolboxDecoratorAttribute { - public BeginHorizontalAttribute(float labelToWidthRatio = 0.1f, float fieldToWidthRatio = 0.0f) + public BeginHorizontalAttribute(float labelToWidthRatio = 0.0f, float fieldToWidthRatio = 0.0f) { LabelToWidthRatio = labelToWidthRatio; FieldToWidthRatio = fieldToWidthRatio; diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs new file mode 100644 index 00000000..e453817c --- /dev/null +++ b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs @@ -0,0 +1,22 @@ +using System; + +namespace UnityEngine +{ + /// + /// Begins horizontal group of properties. + /// Additionally, creates title label and scrollbar if needed. + /// Has to be closed by the . + /// + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] + public class BeginHorizontalGroupAttribute : BeginHorizontalAttribute + { + public BeginHorizontalGroupAttribute(float labelToWidthRatio = 0.0f, float fieldToWidthRatio = 0.0f, string label = null) : base(labelToWidthRatio, fieldToWidthRatio) + { + Label = label; + } + + public string Label { get; private set; } + + public bool HasLabel => !string.IsNullOrEmpty(Label); + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta new file mode 100644 index 00000000..8dc8355e --- /dev/null +++ b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db26257335296c8439ea9e58be7b328e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs new file mode 100644 index 00000000..633e4ee8 --- /dev/null +++ b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs @@ -0,0 +1,8 @@ +using System; + +namespace UnityEngine +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] + public class EndHorizontalGroupAttribute : EndHorizontalAttribute + { } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta new file mode 100644 index 00000000..81fe93a6 --- /dev/null +++ b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a30c3ba3b053ad943965a580f72f6419 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Examples/Scripts/SampleBehaviour2.cs b/Assets/Examples/Scripts/SampleBehaviour2.cs index 519a5a95..bddcf01a 100644 --- a/Assets/Examples/Scripts/SampleBehaviour2.cs +++ b/Assets/Examples/Scripts/SampleBehaviour2.cs @@ -107,7 +107,7 @@ public class SampleNestedClass [Label("7", skinStyle: SkinStyle.Box)] - [BeginHorizontal] + [BeginHorizontal(labelToWidthRatio: 0.1f)] public int var29; public int var30; //NOTE: custom sample created within the Examples @@ -158,4 +158,9 @@ public int GetValue() { return ints.Length * Random.Range(1, 5); } + + [Label("14", skinStyle: SkinStyle.Box)] + + [IgnoreParent] + public Quaternion q; } \ No newline at end of file From 9eaed1a80f98321bf97c8677eac60a4f799b44cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 4 Jul 2021 17:40:36 +0200 Subject: [PATCH 5/7] Update documentation and examples --- Assets/Editor Toolbox/CHANGELOG.md | 9 ++++++ Assets/Editor Toolbox/README.md | 11 ++++++- Assets/Editor Toolbox/package.json | 2 +- Assets/Examples/Scenes/SampleScene.unity | 30 +++++++++++--------- Assets/Examples/Scripts/SampleBehaviour2.cs | 10 +++++++ Docs/horizontal.png | Bin 0 -> 15884 bytes README.md | 11 ++++++- 7 files changed, 57 insertions(+), 16 deletions(-) create mode 100644 Docs/horizontal.png diff --git a/Assets/Editor Toolbox/CHANGELOG.md b/Assets/Editor Toolbox/CHANGELOG.md index fb3a1f03..f90251c6 100644 --- a/Assets/Editor Toolbox/CHANGELOG.md +++ b/Assets/Editor Toolbox/CHANGELOG.md @@ -1,3 +1,12 @@ +## 0.8.13 [04.07.2021] + +### Added: +- Begin/EndHorizontalGroupAttribute + +### Changed: +- Fix overall layouting issues +- Fix IgnoreParentAttribute issues + ## 0.8.11 [02.07.2021] ### Added: diff --git a/Assets/Editor Toolbox/README.md b/Assets/Editor Toolbox/README.md index 72c5f67b..190c5fe6 100644 --- a/Assets/Editor Toolbox/README.md +++ b/Assets/Editor Toolbox/README.md @@ -268,11 +268,18 @@ public int var3; public int var4; ``` ```csharp -[BeginHorizontal] +[BeginHorizontal(labelToWidthRatio: 0.1f)] public int var1; public int var2; [EndHorizontal] public int var3; + +[BeginHorizontalGroup(label: "Horizontal Group")] +public GameObject gameObject; +[SpaceArea] +[EndHorizontalGroup] +[ReorderableList] +public int[] ints; ``` ```csharp [BeginIndent] @@ -316,6 +323,8 @@ public int var1; ``` ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/decorators.png) +![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/horizontal.png) + ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/imagearea.png) ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/helpbox.png) diff --git a/Assets/Editor Toolbox/package.json b/Assets/Editor Toolbox/package.json index 754f6d8c..114ca648 100644 --- a/Assets/Editor Toolbox/package.json +++ b/Assets/Editor Toolbox/package.json @@ -1,7 +1,7 @@ { "name": "com.arimger.editor-toolbox", "displayName": "Editor Toolbox", - "version": "0.8.11", + "version": "0.8.13", "unity": "2018.1", "description": "Tools, custom attributes, drawers, hierarchy overlay, and other extensions for the Unity Editor.", "keywords": [ diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index bdf38f96..d9192f71 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -99,7 +99,7 @@ LightmapSettings: m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 112000000, guid: 4f45668bfc38b4c4bb6229eef4382cbb, type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: ccb01454973bb9a40bf3814633c8db30, + m_LightingSettings: {fileID: 4890085278179872738, guid: 8aebe3ea7163bc84194ae1d81c850abb, type: 2} --- !u!196 &4 NavMeshSettings: @@ -487,15 +487,23 @@ MonoBehaviour: - {fileID: 0} var36: 1 dictionary: - pairs: - - key: 5 - value: {fileID: 977748987} - - key: 2 - value: {fileID: 534669902} - - key: 3 - value: {fileID: 2037155952} + pairs: [] error: 0 - ints: + ints: 01000000080000000c00000010000000 + q: {x: 0, y: 0, z: 0, w: 0} + gameObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 5059060190599569098, guid: 5573ca52cac7c2d4cb2536e37e9be1f1, type: 3} + - {fileID: 0} + floats: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 --- !u!4 &661896459 Transform: m_ObjectHideFlags: 2 @@ -630,10 +638,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c96bc1945c12e5246b1faac636a63516, type: 3} m_Name: m_EditorClassIdentifier: - aa: - classReference: - aaa: - classReference: UnityEngine.AvatarMask, UnityEngine.AnimationModule var1: 82 targetTag: Untagged progressBar: 25.4 diff --git a/Assets/Examples/Scripts/SampleBehaviour2.cs b/Assets/Examples/Scripts/SampleBehaviour2.cs index bddcf01a..bcbe00d9 100644 --- a/Assets/Examples/Scripts/SampleBehaviour2.cs +++ b/Assets/Examples/Scripts/SampleBehaviour2.cs @@ -163,4 +163,14 @@ public int GetValue() [IgnoreParent] public Quaternion q; + + [Label("15", skinStyle: SkinStyle.Box)] + + [BeginHorizontalGroup(label: "Horizontal Group")] + [ReorderableList, InLineEditor] + public GameObject[] gameObjects; + [SpaceArea] + [EndHorizontalGroup] + [ReorderableList] + public float[] floats; } \ No newline at end of file diff --git a/Docs/horizontal.png b/Docs/horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..dea8e92792be770417a1a111b762ee8049f622e7 GIT binary patch literal 15884 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 72c5f67b..190c5fe6 100644 --- a/README.md +++ b/README.md @@ -268,11 +268,18 @@ public int var3; public int var4; ``` ```csharp -[BeginHorizontal] +[BeginHorizontal(labelToWidthRatio: 0.1f)] public int var1; public int var2; [EndHorizontal] public int var3; + +[BeginHorizontalGroup(label: "Horizontal Group")] +public GameObject gameObject; +[SpaceArea] +[EndHorizontalGroup] +[ReorderableList] +public int[] ints; ``` ```csharp [BeginIndent] @@ -316,6 +323,8 @@ public int var1; ``` ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/decorators.png) +![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/horizontal.png) + ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/imagearea.png) ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/helpbox.png) From 7536dbe8fbc68dc6c354dc4397fb9835687ba1c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 4 Jul 2021 17:41:14 +0200 Subject: [PATCH 6/7] Add possibility to set fixed height of the horizontal group --- .../BeginHorizontalGroupAttributeDrawer.cs | 30 +++++++++++-------- .../BeginHorizontalGroupAttribute.cs | 9 ++++++ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs index 6603bfd7..4b68a047 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs @@ -7,7 +7,10 @@ public class BeginHorizontalGroupAttributeDrawer : ToolboxDecoratorDrawer((i, defaultValue) => defaultValue); + storage = new ControlDataStorage((id, defaultValue) => + { + return defaultValue; + }); } /// @@ -16,25 +19,28 @@ static BeginHorizontalGroupAttributeDrawer() private static readonly ControlDataStorage storage; - private void HandleScrollView() + private void HandleScrollView(float fixedHeight) { var controlId = storage.GetControlId(); var oldScroll = storage.ReturnItem(controlId, Vector2.zero); - var newScroll = EditorGUILayout.BeginScrollView(oldScroll); + var newScroll = fixedHeight > 0.0f + ? EditorGUILayout.BeginScrollView(oldScroll, GUILayout.Height(fixedHeight)) + : EditorGUILayout.BeginScrollView(oldScroll); storage.AppendItem(controlId, newScroll); } - private void AdjustLeftMargin() + private void ApplyIndentLevel() { - EditorGUILayout.Space(Style.extraLeftPadding); + GUILayout.Space(Style.extraIndentLevel); } protected override void OnGuiBeginSafe(BeginHorizontalGroupAttribute attribute) { - var width = EditorGUIUtility.currentViewWidth; - EditorGUIUtility.labelWidth = width * attribute.LabelToWidthRatio; - EditorGUIUtility.fieldWidth = width * attribute.FieldToWidthRatio; + var fixedWidth = EditorGUIUtility.currentViewWidth; + var fixedHeight = attribute.Height; + EditorGUIUtility.labelWidth = fixedWidth * attribute.LabelToWidthRatio; + EditorGUIUtility.fieldWidth = fixedWidth * attribute.FieldToWidthRatio; ToolboxLayoutHelper.BeginVertical(Style.groupBackgroundStyle); if (attribute.HasLabel) @@ -42,18 +48,18 @@ protected override void OnGuiBeginSafe(BeginHorizontalGroupAttribute attribute) GUILayout.Label(attribute.Label, EditorStyles.boldLabel); } - HandleScrollView(); + HandleScrollView(fixedHeight); ToolboxLayoutHelper.BeginHorizontal(); - AdjustLeftMargin(); + ApplyIndentLevel(); } private static class Style { /// - /// Additional padding applied to keep foldout-based labels within the group. + /// Additional indent applied to keep foldout-based labels within the group. /// - internal static readonly float extraLeftPadding = 8.0f; + internal static readonly float extraIndentLevel = 8.0f; internal static readonly GUIStyle groupBackgroundStyle; diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs index e453817c..304a1214 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs @@ -18,5 +18,14 @@ public BeginHorizontalGroupAttribute(float labelToWidthRatio = 0.0f, float field public string Label { get; private set; } public bool HasLabel => !string.IsNullOrEmpty(Label); + +#if UNITY_2019_1_OR_NEWER + /// + /// Indicates the fixed height of the horizontal group, if is equal to 0 then height will be auto-sized. + /// + public float Height { get; set; } = 0.0f; +#else + public float Height { get; set; } = 300.0f; +#endif } } \ No newline at end of file From 02ce618fe4c99c69f9409e8ca14542564da9280e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Mon, 5 Jul 2021 00:25:19 +0200 Subject: [PATCH 7/7] Add possibility to draw vertical decorative lines --- .../DecoratorDrawers/LineAttributeDrawer.cs | 6 +++- .../Editor Toolbox/Editor/ToolboxEditorGui.cs | 35 ++++++++++++++----- .../DecoratorAttributes/LineAttribute.cs | 20 +++++------ 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/LineAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/LineAttributeDrawer.cs index b330c945..ca3c6755 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/LineAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/ToolboxDrawers/DecoratorDrawers/LineAttributeDrawer.cs @@ -6,7 +6,11 @@ public class LineAttributeDrawer : ToolboxDecoratorDrawer { protected override void OnGuiBeginSafe(LineAttribute attribute) { - ToolboxEditorGui.DrawLine(attribute.Thickness, attribute.Padding, attribute.GuiColor, attribute.ApplyIndent); + ToolboxEditorGui.DrawLine(attribute.Thickness, + attribute.Padding, + attribute.GuiColor, + attribute.IsHorizontal, + attribute.ApplyIndent); } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs b/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs index 9042da1c..977f1d2b 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs @@ -12,6 +12,14 @@ namespace Toolbox.Editor /// public static partial class ToolboxEditorGui { + private static Rect GetLineRect(Rect rect, float thickness, float padding, bool horizontal) + { + return horizontal + ? new Rect(rect.x, rect.y + padding / 2, rect.width, thickness) + : new Rect(rect.x + padding / 2, rect.y, thickness, rect.height); + } + + /// /// Draws horizontal line. /// Uses built-in layouting system. @@ -27,22 +35,34 @@ public static void DrawLine(float thickness = 0.75f, float padding = 6.0f) /// public static void DrawLine(float thickness, float padding, Color color) { - DrawLine(thickness, padding, color, false); + DrawLine(thickness, padding, color, true); + } + + /// + /// Draws horizontal line. + /// Uses built-in layouting system. + /// + public static void DrawLine(float thickness, float padding, Color color, bool horizontal) + { + DrawLine(thickness, padding, color, horizontal, false); } /// /// Draws horizontal line. /// Uses built-in layouting system. /// - public static void DrawLine(float thickness, float padding, Color color, bool applyIndent) + public static void DrawLine(float thickness, float padding, Color color, bool horizontal, bool applyIndent) { - var rect = EditorGUILayout.GetControlRect(GUILayout.Height(padding + thickness)); + var area = padding + thickness; + var rect = horizontal + ? EditorGUILayout.GetControlRect(GUILayout.Height(area), GUILayout.ExpandWidth(true)) + : EditorGUILayout.GetControlRect(GUILayout.Width(area), GUILayout.ExpandHeight(true)); if (applyIndent) { rect = EditorGUI.IndentedRect(rect); } - DrawLine(rect, thickness, padding, color); + DrawLine(rect, thickness, padding, color, horizontal); } /// @@ -50,16 +70,15 @@ public static void DrawLine(float thickness, float padding, Color color, bool ap /// public static void DrawLine(Rect rect, float thickness = 0.75f, float padding = 6.0f) { - DrawLine(rect, thickness, padding, new Color(0.3f, 0.3f, 0.3f)); + DrawLine(rect, thickness, padding, new Color(0.3f, 0.3f, 0.3f), true); } /// /// Draws horizontal line. /// - public static void DrawLine(Rect rect, float thickness, float padding, Color color) + public static void DrawLine(Rect rect, float thickness, float padding, Color color, bool horizontal) { - rect = new Rect(rect.x, rect.y + padding / 2, rect.width, thickness); - EditorGUI.DrawRect(rect, color); + EditorGUI.DrawRect(GetLineRect(rect, thickness, padding, horizontal), color); } /// diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LineAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LineAttribute.cs index f8ac48fc..033a9032 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LineAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LineAttribute.cs @@ -12,12 +12,18 @@ public LineAttribute(float thickness = 0.75f, float padding = 6.0f) { Thickness = Math.Max(thickness, 0); Padding = padding; + IsHorizontal = true; } public float Thickness { get; private set; } public float Padding { get; private set; } + /// + /// Indicates if the line should be horizontal, otherwise will be drawn vertically. + /// + public bool IsHorizontal { get; set; } + /// /// Indicates if drawer should apply additional indent to the line's width. /// @@ -33,17 +39,9 @@ public LineAttribute(float thickness = 0.75f, float padding = 6.0f) /// public Color GuiColor { - get - { - if (ColorUtility.TryParseHtmlString(HexColor, out var color)) - { - return color; - } - else - { - return new Color(0.3f, 0.3f, 0.3f); - } - } + get => ColorUtility.TryParseHtmlString(HexColor, out var color) + ? color + : new Color(0.3f, 0.3f, 0.3f); } } } \ No newline at end of file