150 lines
4.3 KiB
C#
150 lines
4.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Windows;
|
|
using System.Windows.Data;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using FontAwesome.Sharp;
|
|
|
|
namespace Pf2eDataScrapper.WPF.EntityViewer.EntityViewStructure;
|
|
|
|
internal class StructureRow : INotifyPropertyChanged
|
|
{
|
|
/// <summary>
|
|
/// Отображаемая строка поля сущности.
|
|
/// </summary>
|
|
public StructureField Field { get; }
|
|
|
|
/// <summary>
|
|
/// Список типов лестницы.
|
|
/// </summary>
|
|
public List<LadderType> Ladder { get; set; } = [];
|
|
|
|
/// <summary>
|
|
/// Флаг наличия кнопки.
|
|
/// </summary>
|
|
public bool HasButton => Field.FieldType == StructureFieldType.Complex;
|
|
|
|
/// <summary>
|
|
/// Флаг, указывающий, отображается ли строка.
|
|
/// </summary>
|
|
public bool Visible => Field.Visible;
|
|
|
|
/// <summary>
|
|
/// Флаг, указывающий, отображается ли строка.
|
|
/// </summary>
|
|
public Visibility ItemVisibility => Visible ? Visibility.Visible : Visibility.Collapsed;
|
|
|
|
/// <summary>
|
|
/// Флаг, указывающий, отображается ли строка.
|
|
/// </summary>
|
|
public Visibility ButtonVisibility => HasButton ? Visibility.Visible : Visibility.Collapsed;
|
|
|
|
/// <summary>
|
|
/// Иконка кнопки.
|
|
/// </summary>
|
|
public string ButtonIcon => HasButton && !((StructureFieldComplex)Field).Collapsed ? IconChar.PlusSquare.ToChar() : IconChar.MinusSquare.ToChar();
|
|
|
|
/// <summary>
|
|
/// Глубина отображения поля.
|
|
/// </summary>
|
|
public int Depth => Field.Depth;
|
|
|
|
/// <summary>
|
|
/// Строковое представление названия поля.
|
|
/// </summary>
|
|
public string Name => Field.Name;
|
|
|
|
/// <summary>
|
|
/// Строковое представление типа поля.
|
|
/// </summary>
|
|
public string Type
|
|
{
|
|
get
|
|
{
|
|
string result = Field.GetTypeString();
|
|
if (result != "")
|
|
{
|
|
result = $@"({result})";
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Строковое представление значения поля.
|
|
/// </summary>
|
|
public string Value => Field.GetValueString();
|
|
|
|
/// <summary>
|
|
/// Команда переключения.
|
|
/// </summary>
|
|
public ICommand CollapseCommand { get; }
|
|
|
|
/// <summary>
|
|
/// Кониструктор класса <see cref="StructureRow"/>.
|
|
/// </summary>
|
|
/// <param name="field">Поле.</param>
|
|
public StructureRow(StructureField field)
|
|
{
|
|
Field = field;
|
|
CollapseCommand = new CollapseCommand(this);
|
|
|
|
Field.PropertyChanged += Field_PropertyChanged;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="obj"></param>
|
|
private void Field_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
|
{
|
|
OnPropertyChanged(nameof(Field));
|
|
OnPropertyChanged(nameof(Visible));
|
|
OnPropertyChanged(nameof(ItemVisibility));
|
|
OnPropertyChanged(nameof(ButtonVisibility));
|
|
OnPropertyChanged(nameof(ButtonIcon));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Событие изменения поля.
|
|
/// </summary>
|
|
public event Action<StructureRow, StructureField>? OnChange;
|
|
|
|
/// <summary>
|
|
/// Изменение поля.
|
|
/// </summary>
|
|
public event PropertyChangedEventHandler? PropertyChanged;
|
|
|
|
/// <summary>
|
|
/// При изменении поля.
|
|
/// </summary>
|
|
/// <param name="propertyName">Название поля.</param>
|
|
protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
|
|
{
|
|
PropertyChanged?.Invoke(this, new(propertyName));
|
|
}
|
|
}
|
|
|
|
internal class CollapseCommand(StructureRow structureRow) : ICommand
|
|
{
|
|
private StructureRow StructureRow { get; } = structureRow;
|
|
|
|
public event EventHandler? CanExecuteChanged;
|
|
|
|
public bool CanExecute(object? parameter)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public void Execute(object? parameter)
|
|
{
|
|
var field = (StructureFieldComplex)StructureRow.Field;
|
|
field.Collapsed = !field.Collapsed;
|
|
}
|
|
}
|