private static void GroupListItems(ListView listView, TokenGrouping grouping)
        {
            listView.BeginUpdate();
            Dictionary <string, List <ListViewItem> > groups = new Dictionary <string, List <ListViewItem> >();

            listView.Groups.Clear();
            foreach (ListViewItem item in listView.Items)
            {
                if (grouping == null)
                {
                    item.Group = null;
                    continue;
                }
                if (item.Tag is ProcessTokenEntry entry)
                {
                    string group_name = grouping.MapToGroup(entry);
                    if (!groups.ContainsKey(group_name))
                    {
                        groups.Add(group_name, new List <ListViewItem>());
                    }
                    groups[group_name].Add(item);
                }
            }

            foreach (var pair in groups.OrderBy(p => p.Key))
            {
                var group = new ListViewGroup(pair.Key, HorizontalAlignment.Left);
                listView.Groups.Add(group);
                group.Items.AddRange(pair.Value.ToArray());
            }
            listView.EndUpdate();
        }
        private void AddGrouping(TokenGrouping grouping)
        {
            var item = groupByToolStripMenuItem.DropDownItems.Add(grouping.Name);

            item.Tag    = grouping;
            item.Click += groupItemsToolStripMenuItem_Click;
        }
        private void AddGrouping(string name, Func <ProcessTokenEntry, string> map_to_group)
        {
            TokenGrouping grouping = new TokenGrouping(name, map_to_group);
            var           item     = groupByToolStripMenuItem.DropDownItems.Add(name);

            item.Tag    = grouping;
            item.Click += groupItemsToolStripMenuItem_Click;
        }
Example #4
0
 private void groupItemsToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (sender is ToolStripMenuItem tool_strip)
     {
         foreach (var item in tool_strip.GetCurrentParent().Items.OfType <ToolStripMenuItem>())
         {
             item.Checked = false;
         }
         tool_strip.Checked = true;
         _process_grouping  = tool_strip.Tag as TokenGrouping;
         GroupListItems(listViewProcesses, _process_grouping);
     }
     else
     {
         GroupListItems(listViewProcesses, _process_grouping);
     }
 }