Skip to content

Commit

Permalink
Merge pull request #57 from lordubbe/ClassesOnly-attribute
Browse files Browse the repository at this point in the history
  • Loading branch information
Thundernerd committed Nov 14, 2023
2 parents 809922d + 08cf75a commit 16d5b04
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 6 deletions.
8 changes: 8 additions & 0 deletions Editor/Attributes.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions Editor/Attributes/ClassesOnlyAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace TNRD
{
/// <summary>An attribute to use when you want to exclude non-raw references in the reference picker.</summary>
public class ClassesOnlyAttribute : PropertyAttribute { }
}
11 changes: 11 additions & 0 deletions Editor/Attributes/ClassesOnlyAttribute.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Editor/Drawers/ReferenceDrawer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ private void OnButtonClicked(Rect position, SerializedProperty property)
{
AdvancedDropdownState state = new AdvancedDropdownState();
SerializableInterfaceAdvancedDropdown dropdown =
new SerializableInterfaceAdvancedDropdown(state, GenericType, GetRelevantScene(property), property);
new SerializableInterfaceAdvancedDropdown(state, GenericType, GetRelevantScene(property), property, FieldInfo.GetCustomAttribute<ClassesOnlyAttribute>() != null);
dropdown.ItemSelectedEvent += OnItemSelected;
dropdown.Show(position);
}
Expand Down
18 changes: 13 additions & 5 deletions Editor/Utilities/SerializableInterfaceAdvancedDropdown.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ internal sealed class SerializableInterfaceAdvancedDropdown : AdvancedDropdown
private readonly Type interfaceType;
private readonly MethodInfo sortChildrenMethod;
private readonly bool canSort;
private readonly bool classesOnly;
private readonly Scene? relevantScene;
private readonly SerializedProperty property;

Expand All @@ -28,7 +29,8 @@ internal sealed class SerializableInterfaceAdvancedDropdown : AdvancedDropdown
AdvancedDropdownState state,
Type interfaceType,
Scene? relevantScene,
SerializedProperty property
SerializedProperty property,
bool classesOnly
)
: base(state)
{
Expand All @@ -42,15 +44,21 @@ SerializedProperty property
this.interfaceType = interfaceType;
this.relevantScene = relevantScene;
this.property = property;
this.classesOnly = classesOnly;
}

/// <inheritdoc />
protected override AdvancedDropdownItem BuildRoot()
{
AdvancedDropdownItemWrapper item = new AdvancedDropdownItemWrapper(interfaceType.Name)
.AddChild(new AssetsItemBuilder(interfaceType).Build())
.AddChild(new ClassesItemBuilder(interfaceType).Build())
.AddChild(new SceneItemBuilder(interfaceType, relevantScene).Build());
AdvancedDropdownItemWrapper item = new AdvancedDropdownItemWrapper(interfaceType.Name);

item.AddChild(new ClassesItemBuilder(interfaceType).Build());

if (!classesOnly)
{
item.AddChild(new AssetsItemBuilder(interfaceType).Build());
item.AddChild(new SceneItemBuilder(interfaceType, relevantScene).Build());
}

foreach (AdvancedDropdownItem dropdownItem in item.children)
{
Expand Down

0 comments on commit 16d5b04

Please sign in to comment.