mirror of
https://github.com/osukey/osukey.git
synced 2025-07-03 01:09:57 +09:00
Update with osu!-side dropdown changes
This commit is contained in:
@ -1,9 +1,9 @@
|
||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Framework.Configuration;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Game.Configuration;
|
||||
using osu.Game.Graphics;
|
||||
@ -15,12 +15,15 @@ namespace osu.Game.Overlays.Settings.Sections
|
||||
{
|
||||
public class SkinSection : SettingsSection
|
||||
{
|
||||
private SettingsDropdown<int> skinDropdown;
|
||||
private SkinSettingsDropdown skinDropdown;
|
||||
|
||||
public override string Header => "Skin";
|
||||
|
||||
public override FontAwesome Icon => FontAwesome.fa_paint_brush;
|
||||
|
||||
private readonly Bindable<SkinDescription> dropdownBindable = new Bindable<SkinDescription>();
|
||||
private readonly Bindable<int> configBindable = new Bindable<int>();
|
||||
|
||||
private SkinManager skins;
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
@ -31,7 +34,7 @@ namespace osu.Game.Overlays.Settings.Sections
|
||||
FlowContent.Spacing = new Vector2(0, 5);
|
||||
Children = new Drawable[]
|
||||
{
|
||||
skinDropdown = new SettingsDropdown<int>(),
|
||||
skinDropdown = new SkinSettingsDropdown(),
|
||||
new SettingsSlider<double, SizeSlider>
|
||||
{
|
||||
LabelText = "Menu cursor size",
|
||||
@ -54,19 +57,21 @@ namespace osu.Game.Overlays.Settings.Sections
|
||||
skins.ItemAdded += itemAdded;
|
||||
skins.ItemRemoved += itemRemoved;
|
||||
|
||||
skinDropdown.Items = skins.GetAllUsableSkins().Select(s => new KeyValuePair<string, int>(s.ToString(), s.ID));
|
||||
config.BindWith(OsuSetting.Skin, configBindable);
|
||||
|
||||
var skinBindable = config.GetBindable<int>(OsuSetting.Skin);
|
||||
skinDropdown.Bindable = dropdownBindable;
|
||||
skinDropdown.Items = skins.GetAllUsableSkins().Select(s => new SkinDescription { Id = s.ID, Name = s.ToString() }).ToArray();
|
||||
|
||||
// Todo: This should not be necessary when OsuConfigManager is databased
|
||||
if (skinDropdown.Items.All(s => s.Value != skinBindable.Value))
|
||||
skinBindable.Value = 0;
|
||||
if (skinDropdown.Items.All(s => s.Id != configBindable.Value))
|
||||
configBindable.Value = 0;
|
||||
|
||||
skinDropdown.Bindable = skinBindable;
|
||||
configBindable.BindValueChanged(v => dropdownBindable.Value = skinDropdown.Items.Single(s => s.Id == v), true);
|
||||
dropdownBindable.BindValueChanged(v => configBindable.Value = v.Id);
|
||||
}
|
||||
|
||||
private void itemRemoved(SkinInfo s) => skinDropdown.Items = skinDropdown.Items.Where(i => i.Value != s.ID);
|
||||
private void itemAdded(SkinInfo s) => skinDropdown.Items = skinDropdown.Items.Append(new KeyValuePair<string, int>(s.ToString(), s.ID));
|
||||
private void itemRemoved(SkinInfo s) => skinDropdown.Items = skinDropdown.Items.Where(i => i.Id != s.ID).ToArray();
|
||||
private void itemAdded(SkinInfo s) => skinDropdown.Items = skinDropdown.Items.Append(new SkinDescription { Id = s.ID, Name = s.ToString() }).ToArray();
|
||||
|
||||
protected override void Dispose(bool isDisposing)
|
||||
{
|
||||
@ -83,5 +88,21 @@ namespace osu.Game.Overlays.Settings.Sections
|
||||
{
|
||||
public override string TooltipText => Current.Value.ToString(@"0.##x");
|
||||
}
|
||||
|
||||
private class SkinSettingsDropdown : SettingsDropdown<SkinDescription>
|
||||
{
|
||||
protected override OsuDropdown<SkinDescription> CreateDropdown() => new SkinDropdownControl { Items = Items };
|
||||
|
||||
private class SkinDropdownControl : DropdownControl
|
||||
{
|
||||
protected override string GenerateItemText(SkinDescription item) => item.Name;
|
||||
}
|
||||
}
|
||||
|
||||
private struct SkinDescription
|
||||
{
|
||||
public int Id;
|
||||
public string Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user