|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
namespace System.Windows.Forms.Design;
/// <summary>
/// Implements the manual sorting of items by columns in the mask descriptor table.
/// Used by the MaskDesignerDialog to sort the items in the mask descriptors list.
/// </summary>
internal class MaskDescriptorComparer : IComparer<MaskDescriptor>
{
private readonly SortOrder _sortOrder;
private readonly SortType _sortType;
public enum SortType
{
ByName,
BySample,
ByValidatingTypeName
}
public MaskDescriptorComparer(SortType sortType, SortOrder sortOrder)
{
_sortType = sortType;
_sortOrder = sortOrder;
}
public int Compare(MaskDescriptor? maskDescriptorA, MaskDescriptor? maskDescriptorB)
{
if (maskDescriptorA is null || maskDescriptorB is null)
{
// Since this is an internal class we cannot throw here, the user cannot do anything about this.
Debug.Fail("One or more parameters invalid");
return 0;
}
string? textA;
string? textB;
switch (_sortType)
{
default:
Debug.Fail("Invalid SortType, defaulting to SortType.ByName");
goto case SortType.ByName;
case SortType.ByName:
textA = maskDescriptorA.Name;
textB = maskDescriptorB.Name;
break;
case SortType.BySample:
textA = maskDescriptorA.Sample;
textB = maskDescriptorB.Sample;
break;
case SortType.ByValidatingTypeName:
textA = maskDescriptorA.ValidatingType is null ? SR.MaskDescriptorValidatingTypeNone : maskDescriptorA.ValidatingType.Name;
textB = maskDescriptorB.ValidatingType is null ? SR.MaskDescriptorValidatingTypeNone : maskDescriptorB.ValidatingType.Name;
break;
}
int retVal = string.Compare(textA, textB, StringComparison.CurrentCulture);
return _sortOrder == SortOrder.Descending ? -retVal : retVal;
}
public static int GetHashCode(MaskDescriptor maskDescriptor)
{
if (maskDescriptor is not null)
{
return maskDescriptor.GetHashCode();
}
Debug.Fail("Null maskDescriptor passed.");
return 0;
}
public static bool Equals(MaskDescriptor? maskDescriptorA, MaskDescriptor? maskDescriptorB)
{
if (!MaskDescriptor.IsValidMaskDescriptor(maskDescriptorA) || !MaskDescriptor.IsValidMaskDescriptor(maskDescriptorB))
{
return maskDescriptorA == maskDescriptorB; // shallow comparison.
}
return maskDescriptorA.Equals(maskDescriptorB);
}
}
|