namespace UIWidgets
{
using UIWidgets.Styles;
using UnityEngine;
using UnityEngine.UI;
///
/// Folder dialog.
///
public class FolderDialog : Picker
{
///
/// ListView.
///
[SerializeField]
public DirectoryTreeView DirectoryTreeView;
///
/// OK button.
///
[SerializeField]
public Button OkButton;
///
/// Prepare picker to open.
///
/// Default value.
public override void BeforeOpen(string defaultValue)
{
DirectoryTreeView.SelectDirectory(defaultValue);
DirectoryTreeView.NodeSelected.AddListener(NodeChanged);
DirectoryTreeView.NodeDeselected.AddListener(NodeChanged);
OkButton.onClick.AddListener(OkClick);
NodeChanged(null);
}
///
/// Handle selected node event.
///
/// Node.
protected virtual void NodeChanged(TreeNode node)
{
OkButton.interactable = DirectoryTreeView.SelectedNode != null;
}
///
/// Handle OkButton click.
///
public void OkClick()
{
var node = DirectoryTreeView.SelectedNode;
if (node == null)
{
return;
}
Selected(node.Item.FullName);
}
///
/// Prepare picker to close.
///
public override void BeforeClose()
{
DirectoryTreeView.NodeSelected.RemoveListener(NodeChanged);
DirectoryTreeView.NodeDeselected.RemoveListener(NodeChanged);
OkButton.onClick.RemoveListener(OkClick);
}
#region IStylable implementation
///
public override bool SetStyle(Style style)
{
base.SetStyle(style);
DirectoryTreeView.SetStyle(style);
style.Dialog.Button.ApplyTo(OkButton.gameObject);
style.Dialog.Button.ApplyTo(transform.Find("Buttons/Cancel"));
return true;
}
///
public override bool GetStyle(Style style)
{
base.GetStyle(style);
DirectoryTreeView.GetStyle(style);
style.Dialog.Button.GetFrom(OkButton.gameObject);
style.Dialog.Button.GetFrom(transform.Find("Buttons/Cancel"));
return true;
}
#endregion
}
}