コード例 #1
0
ファイル: MainForm.cs プロジェクト: Abel-Liu/ProcessViewer
        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);
        }
コード例 #2
0
        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;
                }
            }
        }
コード例 #3
0
ファイル: frmMain.cs プロジェクト: PsychoTeras/TimeSands
        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;
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        /// <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);
        }