All pastes #82768 Raw Edit

Something

public text v1 · immutable
·published 2006-07-08 22:14 UTC
rendered paste body
private SortType _sortType;

        public void Sort(SortType sortType)
        {
            _sortType = sortType;

            List<CEntryPanel> list = new List<CEntryPanel>((IEnumerable<CEntryPanel>)Controls);

            list.Sort(new Comparison<CEntryPanel>(Comparer));
            Controls.Clear();

            for (int i = 0; i < list.Count; i++)
                MainForm.Instance.AddControl(list[i], true);
        }

        public int Comparer(CEntryPanel one, CEntryPanel two)
        {
            switch (_sortType)
            {
                default:
                    {
                        char[] oneChars = GetChars(one);
                        char[] twoChars = GetChars(two);

                        int length = Math.Min(oneChars.Length, twoChars.Length);

                        for (int i = 0; i < length; i++)
                            if (oneChars[i].Equals(twoChars[i]))
                                continue;
                            else
                                return oneChars[i].CompareTo(twoChars[i]);


                        return 0;
                    }
                case SortType.Average:
                case SortType.Online:
                case SortType.Ping:
                case SortType.Peak:
                    {
                        int oneValue = GetInts(one);
                        int twoValue = GetInts(two);

                        if (_sortType == SortType.Ping)
                            if (oneValue == 0 || twoValue == 0)
                                return -1;

                        return oneValue.CompareTo(twoValue);
                    }
            }            
        }

        private int GetInts(CEntryPanel one)
        {

            switch (_sortType)
            {
                case SortType.Average: return one.ShardEntry.PlayerInfo.Average;
                case SortType.Online: return one.ShardEntry.PlayerInfo.Online;
                case SortType.Ping: return (int)one.ShardEntry.ShardNetworkInfo.PingTime;
                default: return one.ShardEntry.PlayerInfo.Peak;
            }
        }

        private char[] GetChars(CEntryPanel one)
        {
            switch (_sortType)
            {
                case SortType.Name: return one.ShardEntry.ShardInfo.Name.ToCharArray();
                case SortType.Era: return Enum.GetName(typeof(Era), one.ShardEntry.ShardInfo.Era).ToCharArray();
                case SortType.Language: return Enum.GetName(typeof(Language), one.ShardEntry.ShardInfo.Language).ToCharArray();
                case SortType.Ping: return one.ShardEntry.ShardNetworkInfo.PingTime.ToString().ToCharArray();
                default: return Enum.GetName(typeof(PlayType), one.ShardEntry.ShardInfo.PlayType).ToCharArray();
            }
        }

        public CEntryPanel PanelConversion(Control c)
        {
            return (CEntryPanel)c;
        }