diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs index aeb88149c5..d7828f220c 100644 --- a/osu.Game/Overlays/MusicController.cs +++ b/osu.Game/Overlays/MusicController.cs @@ -220,7 +220,7 @@ namespace osu.Game.Overlays preferUnicode.ValueChanged += unicode => updateDisplay(current, TransformDirection.None); beatmapSource = game.Beatmap ?? new Bindable(); - playList = beatmaps.GetAllWithChildren(); + //playList = playlist; currentBackground = new MusicControllerBackground(); playerContainer.Add(currentBackground); diff --git a/osu.Game/Overlays/PlaylistController.cs b/osu.Game/Overlays/PlaylistController.cs index 757e72f015..55d6d92efd 100644 --- a/osu.Game/Overlays/PlaylistController.cs +++ b/osu.Game/Overlays/PlaylistController.cs @@ -11,7 +11,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Sprites; -using osu.Framework.Graphics.Transforms; using osu.Framework.Graphics.UserInterface; using osu.Game.Database; using osu.Game.Graphics; @@ -26,19 +25,19 @@ namespace osu.Game.Overlays private const float transition_duration = 800; private Box bg; - private FilterTextBox search; - private Playlist songList; + private FilterControl filter; + private Playlist list; public Action OnSelect { - get { return songList.OnSelect; } - set { songList.OnSelect = value; } + get { return list.OnSelect; } + set { list.OnSelect = value; } } public BeatmapSetInfo Current { - get { return songList.Current; } - set { songList.Current = value; } + get { return list.Current; } + set { list.Current = value; } } public PlaylistController() @@ -62,37 +61,16 @@ namespace osu.Game.Overlays { RelativeSizeAxes = Axes.Both, }, - songList = new Playlist + list = new Playlist { RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Top = 95, Bottom = 10, Right = 10 }, //todo: static sizes aren't good }, - new Container + filter = new FilterControl { - RelativeSizeAxes = Axes.Both, + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, Padding = new MarginPadding(10), - Children = new Drawable[] - { - new FillFlowContainer - { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Spacing = new Vector2(0f, 10f), - Children = new Drawable[] - { - search = new FilterTextBox - { - RelativeSizeAxes = Axes.X, - Height = 40, - }, - new CollectionsDropdown - { - RelativeSizeAxes = Axes.X, - Items = new[] { new KeyValuePair(@"All", PlaylistCollection.All) }, - } - }, - }, - }, }, }, }, @@ -100,18 +78,19 @@ namespace osu.Game.Overlays } [BackgroundDependencyLoader] - private void load(OsuColour colours) + private void load(OsuColour colours, BeatmapDatabase beatmaps) { bg.Colour = colours.Gray3; + list.Sets = beatmaps.GetAllWithChildren().ToArray(); } protected override void PopIn() { base.PopIn(); - search.HoldFocus = true; + filter.Search.HoldFocus = true; - songList.ScrollContainer.ScrollDraggerVisible = true; + list.ScrollContainer.ScrollDraggerVisible = true; ResizeTo(new Vector2(1f), transition_duration, EasingTypes.OutQuint); } @@ -119,23 +98,147 @@ namespace osu.Game.Overlays { base.PopOut(); - search.HoldFocus = false; - search.TriggerFocusLost(); + filter.Search.HoldFocus = false; + filter.Search.TriggerFocusLost(); - songList.ScrollContainer.ScrollDraggerVisible = false; + list.ScrollContainer.ScrollDraggerVisible = false; ResizeTo(new Vector2(1f, 0f), transition_duration, EasingTypes.OutQuint); } + private class FilterControl : Container + { + public readonly FilterTextBox Search; + + public FilterControl() + { + Children = new Drawable[] + { + new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Spacing = new Vector2(0f, 10f), + Children = new Drawable[] + { + Search = new FilterTextBox + { + RelativeSizeAxes = Axes.X, + Height = 40, + }, + new CollectionsDropdown + { + RelativeSizeAxes = Axes.X, + Items = new[] { new KeyValuePair(@"All", PlaylistCollection.All) }, + } + }, + }, + }; + } + + public class FilterTextBox : SearchTextBox + { + protected override Color4 BackgroundUnfocused => OsuColour.FromHex(@"222222"); + protected override Color4 BackgroundFocused => OsuColour.FromHex(@"222222"); + + public FilterTextBox() + { + Masking = true; + CornerRadius = 5; + } + } + + private class CollectionsDropdown : OsuDropdown + { + protected override DropdownHeader CreateHeader() => new CollectionsHeader { AccentColour = AccentColour }; + protected override Menu CreateMenu() => new CollectionsMenu(); + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + AccentColour = colours.Gray6; + } + + private class CollectionsHeader : OsuDropdownHeader + { + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + BackgroundColour = colours.Gray4; + } + + public CollectionsHeader() + { + CornerRadius = 5; + Height = 30; + Icon.TextSize = 14; + Icon.Margin = new MarginPadding(0); + Foreground.Padding = new MarginPadding { Top = 4, Bottom = 4, Left = 10, Right = 10 }; + EdgeEffect = new EdgeEffect + { + Type = EdgeEffectType.Shadow, + Colour = Color4.Black.Opacity(0.3f), + Radius = 3, + Offset = new Vector2(0f, 1f), + }; + } + } + + private class CollectionsMenu : OsuMenu + { + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + Background.Colour = colours.Gray4; + } + + public CollectionsMenu() + { + CornerRadius = 5; + EdgeEffect = new EdgeEffect + { + Type = EdgeEffectType.Shadow, + Colour = Color4.Black.Opacity(0.3f), + Radius = 3, + Offset = new Vector2(0f, 1f), + }; + } + } + } + } + private class Playlist : Container { - private FillFlowContainer songs; + private FillFlowContainer items; + + private BeatmapSetInfo[] sets = { }; + public BeatmapSetInfo[] Sets + { + get + { + return sets; + } + set + { + if (value == sets) return; + sets = value; + + List newItems = new List(); + foreach (BeatmapSetInfo s in value) + { + newItems.Add(new PlaylistItem(s) + { + OnSelect = OnSelect, + }); + } + + items.Children = newItems; + } + } // exposed so PlaylistController can hide the scroll dragger when hidden // because the scroller can be seen when scrolled to the bottom and PlaylistController is closed public readonly ScrollContainer ScrollContainer; - private BeatmapDatabase database; - private Action onSelect; public Action OnSelect { @@ -144,7 +247,7 @@ namespace osu.Game.Overlays { onSelect = value; - foreach (PlaylistItem s in songs.Children) + foreach (PlaylistItem s in items.Children) s.OnSelect = value; } } @@ -158,7 +261,7 @@ namespace osu.Game.Overlays if (value == current) return; current = value; - foreach (PlaylistItem s in songs.Children) + foreach (PlaylistItem s in items.Children) s.Current = s.RepresentedSet.ID == value.ID; } } @@ -172,7 +275,7 @@ namespace osu.Game.Overlays RelativeSizeAxes = Axes.Both, Children = new Drawable[] { - songs = new FillFlowContainer + items = new FillFlowContainer { RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, @@ -182,20 +285,6 @@ namespace osu.Game.Overlays }; } - [BackgroundDependencyLoader] - private void load(BeatmapDatabase beatmaps) - { - database = beatmaps; - - foreach (BeatmapSetInfo b in beatmaps.GetAllWithChildren()) - { - songs.Add(new PlaylistItem(b) - { - OnSelect = OnSelect, - }); - } - } - private class PlaylistItem : Container { private const float fade_duration = 100; @@ -293,76 +382,6 @@ namespace osu.Game.Overlays } } } - - private class FilterTextBox : SearchTextBox - { - protected override Color4 BackgroundUnfocused => OsuColour.FromHex(@"222222"); - protected override Color4 BackgroundFocused => OsuColour.FromHex(@"222222"); - - public FilterTextBox() - { - Masking = true; - CornerRadius = 5; - } - } - - private class CollectionsDropdown : OsuDropdown - { - protected override DropdownHeader CreateHeader() => new CollectionsHeader { AccentColour = AccentColour }; - protected override Menu CreateMenu() => new CollectionsMenu(); - - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - AccentColour = colours.Gray6; - } - - private class CollectionsHeader : OsuDropdownHeader - { - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - BackgroundColour = colours.Gray4; - } - - public CollectionsHeader() - { - CornerRadius = 5; - Height = 30; - Icon.TextSize = 14; - Icon.Margin = new MarginPadding(0); - Foreground.Padding = new MarginPadding { Top = 4, Bottom = 4, Left = 10, Right = 10 }; - EdgeEffect = new EdgeEffect - { - Type = EdgeEffectType.Shadow, - Colour = Color4.Black.Opacity(0.3f), - Radius = 3, - Offset = new Vector2(0f, 1f), - }; - } - } - - private class CollectionsMenu : OsuMenu - { - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - Background.Colour = colours.Gray4; - } - - public CollectionsMenu() - { - CornerRadius = 5; - EdgeEffect = new EdgeEffect - { - Type = EdgeEffectType.Shadow, - Colour = Color4.Black.Opacity(0.3f), - Radius = 3, - Offset = new Vector2(0f, 1f), - }; - } - } - } } //todo: placeholder