private void SetupEditors(SearchSelection selection, ShowDetailsOptions showOptions) { int selectionHash = 0; foreach (var s in selection) { selectionHash ^= s.id.GetHashCode(); } if (selectionHash == m_EditorsHash) { return; } ResetEditors(); if (!showOptions.HasAny(ShowDetailsOptions.Inspector)) { return; } var targets = new List <UnityEngine.Object>(); foreach (var s in selection) { var item = s; LoadEditor(item, targets); if (item.GetFieldCount() > 0) { targets.Add(new SearchServiceItem() { name = item.label ?? item.value.ToString(), item = item }); } } if (targets.Count > 0) { int maxGroupCount = targets.GroupBy(t => t.GetType()).Max(g => g.Count()); m_Editors = targets.GroupBy(t => t.GetType()).Where(g => g.Count() == maxGroupCount).Select(g => { var editor = Editor.CreateEditor(g.ToArray()); Utils.SetFirstInspectedEditor(editor); return(editor); }).ToArray(); } m_EditorsHash = selectionHash; }
public static bool HasAll(this ShowDetailsOptions flags, ShowDetailsOptions all) => (flags & all) == all;
public static bool HasAny(this ShowDetailsOptions flags, ShowDetailsOptions f) => (flags & f) != 0;
private void DrawActions(SearchContext context, SearchItem item, Action <SearchItem, bool> selectCallback, ShowDetailsOptions showOptions) { GUILayout.Space(10); if (selectCallback == null) { if (showOptions.HasFlag(ShowDetailsOptions.Actions)) { foreach (var action in item.provider.actions) { if (action == null || action.Id == "context" || action.content == null || action.handler == null) { continue; } if (GUILayout.Button(new GUIContent(action.DisplayName, action.content.image, action.content.tooltip), GUILayout.ExpandWidth(true))) { m_SearchView.ExecuteAction(action, item, context, true); GUIUtility.ExitGUI(); } } } } else if (GUILayout.Button("Select", GUILayout.ExpandWidth(true))) { selectCallback(item, false); m_SearchView.Close(); GUIUtility.ExitGUI(); } }