// Copyright (c) 2015 - 2023 Doozy Entertainment. All Rights Reserved. // This code can only be used under the standard Unity Asset Store End User License Agreement // A Copy of the EULA APPENDIX 1 is available at http://unity3d.com/company/legal/as_terms using System.Collections.Generic; using Doozy.Editor.EditorUI.Components.Internal; using Doozy.Editor.EditorUI.ScriptableObjects.Colors; using Doozy.Editor.Reactor.Internal; using Doozy.Runtime.Colors; using Doozy.Runtime.Common.Extensions; using Doozy.Runtime.Reactor.Extensions; using Doozy.Runtime.Reactor.Internal; using Doozy.Runtime.Reactor.Reactions; using Doozy.Runtime.UIElements.Extensions; using UnityEngine; using UnityEngine.Events; using UnityEngine.UIElements; namespace Doozy.Editor.EditorUI.Components { public class FluidSearchBox : VisualElement { private const string SEARCH_TEXT = "Search..."; public int minimumNumberOfCharactersToExecuteTheSearch { get; private set; } public TemplateContainer templateContainer { get; } public VisualElement layoutContainer { get; } public TextField searchTextField { get; } public VisualElement searchTextFieldInput { get; } public VisualElement searchInfoContainer { get; } public VisualElement buttonContainer { get; } public FluidButton searchButton { get; } public FluidButton cancelSearchButton { get; } public Label leftLabel { get; } public VisualElement flexibleSpaceBetweenLabels { get; } public Label rightLabel { get; } public FluidToggleButtonTab searchTabButton { get; } public bool isSearching => searchPattern.IsNullOrEmpty() == false; public string searchPattern { get => searchTextField.value; set => Search(value); } public UnityAction OnClearSearchCallback; public UnityAction OnShowSearchResultsCallback; public UnityAction OnSearchPatternChangedCallback; private EditorSelectableColorInfo m_SelectableAccentColor; #region Empty Search Placeholder private const float PLACEHOLDER_ANIMATION_DURATION = 1f; private Image emptySearchPlaceholderImage { get; } private Texture2DReaction emptySearchPlaceholderAnimation { get; set; } private static IEnumerable emptySearchPlaceholderTextures => EditorSpriteSheets.EditorUI.Placeholders.EmptySearch; #endregion public FluidSearchBox() { Add(templateContainer = EditorLayouts.EditorUI.FluidSearchBox.CloneTree()); templateContainer .SetStyleFlexGrow(1) .SetStyleJustifyContent(Justify.Center) .AddStyle(EditorStyles.EditorUI.FluidSearchBox); layoutContainer = templateContainer.Q(nameof(layoutContainer)); searchTextField = layoutContainer.Q(nameof(searchTextField)); searchTextFieldInput = searchTextField.Q("unity-text-input"); // searchTextFieldInput = searchTextField.Q(TextField.inputUssClassName); searchInfoContainer = layoutContainer.Q(nameof(searchInfoContainer)).SetPickingMode(PickingMode.Ignore); buttonContainer = searchInfoContainer.Q(nameof(buttonContainer)); leftLabel = searchInfoContainer.Q