Files
Lattice/Lattice.Core.Docking/Models/AutoHidePanel.cs
2026-02-01 09:26:13 +03:00

83 lines
3.1 KiB
C#

using Lattice.Core.Docking.Abstractions;
namespace Lattice.Core.Docking.Models;
/// <summary>
/// Представляет автоскрываемую панель, которая может быть прикреплена к одной из сторон окна.
/// Автоскрываемые панели скрываются, оставляя видимой только заголовок, и разворачиваются при наведении курсора или клике.
/// </summary>
public class AutoHidePanel
{
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="AutoHidePanel"/>.
/// </summary>
/// <param name="content">Содержимое панели.</param>
/// <param name="side">Сторона окна для прикрепления панели.</param>
/// <exception cref="ArgumentNullException">Выбрасывается, когда <paramref name="content"/> равен null.</exception>
public AutoHidePanel(IDockContent content, DockSide side)
{
Content = content ?? throw new ArgumentNullException(nameof(content));
Side = side;
}
/// <summary>
/// Получает уникальный идентификатор панели.
/// </summary>
public string Id { get; } = Guid.NewGuid().ToString();
/// <summary>
/// Получает содержимое панели.
/// </summary>
public IDockContent Content { get; }
/// <summary>
/// Получает или задает сторону окна, к которой прикреплена панель.
/// </summary>
public DockSide Side { get; set; }
/// <summary>
/// Получает или задает размер панели в пикселях.
/// Для левой/правой сторон - ширина, для верхней/нижней - высота.
/// </summary>
public double Size { get; set; } = 300;
/// <summary>
/// Получает или задает значение, указывающее, видима ли панель.
/// </summary>
public bool IsVisible { get; set; }
/// <summary>
/// Получает или задает смещение для анимации выезда/заезда панели.
/// Значение от 0.0 (полностью скрыта) до 1.0 (полностью развернута).
/// </summary>
public double SlideOffset { get; set; }
/// <summary>
/// Получает заголовок панели, взятый из содержимого.
/// </summary>
public string Title => Content?.Title ?? "Auto-hide Panel";
/// <summary>
/// Переключает видимость панели.
/// </summary>
public void Toggle()
{
IsVisible = !IsVisible;
}
/// <summary>
/// Показывает панель.
/// </summary>
public void Show()
{
IsVisible = true;
}
/// <summary>
/// Скрывает панель.
/// </summary>
public void Hide()
{
IsVisible = false;
}
}