Files
Lattice/Lattice.UI.Docking/Abstractions/IDockGroupControl.cs
2026-01-27 06:07:15 +03:00

114 lines
4.6 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
}