1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-13 18:32:55 +08:00

Sort SkinSection in alphabetical order

This commit is contained in:
rednir 2021-01-18 19:51:42 +00:00
parent dd809df076
commit 7476cb3047

View File

@ -107,21 +107,20 @@ namespace osu.Game.Overlays.Settings.Sections
private void updateItems() private void updateItems()
{ {
skinItems = skins.GetAllUsableSkins(); skinItems = skins.GetAllUsableSkins();
skinItems = sortList(skinItems);
// insert after lazer built-in skins
int firstNonDefault = skinItems.FindIndex(s => s.ID > 0);
if (firstNonDefault < 0)
firstNonDefault = skinItems.Count;
skinItems.Insert(firstNonDefault, random_skin_info);
skinDropdown.Items = skinItems; skinDropdown.Items = skinItems;
} }
private void itemUpdated(ValueChangedEvent<WeakReference<SkinInfo>> weakItem) private void itemUpdated(ValueChangedEvent<WeakReference<SkinInfo>> weakItem)
{ {
if (weakItem.NewValue.TryGetTarget(out var item)) if (weakItem.NewValue.TryGetTarget(out var item))
Schedule(() => skinDropdown.Items = skinDropdown.Items.Where(i => !i.Equals(item)).Append(item).ToArray()); {
List<SkinInfo> newDropdownItems = skinDropdown.Items.ToList();
newDropdownItems.Add(item);
newDropdownItems = sortList(newDropdownItems);
Schedule(() => skinDropdown.Items = newDropdownItems.ToArray());
}
} }
private void itemRemoved(ValueChangedEvent<WeakReference<SkinInfo>> weakItem) private void itemRemoved(ValueChangedEvent<WeakReference<SkinInfo>> weakItem)
@ -130,6 +129,24 @@ 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)
{
skinsList.Sort((a, b) => String.Compare(a.Name, b.Name, StringComparison.Ordinal));
for (int i = 0; i < skinsList.Count; i++)
{
// insert lazer built-in skins before user skins
if (skinsList[i].ID <= 0) {
var itemToMove = skinsList[i];
skinsList.RemoveAt(i);
skinsList.Insert(0, itemToMove);
}
}
skinsList.RemoveAll(s => s.ID == SkinInfo.RANDOM_SKIN);
skinsList.Insert(0, random_skin_info);
return skinsList;
}
private class SkinSettingsDropdown : SettingsDropdown<SkinInfo> private class SkinSettingsDropdown : SettingsDropdown<SkinInfo>
{ {
protected override OsuDropdown<SkinInfo> CreateDropdown() => new SkinDropdownControl(); protected override OsuDropdown<SkinInfo> CreateDropdown() => new SkinDropdownControl();