From 5b8bc589349967225e01616dd1a5805154c06ed2 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Girard Date: Mon, 11 Jul 2022 18:42:30 -0400 Subject: [PATCH 1/3] Added NoneDropdownItem --- Editor/Drawers/CustomObjectDrawer.cs | 1 + Editor/Items/NoneDropdownItem.cs | 17 +++++++++++++++++ Editor/Items/NoneDropdownItem.cs.meta | 3 +++ .../SerializableInterfaceAdvancedDropdown.cs | 12 +++++++++++- 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 Editor/Items/NoneDropdownItem.cs create mode 100644 Editor/Items/NoneDropdownItem.cs.meta diff --git a/Editor/Drawers/CustomObjectDrawer.cs b/Editor/Drawers/CustomObjectDrawer.cs index b1931f2..5b6b27e 100644 --- a/Editor/Drawers/CustomObjectDrawer.cs +++ b/Editor/Drawers/CustomObjectDrawer.cs @@ -94,6 +94,7 @@ private void HandleMouseDown(Rect position, Rect positionWithoutThumb) else if (Event.button == 1 && positionWithoutThumb.Contains(Event.mousePosition)) { GenericMenu menu = new GenericMenu(); + menu.AddItem(new GUIContent("Clear"), false, () => { DeletePressed?.Invoke(); }); menu.AddItem(new GUIContent("Properties..."), false, () => { PropertiesClicked?.Invoke(); }); menu.DropDown(position); Event.Use(); diff --git a/Editor/Items/NoneDropdownItem.cs b/Editor/Items/NoneDropdownItem.cs new file mode 100644 index 0000000..454745c --- /dev/null +++ b/Editor/Items/NoneDropdownItem.cs @@ -0,0 +1,17 @@ +using UnityEditor.IMGUI.Controls; + +namespace TNRD.Items +{ + public class NoneDropdownItem : AdvancedDropdownItem, IDropdownItem + { + private ReferenceMode mode => ReferenceMode.Raw; + public NoneDropdownItem() : base("None") { } + + ReferenceMode IDropdownItem.Mode => mode; + + public object GetValue() + { + return default; + } + } +} \ No newline at end of file diff --git a/Editor/Items/NoneDropdownItem.cs.meta b/Editor/Items/NoneDropdownItem.cs.meta new file mode 100644 index 0000000..2813776 --- /dev/null +++ b/Editor/Items/NoneDropdownItem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a7015062205d46cbb9cb01b0b88fff55 +timeCreated: 1657572673 \ No newline at end of file diff --git a/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs b/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs index af82ecd..5210503 100644 --- a/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs +++ b/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs @@ -48,6 +48,11 @@ protected override AdvancedDropdownItem BuildRoot() .AddChild(new ClassesItemBuilder(interfaceType).Build()) .AddChild(new SceneItemBuilder(interfaceType, relevantScene).Build()); + foreach (var dropdownItem in item.children) + { + dropdownItem.AddChild(new NoneDropdownItem()); + } + if (canSort) { sortChildrenMethod.Invoke(item, @@ -56,12 +61,17 @@ protected override AdvancedDropdownItem BuildRoot() (Comparison)Sort, true }); } - return item; } private int Sort(AdvancedDropdownItem a, AdvancedDropdownItem b) { + // For aesthetic reasons. Always puts the None first + if (a is NoneDropdownItem) + return -1; + if (b is NoneDropdownItem) + return 1; + int childrenA = a.children.Count(); int childrenB = b.children.Count(); From 4f98193b061b89a8af59a72eacfc11740fdf445c Mon Sep 17 00:00:00 2001 From: Marc-Antoine Girard Date: Mon, 11 Jul 2022 19:29:09 -0400 Subject: [PATCH 2/3] Small cleanup before PR --- Editor/Items/NoneDropdownItem.cs | 4 ++-- Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Editor/Items/NoneDropdownItem.cs b/Editor/Items/NoneDropdownItem.cs index 454745c..ca05cdc 100644 --- a/Editor/Items/NoneDropdownItem.cs +++ b/Editor/Items/NoneDropdownItem.cs @@ -11,7 +11,7 @@ public NoneDropdownItem() : base("None") { } public object GetValue() { - return default; + return null; } } -} \ No newline at end of file +} diff --git a/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs b/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs index 5210503..a485c08 100644 --- a/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs +++ b/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs @@ -61,6 +61,7 @@ protected override AdvancedDropdownItem BuildRoot() (Comparison)Sort, true }); } + return item; } From 1b5e0af196c761170ad954100f372c4480b062b8 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Girard Date: Fri, 22 Jul 2022 11:46:50 -0400 Subject: [PATCH 3/3] Explicit type and NoneDropDownItem refactor --- Editor/Items/NoneDropdownItem.cs | 3 +-- Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Editor/Items/NoneDropdownItem.cs b/Editor/Items/NoneDropdownItem.cs index ca05cdc..63e4431 100644 --- a/Editor/Items/NoneDropdownItem.cs +++ b/Editor/Items/NoneDropdownItem.cs @@ -4,10 +4,9 @@ namespace TNRD.Items { public class NoneDropdownItem : AdvancedDropdownItem, IDropdownItem { - private ReferenceMode mode => ReferenceMode.Raw; public NoneDropdownItem() : base("None") { } - ReferenceMode IDropdownItem.Mode => mode; + ReferenceMode IDropdownItem.Mode => ReferenceMode.Raw; public object GetValue() { diff --git a/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs b/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs index a485c08..923d03a 100644 --- a/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs +++ b/Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs @@ -48,7 +48,7 @@ protected override AdvancedDropdownItem BuildRoot() .AddChild(new ClassesItemBuilder(interfaceType).Build()) .AddChild(new SceneItemBuilder(interfaceType, relevantScene).Build()); - foreach (var dropdownItem in item.children) + foreach (AdvancedDropdownItem dropdownItem in item.children) { dropdownItem.AddChild(new NoneDropdownItem()); }