2020-06-19 16:28:35 +08:00
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
2022-06-17 15:37:17 +08:00
#nullable disable
2020-06-19 16:28:35 +08:00
using System ;
using osu.Framework.Graphics.Containers ;
namespace osu.Game.Screens.Ranking
{
2020-06-19 20:41:48 +08:00
/// <summary>
/// A <see cref="CompositeDrawable"/> which tracks the size of a <see cref="ScorePanel"/>, to which the <see cref="ScorePanel"/> can be added or removed.
/// </summary>
2020-06-19 16:28:35 +08:00
public class ScorePanelTrackingContainer : CompositeDrawable
{
2020-06-19 20:41:48 +08:00
/// <summary>
/// The <see cref="ScorePanel"/> that created this <see cref="ScorePanelTrackingContainer"/>.
/// </summary>
2020-06-19 16:28:35 +08:00
public readonly ScorePanel Panel ;
2020-06-19 20:41:48 +08:00
internal ScorePanelTrackingContainer ( ScorePanel panel )
2020-06-19 16:28:35 +08:00
{
Panel = panel ;
Attach ( ) ;
}
2020-06-19 20:41:48 +08:00
/// <summary>
/// Detaches the <see cref="ScorePanel"/> from this <see cref="ScorePanelTrackingContainer"/>, removing it as a child.
/// This <see cref="ScorePanelTrackingContainer"/> will continue tracking any size changes.
/// </summary>
/// <exception cref="InvalidOperationException">If the <see cref="ScorePanel"/> is already detached.</exception>
2020-06-19 16:28:35 +08:00
public void Detach ( )
{
if ( InternalChildren . Count = = 0 )
throw new InvalidOperationException ( "Score panel container is not attached." ) ;
2022-08-29 14:49:28 +08:00
RemoveInternal ( Panel , false ) ;
2020-06-19 16:28:35 +08:00
}
2020-06-19 20:41:48 +08:00
/// <summary>
/// Attaches the <see cref="ScorePanel"/> to this <see cref="ScorePanelTrackingContainer"/>, adding it as a child.
/// </summary>
/// <exception cref="InvalidOperationException">If the <see cref="ScorePanel"/> is already attached.</exception>
2020-06-19 16:28:35 +08:00
public void Attach ( )
{
if ( InternalChildren . Count > 0 )
throw new InvalidOperationException ( "Score panel container is already attached." ) ;
AddInternal ( Panel ) ;
}
}
}