/** * Recursively create subtree and add OperatorTypeButtons */ private void PopulateTree(ItemsControl item, OperatorTypeTree typeTree, String prefix, HashSet <string> expandedItems) { typeTree.Children.Sort(CompareOpsTypeTreeByName); foreach (var subtree in typeTree.Children) { var newSubTreeItem = new TreeViewItem() { IsExpanded = expandedItems.Contains(prefix + subtree.Name), Header = subtree.Name, DataContext = subtree, }; newSubTreeItem.ContextMenu = CreateContextMenu(); item.Items.Add(newSubTreeItem); PopulateTree(newSubTreeItem, subtree, prefix + subtree.Name, expandedItems); } typeTree.Operators.Sort(CompareOpsByName); foreach (var op in typeTree.Operators) { var b = new OperatorTypeButton(op, false); _operatorTypeButtons.Add(b); item.Items.Add(b); } }
private void UpdateSearchResults() { var pattern = XSearchTextBox.Text.Select((t, i) => XSearchTextBox.Text.Substring(i, 1)) .Where(subString => Regex.Match(subString, "[A-Z0-9_-]", RegexOptions.IgnoreCase) != Match.Empty) .Aggregate(".*", (current, subString) => current + (subString + ".*")); var currentProjectName = GetCurrentProjectName(); var filteredOpEntries = (from metaOpEntry in App.Current.Model.MetaOpManager.MetaOperators where (Regex.Match(metaOpEntry.Value.Name, pattern, RegexOptions.IgnoreCase) != Match.Empty || metaOpEntry.Value.Description.IndexOf(XSearchTextBox.Text, StringComparison.InvariantCultureIgnoreCase) != -1 || metaOpEntry.Value.Namespace.IndexOf(XSearchTextBox.Text, StringComparison.InvariantCultureIgnoreCase) != -1 ) let rating = ComputeRelevancy(metaOpEntry.Value, XSearchTextBox.Text, currentProjectName) orderby rating select new { Op = metaOpEntry.Value, Rating = rating }).Reverse().Take(100); XResultList.Items.Clear(); foreach (var o in filteredOpEntries) { var button = new OperatorTypeButton(o.Op); button.Opacity = IsOperatorRelevantToProject(o.Op) ? 1 : 0.4; XResultList.Items.Add(button); button.Width = XResultList.ActualWidth; } XResultList.SelectedIndex = 0; SelectedMetaOp = null; }
private static bool IsMatchingOpType(FunctionType opType, OperatorTypeButton otb) { return((otb.MetaOp.Inputs.Count > 0) && ((otb.MetaOp.Inputs[0].OpPart.Type == opType) || (otb.MetaOp.Inputs[0].OpPart.Type == FunctionType.Generic))); }