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; }
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); } }