Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XElementElementsPropertyDescriptor.cs
Go to the documentation of this file.
1using System;
4
6
7internal sealed class XElementElementsPropertyDescriptor : XPropertyDescriptor<XElement, IEnumerable<XElement>>
8{
10
11 private object _changeState;
12
14 : base("Elements")
15 {
16 }
17
18 public override object GetValue(object component)
19 {
20 return _value = new XDeferredAxis<XElement>((XElement e, XName n) => (!(n != null)) ? e.Elements() : e.Elements(n), component as XElement, null);
21 }
22
23 protected override void OnChanged(object sender, XObjectChangeEventArgs args)
24 {
25 if (_value == null)
26 {
27 return;
28 }
29 switch (args.ObjectChange)
30 {
31 case XObjectChange.Add:
32 if (sender is XElement xElement3 && _value.element == xElement3.Parent && (_value.name == xElement3.Name || _value.name == null))
33 {
34 OnValueChanged(_value.element, EventArgs.Empty);
35 }
36 break;
37 case XObjectChange.Remove:
38 if (sender is XElement xElement2 && _value.element == _changeState as XContainer && (_value.name == xElement2.Name || _value.name == null))
39 {
40 _changeState = null;
41 OnValueChanged(_value.element, EventArgs.Empty);
42 }
43 break;
44 case XObjectChange.Name:
45 if (sender is XElement xElement && _value.element == xElement.Parent && _value.name != null && (_value.name == xElement.Name || _value.name == _changeState as XName))
46 {
47 _changeState = null;
48 OnValueChanged(_value.element, EventArgs.Empty);
49 }
50 break;
51 }
52 }
53
54 protected override void OnChanging(object sender, XObjectChangeEventArgs args)
55 {
56 if (_value != null)
57 {
58 switch (args.ObjectChange)
59 {
61 _changeState = (sender as XElement)?.Parent;
62 break;
63 case XObjectChange.Name:
64 _changeState = (sender as XElement)?.Name;
65 break;
66 }
67 }
68 }
69}
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
void Add(TKey key, TValue value)
static readonly EventArgs Empty
Definition EventArgs.cs:9
IEnumerable< XElement > Elements()