Files
Lattice/Lattice.UI.Docking/Abstractions/IDockGroupControl.cs
2026-01-18 16:33:35 +03:00

108 lines
4.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Lattice.Core.Docking.Models;
namespace Lattice.UI.Docking.Abstractions;
/// <summary>
/// Определяет контракт для UI-контрола, который отображает группу разделения (DockGroup).
/// Этот контрол управляет отображением двух дочерних элементов с разделителем между ними.
/// </summary>
/// <remarks>
/// Реализации этого интерфейса должны обеспечивать возможность изменения соотношения сторон
/// через перетаскивание разделителя и корректное отображение ориентации разделения.
/// </remarks>
public interface IDockGroupControl : IDockControl
{
/// <summary>
/// Получает или задает ориентацию разделения группы.
/// </summary>
/// <value>
/// Направление разделения (горизонтальное или вертикальное).
/// </value>
SplitDirection Orientation { get; set; }
/// <summary>
/// Получает или задает соотношение разделения между первым и вторым элементами.
/// </summary>
/// <value>
/// Значение от 0.0 до 1.0, где 0.5 означает равное разделение.
/// </value>
double SplitRatio { get; set; }
/// <summary>
/// Получает или задает минимальный размер разделителя.
/// </summary>
/// <value>
/// Минимальный размер разделителя в пикселях.
/// </value>
double SplitterSize { get; set; }
/// <summary>
/// Получает контрол для первого дочернего элемента.
/// </summary>
/// <value>
/// Контрол, отображающий первый дочерний элемент.
/// </value>
IDockControl? FirstChild { get; }
/// <summary>
/// Получает контрол для второго дочернего элемента.
/// </summary>
/// <value>
/// Контрол, отображающий второй дочерний элемент.
/// </value>
IDockControl? SecondChild { get; }
/// <summary>
/// Устанавливает дочерние контролы для отображения.
/// </summary>
/// <param name="firstChild">Контрол для первого элемента.</param>
/// <param name="secondChild">Контрол для второго элемента.</param>
void SetChildren(IDockControl? firstChild, IDockControl? secondChild);
/// <summary>
/// Событие, возникающее при изменении соотношения разделения.
/// </summary>
event EventHandler<SplitRatioChangedEventArgs> SplitRatioChanged;
}
/// <summary>
/// Аргументы события изменения соотношения разделения.
/// </summary>
public class SplitRatioChangedEventArgs : EventArgs
{
/// <summary>
/// Новое соотношение разделения.
/// </summary>
public double NewRatio { get; }
/// <summary>
/// Источник изменения (пользователь или программа).
/// </summary>
public SplitRatioChangeSource Source { get; }
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="SplitRatioChangedEventArgs"/>.
/// </summary>
/// <param name="newRatio">Новое соотношение разделения.</param>
/// <param name="source">Источник изменения.</param>
public SplitRatioChangedEventArgs(double newRatio, SplitRatioChangeSource source)
{
NewRatio = newRatio;
Source = source;
}
}
/// <summary>
/// Источник изменения соотношения разделения.
/// </summary>
public enum SplitRatioChangeSource
{
/// <summary>Изменение выполнено пользователем.</summary>
User,
/// <summary>Изменение выполнено программой.</summary>
Programmatic,
/// <summary>Изменение выполнено при восстановлении состояния.</summary>
Restore
}