108 lines
4.5 KiB
C#
108 lines
4.5 KiB
C#
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
|
||
} |