// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. #nullable disable using System; using System.Linq; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Localisation; using osu.Game.Graphics; using osu.Game.Localisation; using osu.Game.Online.API.Requests.Responses; using osu.Game.Resources.Localisation.Web; namespace osu.Game.Overlays.Wiki { public partial class WikiHeader : BreadcrumbControlOverlayHeader { private const string index_path = "Main_Page"; public static LocalisableString IndexPageString => LayoutStrings.HeaderHelpIndex; public readonly Bindable WikiPageData = new Bindable(); public Action ShowIndexPage; public Action ShowParentPage; public WikiHeader() { TabControl.AddItem(IndexPageString); Current.Value = IndexPageString; WikiPageData.BindValueChanged(onWikiPageChange); Current.BindValueChanged(onCurrentChange); } private void onWikiPageChange(ValueChangedEvent e) { if (e.NewValue == null) return; TabControl.Clear(); Current.Value = null; TabControl.AddItem(IndexPageString); if (e.NewValue.Path == index_path) { Current.Value = IndexPageString; return; } if (e.NewValue.Subtitle != null) TabControl.AddItem(e.NewValue.Subtitle); TabControl.AddItem(e.NewValue.Title); Current.Value = e.NewValue.Title; } private void onCurrentChange(ValueChangedEvent e) { if (e.NewValue == TabControl.Items.LastOrDefault()) return; if (e.NewValue == IndexPageString) { ShowIndexPage?.Invoke(); return; } ShowParentPage?.Invoke(); } protected override Drawable CreateBackground() => new OverlayHeaderBackground(@"Headers/wiki"); protected override OverlayTitle CreateTitle() => new WikiHeaderTitle(); private partial class WikiHeaderTitle : OverlayTitle { public WikiHeaderTitle() { Title = PageTitleStrings.MainWikiControllerDefault; Description = NamedOverlayComponentStrings.WikiDescription; Icon = HexaconsIcons.Wiki; } } } }