better sorting for Associations

This commit is contained in:
Michael Becker 2020-05-24 19:10:38 -04:00
parent b3761f679d
commit 6f5d7150d9
No known key found for this signature in database
GPG Key ID: 506F54899E2BFED7
2 changed files with 24 additions and 3 deletions

View File

@ -28,7 +28,7 @@ namespace UniversalEditor
/// <summary>
/// Associates <see cref="ObjectModel" />s, <see cref="DataFormat" />s, and other related Universal Editor objects.
/// </summary>
public class Association
public class Association : IComparable<Association>
{
/// <summary>
/// Defines a collection of <see cref="Association" />s.
@ -233,5 +233,24 @@ namespace UniversalEditor
}
return associations.ToArray();
}
public int CompareTo(Association other)
{
int nFileFormatFilters = 0, nMagicBytes = 0;
foreach (DataFormatFilter filter in Filters)
{
nFileFormatFilters += filter.FileNameFilters.Count;
nMagicBytes += filter.MagicBytes.Count;
}
int nFileFormatFiltersOther = 0, nMagicBytesOther = 0;
foreach (DataFormatFilter filter in other.Filters)
{
nFileFormatFiltersOther += filter.FileNameFilters.Count;
nMagicBytesOther += filter.MagicBytes.Count;
}
return (nFileFormatFilters + nMagicBytes).CompareTo(nFileFormatFiltersOther + nMagicBytesOther);
}
}
}

View File

@ -550,15 +550,17 @@ namespace UniversalEditor.Common
}
Association[] associations = Association.FromCriteria(new AssociationCriteria() { Accessor = accessor });
List<Association> listAssocs = new List<Association>(associations);
listAssocs.Sort();
List<DataFormatReference> list = new List<DataFormatReference>();
foreach (Association association in associations)
foreach (Association association in listAssocs)
{
for (int i = 0; i < association.DataFormats.Count; i++)
{
list.Add(association.DataFormats[i]);
}
}
list.Sort(new Comparison<DataFormatReference>(_DataFormatReferenceComparer));
if (needsOpen)
{