69 lines
2.2 KiB
C#
69 lines
2.2 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.ComponentModel;
|
|
using ClassicAssist.UI.Misc;
|
|
|
|
namespace ClassicAssist.Data.Skills
|
|
{
|
|
public class SkillComparer : IComparer
|
|
{
|
|
private readonly ListSortDirection _direction;
|
|
private readonly SkillsGridViewColumn.Enums _sortField;
|
|
|
|
public SkillComparer( ListSortDirection direction, SkillsGridViewColumn.Enums sortField )
|
|
{
|
|
_direction = direction;
|
|
_sortField = sortField;
|
|
}
|
|
|
|
public int Compare( object x, object y )
|
|
{
|
|
SkillEntry first = (SkillEntry) x;
|
|
SkillEntry second = (SkillEntry) y;
|
|
|
|
if ( first == null || second == null )
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
int result;
|
|
|
|
switch ( _sortField )
|
|
{
|
|
case SkillsGridViewColumn.Enums.Name:
|
|
result = string.Compare( first.Skill.Name, second.Skill.Name, StringComparison.Ordinal );
|
|
break;
|
|
case SkillsGridViewColumn.Enums.Value:
|
|
result = first.Value.CompareTo( second.Value );
|
|
break;
|
|
case SkillsGridViewColumn.Enums.Base:
|
|
result = first.Base.CompareTo( second.Base );
|
|
break;
|
|
case SkillsGridViewColumn.Enums.Delta:
|
|
result = first.Delta.CompareTo( second.Delta );
|
|
|
|
if ( result == 0 )
|
|
{
|
|
result = first.Base.CompareTo( second.Base );
|
|
}
|
|
|
|
break;
|
|
case SkillsGridViewColumn.Enums.Cap:
|
|
result = first.Cap.CompareTo( second.Cap );
|
|
break;
|
|
case SkillsGridViewColumn.Enums.LockStatus:
|
|
result = first.LockStatus.CompareTo( second.LockStatus );
|
|
break;
|
|
default:
|
|
throw new ArgumentOutOfRangeException();
|
|
}
|
|
|
|
if ( _direction == ListSortDirection.Descending )
|
|
{
|
|
result = -result;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
} |