Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XElementDescendantsPropertyDescriptor.cs
Go to the documentation of this file.
1using System;
4
6
7internal sealed class XElementDescendantsPropertyDescriptor : XPropertyDescriptor<XElement, IEnumerable<XElement>>
8{
10
12
14 : base("Descendants")
15 {
16 }
17
18 public override object GetValue(object component)
19 {
20 return _value = new XDeferredAxis<XElement>((XElement e, XName n) => (!(n != null)) ? e.Descendants() : e.Descendants(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:
33 if (sender is XElement xElement2 && (_value.name == xElement2.Name || _value.name == null))
34 {
35 OnValueChanged(_value.element, EventArgs.Empty);
36 }
37 break;
38 case XObjectChange.Name:
39 if (sender is XElement xElement && _value.element != xElement && _value.name != null && (_value.name == xElement.Name || _value.name == _changeState))
40 {
41 _changeState = null;
42 OnValueChanged(_value.element, EventArgs.Empty);
43 }
44 break;
45 }
46 }
47
48 protected override void OnChanging(object sender, XObjectChangeEventArgs args)
49 {
50 if (_value != null)
51 {
52 XObjectChange objectChange = args.ObjectChange;
53 if (objectChange == XObjectChange.Name)
54 {
55 _changeState = (sender as XElement)?.Name;
56 }
57 }
58 }
59}
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 > Descendants()