Example #1
0
        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;
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
        }
Example #5
0
 public ItemTree(IssueTableItem i)
 {
     m_Item     = i;
     m_Children = new List <ItemTree>();
 }
Example #6
0
        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);
 }