public void AddIssues(ProjectIssue[] issues) { var id = 1; if (m_GroupByDescription) { var descriptors = issues.Select(i => i.descriptor).Distinct(); if (m_TreeViewItemGroups == null) { m_TreeViewItemGroups = new List <IssueTableItem>(descriptors.Count()); } foreach (var descriptor in descriptors) { var groupItem = new IssueTableItem(id++, 0, descriptor); m_TreeViewItemGroups.Add(groupItem); } } var itemsList = new List <IssueTableItem>(issues.Length); if (m_TreeViewItemIssues != null) { itemsList.AddRange(m_TreeViewItemIssues); } foreach (var issue in issues) { var depth = m_GroupByDescription ? 1 : 0; var item = new IssueTableItem(id++, depth, issue.name, issue.descriptor, issue); itemsList.Add(item); } m_TreeViewItemIssues = itemsList.ToArray(); }
private void SetRuleForItem(IssueTableItem item, Rule.Action ruleAction) { var descriptor = item.ProblemDescriptor; var callingMethod = ""; Rule rule; if (item.hasChildren) { rule = m_ProjectAuditor.config.GetRule(descriptor); } else { callingMethod = item.ProjectIssue.callingMethod; rule = m_ProjectAuditor.config.GetRule(descriptor, callingMethod); } if (rule == null) { m_ProjectAuditor.config.AddRule(new Rule { id = descriptor.id, filter = callingMethod, action = ruleAction }); } else { rule.action = ruleAction; } }
private void SortByMultipleColumns(IList <TreeViewItem> rows) { int[] sortedColumns = multiColumnHeader.state.sortedColumns; if (sortedColumns.Length == 0) { return; } bool[] columnAscending = new bool[sortedColumns.Length]; for (int i = 0; i < sortedColumns.Length; i++) { columnAscending[i] = multiColumnHeader.IsSortedAscending(sortedColumns[i]); } ItemTree root = new ItemTree(null); Stack <ItemTree> stack = new Stack <ItemTree>(); stack.Push(root); foreach (TreeViewItem row in rows) { IssueTableItem r = row as IssueTableItem; if (r == null) { continue; } int activeParentDepth = stack.Peek().Depth; while (row.depth <= activeParentDepth) { stack.Pop(); activeParentDepth = stack.Peek().Depth; } if (row.depth > activeParentDepth) { ItemTree t = new ItemTree(r); stack.Peek().AddChild(t); stack.Push(t); } } root.Sort(sortedColumns, columnAscending); // convert back to rows List <TreeViewItem> newRows = new List <TreeViewItem>(rows.Count); root.ToList(newRows); rows.Clear(); foreach (TreeViewItem treeViewItem in newRows) { rows.Add(treeViewItem); } }
protected override TreeViewItem BuildRoot() { int index = 0; int idForhiddenRoot = -1; int depthForHiddenRoot = -1; var root = new TreeViewItem(idForhiddenRoot, depthForHiddenRoot, "root"); // grouped by assembly // HashSet<string> group = new HashSet<string>(); // foreach (var issue in m_Issues) // { // if (!string.IsNullOrEmpty(issue.assembly) && !assemblies.Contains(issue.assembly)) // { // assemblies.Add(issue.assembly); // } // } if (m_GroupByDescription) { // grouped by problem definition HashSet <string> allGroupsSet = new HashSet <string>(); foreach (var issue in m_Issues) { if (!allGroupsSet.Contains(issue.descriptor.description)) { allGroupsSet.Add(issue.descriptor.description); } } var allGroups = allGroupsSet.ToList(); allGroups.Sort(); foreach (var groupName in allGroups) { // var issuesIngroup = m_Issues.Where(i => group.Equals(i.assembly)); var issues = m_Issues.Where(i => groupName.Equals(i.descriptor.description)).ToArray(); // maybe dont create fake issue // var assemblyGroup = new ProjectIssue // { // assembly = assembly // }; var displayName = string.Format("{0} ({1})", groupName, issues.Length); var groupItem = new IssueTableItem(index++, 0, displayName, issues.FirstOrDefault().descriptor); root.AddChild(groupItem); foreach (var issue in issues) { var item = new IssueTableItem(index++, 1, "Not Used", issue.descriptor, issue); groupItem.AddChild(item); } } } else { // flat view foreach (var issue in m_Issues) { var item = new IssueTableItem(index++, 0, "", issue.descriptor, issue); root.AddChild(item); } } if (!root.hasChildren) { root.AddChild(new TreeViewItem(index++, 0, "No elements found")); } return(root); }
public ItemTree(IssueTableItem i) { m_Item = i; m_Children = new List <ItemTree>(); }
protected override TreeViewItem BuildRoot() { // SteveM TODO - Documentation says that BuildRoot should ONLY build the root table item, // and all this logic should be moved to BuildRows() // https://docs.unity3d.com/ScriptReference/IMGUI.Controls.TreeView.BuildRows.html // This would involve implementing getNewSelectionOverride, GetAncestors() and GetDescendantsThatHaveChildren() // Which seems like a lot of extra complexity unless we're running into serious performance issues int index = 0; int idForHiddenRoot = -1; int depthForHiddenRoot = -1; var root = new TreeViewItem(idForHiddenRoot, depthForHiddenRoot, "root"); var filteredIssues = m_Issues.Where(issue => m_ProjectAuditorWindow.ShouldDisplay(issue)); if (m_GroupByDescription) { // grouped by problem definition HashSet <string> allGroupsSet = new HashSet <string>(); foreach (var issue in filteredIssues) { if (!allGroupsSet.Contains(issue.descriptor.description)) { allGroupsSet.Add(issue.descriptor.description); } } var allGroups = allGroupsSet.ToList(); allGroups.Sort(); foreach (var groupName in allGroups) { var issues = filteredIssues.Where(i => groupName.Equals(i.descriptor.description)); var displayName = string.Format("{0} ({1})", groupName, issues.Count()); var groupItem = new IssueTableItem(index++, 0, displayName, issues.FirstOrDefault().descriptor); root.AddChild(groupItem); foreach (var issue in issues) { var item = new IssueTableItem(index++, 1, issue.name, issue.descriptor, issue); groupItem.AddChild(item); } } } else { // flat view foreach (var issue in filteredIssues) { var item = new IssueTableItem(index++, 0, issue.descriptor.description, issue.descriptor, issue); root.AddChild(item); } } if (!root.hasChildren) { root.AddChild(new TreeViewItem(index++, 0, "No elements found")); } return(root); }
private void ClearRulesForItem(IssueTableItem item) { m_ProjectAuditor.config.ClearRules(item.ProblemDescriptor, item.hasChildren ? string.Empty : item.ProjectIssue.callingMethod); }