Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XElementAttributePropertyDescriptor.cs
Go to the documentation of this file.
1using System;
3
5
6internal sealed class XElementAttributePropertyDescriptor : XPropertyDescriptor<XElement, object>
7{
9
11
13 : base("Attribute")
14 {
15 }
16
17 public override object GetValue(object component)
18 {
19 return _value = new XDeferredSingleton<XAttribute>((XElement e, XName n) => e.Attribute(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 XAttribute xAttribute2 && _value.element == xAttribute2.Parent && _value.name == xAttribute2.Name)
32 {
33 OnValueChanged(_value.element, EventArgs.Empty);
34 }
35 break;
36 case XObjectChange.Remove:
37 if (sender is XAttribute xAttribute && _changeState == xAttribute)
38 {
39 _changeState = null;
40 OnValueChanged(_value.element, EventArgs.Empty);
41 }
42 break;
43 }
44 }
45
46 protected override void OnChanging(object sender, XObjectChangeEventArgs args)
47 {
48 if (_value != null)
49 {
50 XObjectChange objectChange = args.ObjectChange;
51 if (objectChange == XObjectChange.Remove)
52 {
53 XAttribute xAttribute = sender as XAttribute;
54 _changeState = ((xAttribute != null && _value.element == xAttribute.Parent && _value.name == xAttribute.Name) ? xAttribute : null);
55 }
56 }
57 }
58}
static readonly EventArgs Empty
Definition EventArgs.cs:9
XAttribute? Attribute(XName name)
Definition XElement.cs:218