rendered paste bodyprivate 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;
}