using System; using System.Reflection; using UnityEditor; using UnityEditor.IMGUI.Controls; using UnityEngine; using PlasticGui; namespace Unity.PlasticSCM.Editor.UI { internal static class DrawSearchField { internal static void For( SearchField searchField, TreeView treeView, float width) { Rect searchFieldRect = GUILayoutUtility.GetRect( width / 2f, EditorGUIUtility.singleLineHeight); searchFieldRect.y += 2f; treeView.searchString = Draw( searchField, searchFieldRect, treeView.searchString); if (!string.IsNullOrEmpty(treeView.searchString)) return; GUI.Label(searchFieldRect, PlasticLocalization.GetString( PlasticLocalization.Name.SearchTooltip), UnityStyles.Search); } static string Draw( SearchField searchField, Rect searchFieldRect, string searchString) { #if UNITY_2019 if (!mIsToolbarSearchFieldSearched) { mIsToolbarSearchFieldSearched = true; InternalToolbarSearchField = FindToolbarSearchField(); } if (InternalToolbarSearchField != null) { return (string)InternalToolbarSearchField.Invoke( null, new object[] { searchFieldRect, searchString, false }); } #endif return searchField.OnToolbarGUI( searchFieldRect, searchString); } #if UNITY_2019 static MethodInfo FindToolbarSearchField() { return EditorGUIType.GetMethod( "ToolbarSearchField", BindingFlags.Static | BindingFlags.NonPublic, null, new Type[] { typeof(Rect), typeof(string), typeof(bool) }, null); } static bool mIsToolbarSearchFieldSearched; static MethodInfo InternalToolbarSearchField; static readonly Type EditorGUIType = typeof(EditorGUI); #endif } }