namespace SheetMe.Core.Models; /// /// 레거시 서식 XML의 Property 값 변형(variant) 기본형. /// 레거시 직렬화기(clsBasicDesignerLoader.WriteValue)가 만들어내는 5가지 형태 + 빈 값(Null)을 /// 원형 그대로 보존해 무손실 왕복을 보장한다. /// public abstract class LegacyPropValue { /// 텍스트 값 — <Property>text</Property> (TypeConverter invariant 문자열) public sealed class TextValue : LegacyPropValue { /// 속성 문자열 값 public string Value { get; set; } = string.Empty; public TextValue() { } public TextValue(string value) => Value = value; public override LegacyPropValue Clone() => new TextValue(Value); } /// 빈 값 — <Property /> 또는 내용 없는 요소 (로더에서 null 로 설정됨) public sealed class NullValue : LegacyPropValue { public override LegacyPropValue Clone() => new NullValue(); } /// 중첩 속성 — Content 직렬화 속성의 자식 <Property> 목록 (예: DataBindings) public sealed class NestedValue : LegacyPropValue { /// 자식 Property 가방 public PropBag Children { get; set; } = new(); public override LegacyPropValue Clone() => new NestedValue { Children = Children.Clone() }; } /// 컬렉션 항목 — Content IList 속성의 <Item type="AQN"> 목록 (예: ComboBox Items) public sealed class ItemsValue : LegacyPropValue { /// 항목 목록 public List Items { get; set; } = new(); public override LegacyPropValue Clone() { var clone = new ItemsValue(); foreach (var item in Items) { clone.Items.Add(new LegacyItem { Aqn = item.Aqn, Value = item.Value.Clone() }); } return clone; } } /// 바이너리 값 — <Binary>base64</Binary> (BinaryFormatter/Byte[] 직렬화 잔재, verbatim 보존) public sealed class BinaryValue : LegacyPropValue { /// base64 원문 public string Base64 { get; set; } = string.Empty; public override LegacyPropValue Clone() => new BinaryValue { Base64 = Base64 }; } /// 컴포넌트 참조 — <Reference name="..." /> (같은 호스트 내 사이트 참조) public sealed class ReferenceValue : LegacyPropValue { /// 참조 대상 컴포넌트 이름 public string Name { get; set; } = string.Empty; public override LegacyPropValue Clone() => new ReferenceValue { Name = Name }; } /// 깊은 복제 public abstract LegacyPropValue Clone(); } /// Content IList 속성의 항목 1개 — <Item type="AQN">값</Item> public sealed class LegacyItem { /// 항목 타입의 AssemblyQualifiedName 원문 public string Aqn { get; set; } = string.Empty; /// 항목 값(대개 TextValue) public LegacyPropValue Value { get; set; } = new LegacyPropValue.NullValue(); }