Документация проекта отображения.

This commit is contained in:
2025-05-10 18:05:09 +04:00
parent 54ef2cf331
commit 1a977ee988
8 changed files with 767 additions and 38 deletions
@@ -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
}