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 } }