protected override AdvancedDropdownItem Search(string searchString) { if (string.IsNullOrEmpty(searchString) || m_SearchableElements == null) { return(null); } // Support multiple search words separated by spaces. var searchWords = searchString.ToLower().Split(' '); // We keep two lists. Matches that matches the start of an item always get first priority. var matchesStart = new List <AdvancedDropdownItem>(); var matchesWithin = new List <AdvancedDropdownItem>(); bool found = false; foreach (var e in m_SearchableElements) { var addComponentItem = (ComponentDropdownItem)e; var name = addComponentItem.searchableName.ToLower().Replace(" ", ""); if (AddMatchItem(e, name, searchWords, matchesStart, matchesWithin)) { found = true; } } if (!found) { foreach (var e in m_SearchableElements) { var addComponentItem = (ComponentDropdownItem)e; var name = addComponentItem.searchableNameLocalized.Replace(" ", ""); AddMatchItem(e, name, searchWords, matchesStart, matchesWithin); } } var searchTree = new AdvancedDropdownItem(kSearchHeader); matchesStart.Sort(); foreach (var element in matchesStart) { searchTree.AddChild(element); } matchesWithin.Sort(); foreach (var element in matchesWithin) { searchTree.AddChild(element); } if (searchTree != null) { var addNewScriptGroup = new ComponentDropdownItem("New script"); addNewScriptGroup.name = L10n.Tr("New script"); m_State.SetSelectedIndex(addNewScriptGroup, 0); var addNewScript = new NewScriptDropdownItem(); addNewScript.className = searchString; addNewScriptGroup.AddChild(addNewScript); searchTree.AddChild(addNewScriptGroup); } return(searchTree); }
protected AdvancedDropdownItem RebuildTree() { m_SearchableElements = new List <AdvancedDropdownItem>(); AdvancedDropdownItem root = new ComponentDropdownItem("ROOT"); List <MenuItemData> menuItems = GetSortedMenuItems(); Dictionary <string, int> pathHashCodeMap = new Dictionary <string, int>(); for (var i = 0; i < menuItems.Count; i++) { var menu = menuItems[i]; if (menu.command == "ADD") { continue; } var paths = menu.path.Split('/'); var parent = root; for (var j = 0; j < paths.Length; j++) { var path = paths[j]; if (j == paths.Length - 1) { var element = new ComponentDropdownItem(path, L10n.Tr(path), menu.path, menu.command, menu.isLegacy); parent.AddChild(element); m_SearchableElements.Add(element); continue; } if (!pathHashCodeMap.TryGetValue(path, out int pathHashCode)) { pathHashCode = path.GetHashCode(); pathHashCodeMap[path] = pathHashCode; } var group = (ComponentDropdownItem)parent.children.SingleOrDefault(c => c.id == pathHashCode); if (group == null) { group = new ComponentDropdownItem(path, L10n.Tr(path)); parent.AddChild(group); } parent = group; } } root = root.children.Single(); var newScript = new ComponentDropdownItem("New script", L10n.Tr("New script")); newScript.AddChild(new NewScriptDropdownItem()); root.AddChild(newScript); return(root); }
protected AdvancedDropdownItem RebuildTree() { m_SearchableElements = new List <AdvancedDropdownItem>(); AdvancedDropdownItem root = new ComponentDropdownItem("ROOT"); var menuDictionary = GetMenuDictionary(); menuDictionary.Sort(CompareItems); for (var i = 0; i < menuDictionary.Count; i++) { var menu = menuDictionary[i]; if (menu.Value == "ADD") { continue; } var menuPath = menu.Key; var paths = menuPath.Split('/'); var parent = root; for (var j = 0; j < paths.Length; j++) { var path = paths[j]; if (j == paths.Length - 1) { var element = new ComponentDropdownItem(path, menuPath, menu.Value); element.localizedName = L10n.Tr(path); parent.AddChild(element); m_SearchableElements.Add(element); continue; } var group = (ComponentDropdownItem)parent.children.SingleOrDefault(c => c.name == path); if (group == null) { group = new ComponentDropdownItem(path); group.localizedName = L10n.Tr(path); parent.AddChild(group); } parent = group; } } root = root.children.Single(); var newScript = new ComponentDropdownItem("New script"); newScript.localizedName = L10n.Tr("New script"); newScript.AddChild(new NewScriptDropdownItem()); root.AddChild(newScript); return(root); }