76 lines
2.1 KiB
C#
76 lines
2.1 KiB
C#
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
|
|
}
|
|
}
|