Custom background color for collections

This commit is contained in:
Crawcik
2021-06-03 13:45:07 +02:00
parent a1f985bc7d
commit e459707b0d
5 changed files with 50 additions and 28 deletions

View File

@@ -77,11 +77,15 @@ namespace FlaxEditor.CustomEditors.Editors
}
}
/// <summary>
/// Determines if value of collection can be null.
/// </summary>
protected bool NotNullItems;
private IntegerValueElement _size;
private Color _background;
private int _elementsCount;
private bool _readOnly;
private bool _canReorderItems;
private bool _notNullItems;
/// <summary>
/// Gets the length of the collection.
@@ -105,7 +109,7 @@ namespace FlaxEditor.CustomEditors.Editors
{
_readOnly = false;
_canReorderItems = true;
_notNullItems = false;
NotNullItems = false;
// No support for different collections for now
if (HasDifferentValues || HasDifferentTypes)
@@ -118,13 +122,19 @@ namespace FlaxEditor.CustomEditors.Editors
Type overrideEditorType = null;
float spacing = 10.0f;
var collection = (CollectionAttribute)attributes?.FirstOrDefault(x => x is CollectionAttribute);
if (collection != null)
if (collection is null)
{
_readOnly = false;
NotNullItems = false;
_background = new Color(1f, 1f, 1f, 0.08f);
}
else
{
// TODO: handle NotNullItems by filtering child editors SetValue
_readOnly = collection.ReadOnly;
_canReorderItems = collection.CanReorderItems;
_notNullItems = collection.NotNullItems;
NotNullItems = collection.NotNullItems;
_background = collection.BackgroundColor;
overrideEditorType = TypeUtils.GetType(collection.OverrideEditorTypeName).Type;
spacing = collection.Spacing;
}
@@ -146,6 +156,8 @@ namespace FlaxEditor.CustomEditors.Editors
// Elements
if (size > 0)
{
var panel = layout.VerticalPanel();
panel.Panel.BackgroundColor = _background;
var elementType = ElementType;
if (_canReorderItems)
{
@@ -153,7 +165,7 @@ namespace FlaxEditor.CustomEditors.Editors
{
if (i != 0 && spacing > 0f)
{
if (layout.Children.Count > 0 && layout.Children[layout.Children.Count - 1] is PropertiesListElement propertiesListElement)
if (panel.Children.Count > 0 && panel.Children[panel.Children.Count - 1] is PropertiesListElement propertiesListElement)
{
if (propertiesListElement.Labels.Count > 0)
{
@@ -166,12 +178,12 @@ namespace FlaxEditor.CustomEditors.Editors
}
else
{
layout.Space(spacing);
panel.Space(spacing);
}
}
var overrideEditor = overrideEditorType != null ? (CustomEditor)Activator.CreateInstance(overrideEditorType) : null;
layout.Object(new CollectionItemLabel(this, i), new ListValueContainer(elementType, i, Values), overrideEditor);
panel.Object(new CollectionItemLabel(this, i), new ListValueContainer(elementType, i, Values), overrideEditor);
}
}
else
@@ -180,14 +192,14 @@ namespace FlaxEditor.CustomEditors.Editors
{
if (i != 0 && spacing > 0f)
{
if (layout.Children.Count > 0 && layout.Children[layout.Children.Count - 1] is PropertiesListElement propertiesListElement)
if (panel.Children.Count > 0 && panel.Children[panel.Children.Count - 1] is PropertiesListElement propertiesListElement)
propertiesListElement.Space(spacing);
else
layout.Space(spacing);
panel.Space(spacing);
}
var overrideEditor = overrideEditorType != null ? (CustomEditor)Activator.CreateInstance(overrideEditorType) : null;
layout.Object("Element " + i, new ListValueContainer(elementType, i, Values), overrideEditor);
panel.Object("Element " + i, new ListValueContainer(elementType, i, Values), overrideEditor);
}
}
}