Документация проекта отображения.
This commit is contained in:
@@ -1,10 +1,17 @@
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Pf2eViewer.EntityTreeViewer;
|
||||
|
||||
/// <summary>
|
||||
/// Элемент управления для отображения структуры сущности.
|
||||
/// </summary>
|
||||
public sealed partial class EntityTreeViewerControl : UserControl
|
||||
{
|
||||
#region "Поля элемента управления"
|
||||
|
||||
/// <summary>
|
||||
/// Высота строки поля структуры.
|
||||
/// </summary>
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
||||
[Category("Entity Render")]
|
||||
[Description("The height of each item in the tree view.")]
|
||||
@@ -19,6 +26,9 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
}
|
||||
private int _itemHeight = 20;
|
||||
|
||||
/// <summary>
|
||||
/// Сущность, которая будет отображаться в элементе управления.
|
||||
/// </summary>
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
[Browsable(false)]
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
@@ -33,6 +43,9 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
}
|
||||
private EntityView? _entityView;
|
||||
|
||||
/// <summary>
|
||||
/// Ширина отступа глубины.
|
||||
/// </summary>
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
||||
[Category("Entity Render")]
|
||||
[Description("The size of tab.")]
|
||||
@@ -47,6 +60,9 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
}
|
||||
private int _depthSize = 20;
|
||||
|
||||
/// <summary>
|
||||
/// Размер шрифта типа поля сущности.
|
||||
/// </summary>
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
||||
[Category("Entity Render")]
|
||||
[Description("The size of tab.")]
|
||||
@@ -61,6 +77,9 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
}
|
||||
private float _typeFontSize = 9.5f;
|
||||
|
||||
/// <summary>
|
||||
/// Размер кнопки плюс/минус.
|
||||
/// </summary>
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
||||
[Category("Entity Render")]
|
||||
[Description("The size of plus/minus button.")]
|
||||
@@ -75,11 +94,17 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
}
|
||||
private int _buttonSize = 20;
|
||||
|
||||
/// <summary>
|
||||
/// Ширина имени поля сущности.
|
||||
/// </summary>
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
[Browsable(false)]
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public int NameWidth { get; private set; } = 200;
|
||||
|
||||
/// <summary>
|
||||
/// Цвет фона строки поля при наведении на элемент управления.
|
||||
/// </summary>
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
||||
[Category("Entity Render")]
|
||||
[Description("Color on item hover.")]
|
||||
@@ -94,21 +119,50 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
}
|
||||
private Color _hoverColor = SystemColors.ControlDark;
|
||||
|
||||
[Browsable(false)]
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public int ContentWidth => Width - SystemInformation.VerticalScrollBarWidth - 2;
|
||||
|
||||
private readonly List<StructureField> _rows = [];
|
||||
|
||||
private List<EntityTreeViewerControlRow> _viewerRows = [];
|
||||
|
||||
private bool _rendering;
|
||||
|
||||
/// <summary>
|
||||
/// Изображение, используемое для отображения содержимого элемента управления.
|
||||
/// </summary>
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
[Browsable(false)]
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public Bitmap ContentImage { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region "Вычисляемые поля"
|
||||
|
||||
/// <summary>
|
||||
/// Ширина области содержимого элемента управления.
|
||||
/// </summary>
|
||||
[Browsable(false)]
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public int ContentWidth => Width - SystemInformation.VerticalScrollBarWidth - 2;
|
||||
|
||||
#endregion
|
||||
|
||||
#region "Приватные поля"
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция полей структуры.
|
||||
/// </summary>
|
||||
private readonly List<StructureField> _rows = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция строк полей структуры, которые будут отображаться в элементе управления.
|
||||
/// </summary>
|
||||
private List<EntityTreeViewerControlRow> _viewerRows = [];
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, что элемент управления в данный момент перерисовывается.
|
||||
/// </summary>
|
||||
private bool _rendering;
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор класса <see cref="EntityTreeViewerControl"/>.
|
||||
/// </summary>
|
||||
public EntityTreeViewerControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -120,6 +174,11 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
ContentPanel.MouseWheel += ContentPanel_MouseWheel;
|
||||
}
|
||||
|
||||
#region "Методы обновления"
|
||||
|
||||
/// <summary>
|
||||
/// Обновление данных в элементе управления.
|
||||
/// </summary>
|
||||
public void UpdateData()
|
||||
{
|
||||
if (EntityView?.Entity is null)
|
||||
@@ -148,6 +207,9 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
UpdateRenders();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обновление отрисовок в элементе управления.
|
||||
/// </summary>
|
||||
public void UpdateRenders()
|
||||
{
|
||||
int maxNameWidth = -1;
|
||||
@@ -171,6 +233,9 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
UpdateView();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обновление отображения в элементе управления.
|
||||
/// </summary>
|
||||
public void UpdateView()
|
||||
{
|
||||
_viewerRows.ForEach(row => row.UpdateButton());
|
||||
@@ -203,6 +268,14 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
_rendering = false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region "Вспомогательные методы"
|
||||
|
||||
/// <summary>
|
||||
/// Построение лестницы для строк полей структуры.
|
||||
/// </summary>
|
||||
/// <param name="rows">Набор строк полей структуры.</param>
|
||||
private void BuildLadder(List<EntityTreeViewerControlRow> rows)
|
||||
{
|
||||
List<LadderType> lastLadder = [];
|
||||
@@ -248,8 +321,15 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
}
|
||||
}
|
||||
|
||||
// Events
|
||||
#endregion
|
||||
|
||||
#region "События элемента управления"
|
||||
|
||||
/// <summary>
|
||||
/// Обработчик события изменения размера элемента управления.
|
||||
/// </summary>
|
||||
/// <param name="sender">Источник события.</param>
|
||||
/// <param name="e">Объект события.</param>
|
||||
private void EntityTreeViewerControl_Resize(object sender, EventArgs e)
|
||||
{
|
||||
if (_rendering)
|
||||
@@ -262,6 +342,11 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
UpdateRenders();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обработчик события прокрутки элемента управления.
|
||||
/// </summary>
|
||||
/// <param name="sender">Источник события.</param>
|
||||
/// <param name="e">Объект события.</param>
|
||||
private void ContentPanel_MouseWheel(object? sender, MouseEventArgs e)
|
||||
{
|
||||
/*
|
||||
@@ -281,6 +366,11 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
*/
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обработчик события движения мыши над элементом управления.
|
||||
/// </summary>
|
||||
/// <param name="sender">Источник события.</param>
|
||||
/// <param name="e">Объект события.</param>
|
||||
private void ContentPanel_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
PointF p = new(e.X, e.Y);
|
||||
@@ -299,4 +389,6 @@ public sealed partial class EntityTreeViewerControl : UserControl
|
||||
row.Hovered = contained;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user