1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-22 09:27:34 +08:00

Refactor skin sorting method

* Rename to `sortUserSkins` to convey meaning better.
* Sort in-place instead of slicing the list.
* Change to `void` to avoid misleading users that the method returns
  a new list instance.
* Fix typo in comment.
This commit is contained in:
Bartłomiej Dach 2021-01-19 18:36:42 +01:00
parent b00c6a1d60
commit 78e590d25d

View File

@ -125,7 +125,7 @@ namespace osu.Game.Overlays.Settings.Sections
{ {
skinItems = skins.GetAllUsableSkins(); skinItems = skins.GetAllUsableSkins();
skinItems.Insert(firstNonDefaultSkinIndex, random_skin_info); skinItems.Insert(firstNonDefaultSkinIndex, random_skin_info);
skinItems = sortList(skinItems); sortUserSkins(skinItems);
skinDropdown.Items = skinItems; skinDropdown.Items = skinItems;
} }
@ -134,7 +134,7 @@ namespace osu.Game.Overlays.Settings.Sections
if (weakItem.NewValue.TryGetTarget(out var item)) if (weakItem.NewValue.TryGetTarget(out var item))
{ {
List<SkinInfo> newDropdownItems = skinDropdown.Items.Where(i => !i.Equals(item)).Append(item).ToList(); List<SkinInfo> newDropdownItems = skinDropdown.Items.Where(i => !i.Equals(item)).Append(item).ToList();
newDropdownItems = sortList(newDropdownItems); sortUserSkins(newDropdownItems);
Schedule(() => skinDropdown.Items = newDropdownItems.ToArray()); Schedule(() => skinDropdown.Items = newDropdownItems.ToArray());
} }
} }
@ -145,14 +145,11 @@ namespace osu.Game.Overlays.Settings.Sections
Schedule(() => skinDropdown.Items = skinDropdown.Items.Where(i => i.ID != item.ID).ToArray()); Schedule(() => skinDropdown.Items = skinDropdown.Items.Where(i => i.ID != item.ID).ToArray());
} }
private List<SkinInfo> sortList(List<SkinInfo> skinsList) private void sortUserSkins(List<SkinInfo> skinsList)
{ {
// Sort user skins seperate from built-in skins // Sort user skins separately from built-in skins
List<SkinInfo> userSkinsList = skinsList.GetRange(firstNonDefaultSkinIndex, skinsList.Count - firstNonDefaultSkinIndex); skinsList.Sort(firstNonDefaultSkinIndex, skinsList.Count - firstNonDefaultSkinIndex,
skinsList.RemoveRange(firstNonDefaultSkinIndex, skinsList.Count - firstNonDefaultSkinIndex); Comparer<SkinInfo>.Create((a, b) => string.Compare(a.Name, b.Name, StringComparison.OrdinalIgnoreCase)));
userSkinsList.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.OrdinalIgnoreCase));
skinsList.AddRange(userSkinsList);
return skinsList;
} }
private class SkinSettingsDropdown : SettingsDropdown<SkinInfo> private class SkinSettingsDropdown : SettingsDropdown<SkinInfo>