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