namespace UIWidgets.Menu
{
using System;
using System.Collections.Generic;
using UIWidgets.Styles;
using UnityEngine;
using UnityEngine.UI;
///
/// ContextMenu template.
///
[RequireComponent(typeof(LayoutGroup))]
[RequireComponent(typeof(RectTransform))]
public partial class ContextMenuView : MonoBehaviour, IStylable
{
///
/// MenuItem template.
///
[Serializable]
public class MenuItemTemplate
{
[SerializeField]
string key;
///
/// Key.
///
public string Key
{
get
{
return key;
}
private set
{
key = value;
}
}
[SerializeField]
MenuItemView template;
///
/// Template.
///
public MenuItemView Template
{
get
{
return template;
}
private set
{
template = value;
}
}
[SerializeField]
[HideInInspector]
List Cache = new List();
///
/// Initializes a new instance of the class.
///
/// Key.
/// Template.
public MenuItemTemplate(string key, MenuItemView template)
{
if (template == null)
{
throw new ArgumentNullException("template");
}
Key = key;
Template = template;
}
///
/// Get item instance.
///
/// Instance.
public MenuItemView Instance()
{
MenuItemView item;
if (Cache.Count > 0)
{
item = Cache[Cache.Count - 1];
Cache.RemoveAt(Cache.Count - 1);
}
else
{
item = Instantiate(Template);
Utilities.FixInstantiated(Template, item);
item.RectTransform.localPosition = Vector3.zero;
}
item.gameObject.SetActive(true);
return item;
}
///
/// Return item instance to the cache.
///
/// Item.
public void Return(MenuItemView instance)
{
instance.transform.SetParent(Template.RectTransform.parent, false);
instance.Index = -1;
instance.Item = null;
instance.gameObject.SetActive(false);
Cache.Add(instance);
}
///
/// Clear cache.
///
public void Clear()
{
for (int i = 0; i < Cache.Count; i++)
{
Destroy(Cache[i].gameObject);
}
Cache.Clear();
}
}
}
}