namespace UIWidgets
{
using UIWidgets.Styles;
using UnityEngine;
using UnityEngine.UI;
///
/// Autocomplete as Combobox.
///
public class AutocompleteStringCombobox : MonoBehaviour, IStylable
{
///
/// Autocomplete.
///
[SerializeField]
public AutocompleteString Autocomplete;
///
/// Button to show all options.
///
[SerializeField]
public Button AutocompleteToggle;
///
/// Return focus to InputField if input not found.
///
[SerializeField]
public bool FocusIfInvalid = false;
///
/// Index of the selected option.
///
[SerializeField]
[HideInInspector]
public int Index
{
get
{
return Autocomplete.DataSource.IndexOf(Autocomplete.InputFieldAdapter.text);
}
}
///
/// Start this instance.
///
protected virtual void Start()
{
Autocomplete.InputFieldAdapter.onEndEdit.AddListener(Validate);
AutocompleteToggle.onClick.AddListener(Autocomplete.ShowAllOptions);
}
///
/// Destroy this instance.
///
protected virtual void OnDestroy()
{
Autocomplete.InputFieldAdapter.onEndEdit.RemoveListener(Validate);
AutocompleteToggle.onClick.RemoveListener(Autocomplete.ShowAllOptions);
}
///
/// Validate input.
///
/// Value.
protected void Validate(string value)
{
if (Autocomplete.DataSource.Contains(value))
{
return;
}
if (FocusIfInvalid)
{
Autocomplete.InputFieldAdapter.Focus();
}
else
{
Autocomplete.InputFieldAdapter.text = string.Empty;
}
}
#region IStylable implementation
///
public virtual bool SetStyle(Style style)
{
if (Autocomplete != null)
{
Autocomplete.SetStyle(style);
}
if (AutocompleteToggle != null)
{
style.Combobox.ToggleButton.ApplyTo(AutocompleteToggle.targetGraphic);
}
return true;
}
///
public virtual bool GetStyle(Style style)
{
if (Autocomplete != null)
{
Autocomplete.GetStyle(style);
}
if (AutocompleteToggle != null)
{
style.Combobox.ToggleButton.GetFrom(AutocompleteToggle.targetGraphic);
}
return true;
}
#endregion
}
}