private void ReLoadProcesses() { betterListView1.Items.Clear(); List <BetterListViewItem> result = new List <BetterListViewItem>(); Process[] ps = Process.GetProcesses().OrderBy(i => i.ProcessName).ToArray(); foreach (Process p in ps) { if (ckDoNotDisplayHidden.Checked && hiddenProcesses.Contains(p.ProcessName.ToUpper())) { continue; } if (ckHideKnown.Checked && knownProcesses.Contains(p.ProcessName.ToUpper())) { continue; } var filePath = WinAPI.GetExecutablePath(p); var item = new BetterListViewItem(WinAPI.GetFileIconImage(filePath), p.ProcessName); var idItem = new BetterListViewSubItem(p.Id.ToString()); idItem.Key = new PIDComparable() { PID = p.Id }; item.SubItems.Add(idItem); var memory = p.PrivateMemorySize64 / 1024; var memoryItem = new BetterListViewSubItem(memory.ToString("N0") + "K"); memoryItem.Key = new MemoryComparable() { Memory = memory }; item.SubItems.Add(memoryItem); item.SubItems.Add(filePath); if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath)) { var info = FileVersionInfo.GetVersionInfo(filePath); item.SubItems.Add(info.FileDescription); item.SubItems.Add(info.CompanyName); } if (knownProcesses.Contains(p.ProcessName.ToUpper())) { item.ForeColor = Color.Gray; } result.Add(item); } betterListView1.Items.AddRange(result); }
private static void Refresh(BetterListViewItem item, BetterListView owner) { TaskListViewSourceItem source = item.DataSource(); object dataObject = source.DataObject; IEnumerable <BetterListViewColumnHeader> columns = owner.Columns; Dictionary <string, PropertyInfo> props = GetDataObjectProps(dataObject); int colCount = columns.Count(), subCount = item.SubItems.Count, subDiff = colCount - subCount; if (subDiff > 0) { List <BetterListViewSubItem> subItems = new List <BetterListViewSubItem>(subDiff); for (int i = 0; i < subDiff; i++) { subItems.Add(new BetterListViewSubItem()); } item.SubItems.AddRange(subItems); } int idx = -1; foreach (BetterListViewColumnHeader column in columns) { idx++; if (column.DisplayMember == string.Empty || !props.TryGetValue(column.DisplayMember, out var propertyInfo)) { continue; } BetterListViewSubItem subItem = item.SubItems[idx]; object displayValue = propertyInfo.GetValue(dataObject); string displayString = displayValue?.ToString(); if (subItem.Text != displayString) { subItem.Text = displayString; } if (column.ValueMember != string.Empty && props.TryGetValue(column.ValueMember, out propertyInfo)) { subItem.Key = (IComparable)propertyInfo.GetValue(dataObject); } else { subItem.Key = (IComparable)displayValue; } } }
private void LvTasksDrawItem(object sender, BetterListViewDrawItemEventArgs e) { int idxActivity = lvhActivity.Index; Rectangle rectInner = e.ItemBounds.SubItemBounds[idxActivity].BoundsInner; if (rectInner.Width <= 0 || rectInner.Height <= 0) { return; } TaskModel task = e.Item.DataObject <TaskModel>(); BetterListViewSubItem subActivity = e.Item.SubItems[idxActivity]; Image image = null; switch (task.State) { case TaskState.Idle: image = Resources.Resources.GreyBall; break; case TaskState.Active: image = Resources.Resources.GreenBall; break; case TaskState.Suspended: image = Resources.Resources.YellowBall; break; case TaskState.Deleted: image = Resources.Resources.RedBall; break; case TaskState.Closed: image = Resources.Resources.BlueBall; break; } if (subActivity.Image != image) { subActivity.Image = image; } }
static BetterListViewSubItem[] CreateSubItems(QueryResultItem result, Font[] font, bool showStartEndStation, QueryResultItem originalItem = null) { var array = new BetterListViewSubItem[] { new TrainCodeSubItem(result, font), showStartEndStation ? new StartOrEndStation(result, font, true) : null, new TrainFromStationNameSubItem(result, font), new TrainToStationNameSubItem(result, font), showStartEndStation ? new StartOrEndStation(result, font, false) : null, new TrainToStationDateSubItem(result, font) }.ExceptNull().ToArray(); //var baseTicketPriceIndex = array.Length; array = array.Concat(Configuration.QueryViewConfiguration.Instance.SeatOrder.Select(s => new TicketCellSubItem(result, s, font))) .Concat(new[] { new TrainMemoSubItem(result, font) }) .ToArray(); return(array); }
/// <summary> /// Compare two sub-items. /// </summary> /// <param name="subItemA">First sub-item to compare.</param><param name="subItemB">Second sub-item to compare.</param><param name="sortMethod">Item comparison method.</param><param name="order">Sort order.</param> /// <returns> /// Comparison result. /// </returns> protected override int CompareSubItems(BetterListViewSubItem subItemA, BetterListViewSubItem subItemB, BetterListViewSortMethod sortMethod, int order) { var itema = subItemA.Item as QueryResultListViewItem; var itemb = subItemB.Item as QueryResultListViewItem; if (QueryParam != null) { if (QueryParam.EnableAutoPreSubmit && QueryParam.AutoPreSubmitConfig != null) { if (QueryParam.AutoPreSubmitConfig.SeatFirst) { var a = Compare(itema, itemb, s => s.ResultItem.Selected); if (a != 0) { return(a); } a = Compare(itema, itemb, s => s.ResultItem.SeatSelected); if (a != 0) { return(a); } } else { var a = Compare(itema, itemb, s => s.ResultItem.SeatSelected); if (a != 0) { return(a); } a = Compare(itema, itemb, s => s.ResultItem.Selected); if (a != 0) { return(a); } } } } var value = (subItemA as ResultSubItems.SubItemBase).CompareTo((subItemB as ResultSubItems.SubItemBase)) * order; return(value); }
/// <summary> /// Compare two sub-items. /// </summary> /// <param name="subItemA">First sub-item to compare.</param><param name="subItemB">Second sub-item to compare.</param><param name="sortMethod">Item comparison method.</param><param name="order">Sort order.</param> /// <returns> /// Comparison result. /// </returns> protected override int CompareSubItems(BetterListViewSubItem subItemA, BetterListViewSubItem subItemB, BetterListViewSortMethod sortMethod, int order) { if (SuspendSort) { return(0); } var lx = subItemA.Item as ResourceListViewItem; var ly = subItemB.Item as ResourceListViewItem; if (lx.ParentItem != null && ly.ParentItem != null) { return(lx.Resource.CompareTo(ly.Resource)); } //do not compare subitems if (lx.ParentItem != null || ly.ParentItem != null) { return(0); } var sx = lx.Resource; var sy = ly.Resource; if (sx.MatchWeight != sy.MatchWeight) { return(sy.MatchWeight - sx.MatchWeight); } var opt = AppContext.Instance.Options; var weight = order; switch (opt.SortType) { case SortType.Default: return(0); //默认就是按照网站显示的顺序,不排序 case SortType.Title: return(string.Compare(sx.Title, sy.Title, StringComparison.OrdinalIgnoreCase) * weight); case SortType.PubDate: if (sx.UpdateTime == null && sy.UpdateTime == null) { return(0); } if (sx.UpdateTime == null ^ sy.UpdateTime == null) { return((sx.UpdateTime == null ? -1 : 1) * weight); } return((int)((sx.UpdateTime.Value - sy.UpdateTime.Value).TotalMinutes) * -1); //case BtResourceGrabber.Entities.SortType.TorrentSize: // break; case SortType.FileSize: var s1 = sx.DownloadSizeValue ?? EngineUtility.ToSize(sx.DownloadSize); var s2 = sy.DownloadSizeValue ?? EngineUtility.ToSize(sy.DownloadSize); return((s1 == s2 ? 0 : s1 < s2 ? -1 : 1) * weight); //case BtResourceGrabber.Entities.SortType.LeechCount: // break; //case BtResourceGrabber.Entities.SortType.SeederCount: // break; default: break; } return(0); }