Больше измнений
This commit is contained in:
@@ -36,7 +36,7 @@ internal class StructureBuilder
|
||||
|
||||
public void CompleteProcessed(object value, StructureFieldComplex field)
|
||||
{
|
||||
var q = _processedObjects.FirstOrDefault(p => p.Value == value);
|
||||
StructureProcessedObject? q = _processedObjects.FirstOrDefault(p => p.Value == value);
|
||||
|
||||
if (q == null)
|
||||
{
|
||||
@@ -59,6 +59,9 @@ internal class StructureBuilder
|
||||
case StructureFieldType.Enum:
|
||||
return new StructureFieldEnum(this, value!, name, depth);
|
||||
|
||||
case StructureFieldType.Reference:
|
||||
break;
|
||||
|
||||
case StructureFieldType.Complex:
|
||||
default:
|
||||
|
||||
@@ -66,15 +69,22 @@ internal class StructureBuilder
|
||||
p.Value == value
|
||||
);
|
||||
|
||||
if (processed is not null)
|
||||
if (processed is null)
|
||||
{
|
||||
var reference = new StructureFieldReference(this, name, null, depth);
|
||||
processed.AddReference(reference);
|
||||
return reference;
|
||||
return Create(name, value!, depth);
|
||||
}
|
||||
|
||||
return Create(name, value!, depth);
|
||||
StructureFieldReference reference = new StructureFieldReference(
|
||||
this,
|
||||
name,
|
||||
null,
|
||||
depth
|
||||
);
|
||||
processed.AddReference(reference);
|
||||
return reference;
|
||||
}
|
||||
|
||||
throw new("Impossible");
|
||||
}
|
||||
|
||||
public static StructureFieldType GetFieldType(object? value)
|
||||
@@ -112,7 +122,7 @@ internal class StructureProcessedObject(object value)
|
||||
set
|
||||
{
|
||||
_field = value;
|
||||
foreach (var reference in _references)
|
||||
foreach (StructureFieldReference reference in _references)
|
||||
{
|
||||
reference.Reference = Field;
|
||||
}
|
||||
@@ -158,7 +168,7 @@ internal abstract class StructureField(StructureBuilder builder, string name, in
|
||||
|
||||
public virtual bool Visible { get; set; } = true;
|
||||
|
||||
public int Depth = depth;
|
||||
public readonly int Depth = depth;
|
||||
|
||||
public abstract string GetTypeString();
|
||||
|
||||
@@ -166,7 +176,13 @@ internal abstract class StructureField(StructureBuilder builder, string name, in
|
||||
|
||||
public virtual ICollection<EntityTreeViewerRow> GetTextRows(EntityTreeViewerControl control)
|
||||
{
|
||||
return [new EntityTreeViewerRow(control, this)];
|
||||
return [new(control, this)];
|
||||
}
|
||||
|
||||
public virtual ICollection<T> GetRows<T>(Func<StructureField, T> func)
|
||||
{
|
||||
StructureField[] q = [this];
|
||||
return q.Select(func).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,7 +205,7 @@ internal class StructureFieldPrimitive(
|
||||
{
|
||||
public override StructureFieldType FieldType => StructureFieldType.Primitive;
|
||||
|
||||
public object Value = value;
|
||||
public readonly object Value = value;
|
||||
|
||||
public readonly Type Type = value.GetType();
|
||||
|
||||
@@ -221,7 +237,7 @@ internal class StructureFieldEnum(StructureBuilder builder, object value, string
|
||||
{
|
||||
public override StructureFieldType FieldType => StructureFieldType.Enum;
|
||||
|
||||
public object Value = value;
|
||||
public readonly object Value = value;
|
||||
|
||||
public readonly Type Type = value.GetType();
|
||||
|
||||
@@ -238,8 +254,6 @@ internal class StructureFieldComplex : StructureField
|
||||
|
||||
public readonly Type Type;
|
||||
|
||||
private bool _collapsed = false;
|
||||
|
||||
public bool Collapsed
|
||||
{
|
||||
get => _collapsed;
|
||||
@@ -249,16 +263,7 @@ internal class StructureFieldComplex : StructureField
|
||||
UpdateFieldVisibility();
|
||||
}
|
||||
}
|
||||
|
||||
private bool _visible = true;
|
||||
|
||||
public StructureFieldComplex(StructureBuilder builder, object value, string name, int depth)
|
||||
: base(builder, name, depth)
|
||||
{
|
||||
Type = value.GetType();
|
||||
|
||||
SetFields((dynamic)value);
|
||||
}
|
||||
private bool _collapsed = false;
|
||||
|
||||
public override bool Visible
|
||||
{
|
||||
@@ -269,10 +274,19 @@ internal class StructureFieldComplex : StructureField
|
||||
UpdateFieldVisibility();
|
||||
}
|
||||
}
|
||||
private bool _visible = true;
|
||||
|
||||
public StructureFieldComplex(StructureBuilder builder, object value, string name, int depth)
|
||||
: base(builder, name, depth)
|
||||
{
|
||||
Type = value.GetType();
|
||||
|
||||
SetFields((dynamic)value);
|
||||
}
|
||||
|
||||
private void UpdateFieldVisibility()
|
||||
{
|
||||
foreach (var field in Fields)
|
||||
foreach (StructureField field in Fields)
|
||||
{
|
||||
field.Visible = Visible && !Collapsed;
|
||||
}
|
||||
@@ -280,24 +294,22 @@ internal class StructureFieldComplex : StructureField
|
||||
|
||||
private void SetFields(LocaleString localeString)
|
||||
{
|
||||
List<FieldRecord> records = [];
|
||||
|
||||
foreach (var field in localeString)
|
||||
{
|
||||
records.Add(new FieldRecord(field.Locale.ToString(), field.Value));
|
||||
}
|
||||
|
||||
SetFieldsFromRecords(records);
|
||||
SetFieldsFromRecords(
|
||||
localeString
|
||||
.Select(field => new FieldRecord(field.Locale.ToString(), field.Value))
|
||||
.ToList()
|
||||
);
|
||||
}
|
||||
|
||||
private void SetFields(IEnumerable enumrable)
|
||||
private void SetFields(IEnumerable enumerable)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
List<FieldRecord> records = [];
|
||||
|
||||
foreach (var item in enumrable)
|
||||
foreach (object? item in enumerable)
|
||||
{
|
||||
records.Add(new FieldRecord($"[{i++}]", item));
|
||||
records.Add(new($"[{i++}]", item));
|
||||
}
|
||||
|
||||
SetFieldsFromRecords(records);
|
||||
@@ -320,24 +332,22 @@ internal class StructureFieldComplex : StructureField
|
||||
|
||||
private void SetFieldsFromRecords(List<FieldRecord> records)
|
||||
{
|
||||
foreach (FieldRecord record in records)
|
||||
foreach (
|
||||
FieldRecord record in records.Where(record =>
|
||||
record.FieldType == StructureFieldType.Complex
|
||||
)
|
||||
)
|
||||
{
|
||||
if (record.FieldType == StructureFieldType.Complex)
|
||||
{
|
||||
record.Allowed = Builder.RegisterProcessed(record.Value!);
|
||||
}
|
||||
record.Allowed = Builder.RegisterProcessed(record.Value!);
|
||||
}
|
||||
|
||||
foreach (var record in records)
|
||||
foreach (FieldRecord record in records)
|
||||
{
|
||||
if (record.FieldType == StructureFieldType.Complex && record.Allowed)
|
||||
{
|
||||
Fields.Add(Builder.Create(record.Name, record.Value!, Depth + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
Fields.Add(Builder.Resolve(record.Name, record.Value!, Depth + 1));
|
||||
}
|
||||
Fields.Add(
|
||||
record is { FieldType: StructureFieldType.Complex, Allowed: true }
|
||||
? Builder.Create(record.Name, record.Value!, Depth + 1)
|
||||
: Builder.Resolve(record.Name, record.Value!, Depth + 1)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,11 +360,16 @@ internal class StructureFieldComplex : StructureField
|
||||
return rows;
|
||||
}
|
||||
|
||||
public override ICollection<T> GetRows<T>(Func<StructureField, T> func)
|
||||
{
|
||||
return [.. base.GetRows(func), .. Fields.SelectMany(f => f.GetRows(func)).ToList()];
|
||||
}
|
||||
|
||||
private class FieldRecord(string name, object? value)
|
||||
{
|
||||
public string Name = name;
|
||||
public readonly string Name = name;
|
||||
|
||||
public object? Value = value;
|
||||
public readonly object? Value = value;
|
||||
|
||||
public StructureFieldType FieldType => StructureBuilder.GetFieldType(Value);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user