diff --git a/osu.Game/Graphics/Containers/SectionsContainer.cs b/osu.Game/Graphics/Containers/SectionsContainer.cs new file mode 100644 index 0000000000..9c2485c49c --- /dev/null +++ b/osu.Game/Graphics/Containers/SectionsContainer.cs @@ -0,0 +1,74 @@ +// Copyright (c) 2007-2017 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; + +namespace osu.Game.Graphics.Containers +{ + /// + /// A container that can scroll to each section inside it. + /// + public class SectionsContainer : Container + { + private Drawable expandableHeader, fixedHeader; + private ScrollContainer scrollContainer; + + public Drawable ExpandableHeader + { + get { return expandableHeader; } + set + { + if (value == expandableHeader) return; + + scrollContainer.Remove(expandableHeader); + expandableHeader = value; + expandableHeader.Depth = float.MinValue; + scrollContainer.Add(expandableHeader); + } + } + + public Drawable FixedHeader + { + get { return fixedHeader; } + set + { + if (value == fixedHeader) return; + + scrollContainer.Remove(fixedHeader); + fixedHeader = value; + fixedHeader.Depth = float.MinValue / 2; + scrollContainer.Add(fixedHeader); + } + } + + private List sections = new List(); + public IEnumerable Sections + { + get { return sections; } + set + { + if (value == sections) return; + + foreach (var section in sections) + scrollContainer.Remove(section); + + sections = value.ToList(); + scrollContainer.Add(value); + } + } + + public SectionsContainer() + { + Add(scrollContainer = new ScrollContainer + { + RelativeSizeAxes = Axes.Both + }); + } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index ee906caa9b..1200276027 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -85,6 +85,7 @@ +