0
|
1 using System;
|
|
2 using System.Collections;
|
|
3 using System.Reflection;
|
|
4
|
|
5 using BLToolkit.TypeBuilder;
|
|
6
|
|
7 namespace BLToolkit.EditableObjects
|
|
8 {
|
|
9 [Serializable]
|
|
10 public struct EditableValue<T>: IEditable, IMemberwiseEditable, IPrintDebugState
|
|
11 {
|
|
12 private T _original;
|
|
13 private T _current;
|
|
14
|
|
15 public EditableValue(T value)
|
|
16 {
|
|
17 _original = value;
|
|
18 _current = value;
|
|
19 }
|
|
20
|
|
21 [GetValue, SetValue]
|
|
22 public T Value
|
|
23 {
|
|
24 get { return _current; }
|
|
25 set { _current = value; }
|
|
26 }
|
|
27
|
|
28 #region IEditable Members
|
|
29
|
|
30 public void AcceptChanges()
|
|
31 {
|
|
32 _original = _current;
|
|
33 }
|
|
34
|
|
35 public void RejectChanges()
|
|
36 {
|
|
37 _current = _original;
|
|
38 }
|
|
39
|
|
40 public bool IsDirty
|
|
41 {
|
|
42 get
|
|
43 {
|
|
44 object o = _original;
|
|
45 object c = _current;
|
|
46
|
|
47 return o == null? c != null: o.Equals(c) == false;
|
|
48 }
|
|
49 }
|
|
50
|
|
51 #endregion
|
|
52
|
|
53 #region IMemberwiseEditable Members
|
|
54
|
|
55 public bool AcceptMemberChanges(PropertyInfo propertyInfo, string memberName)
|
|
56 {
|
|
57 if (memberName != propertyInfo.Name)
|
|
58 return false;
|
|
59
|
|
60 AcceptChanges();
|
|
61
|
|
62 return true;
|
|
63 }
|
|
64
|
|
65 public bool RejectMemberChanges(PropertyInfo propertyInfo, string memberName)
|
|
66 {
|
|
67 if (memberName != propertyInfo.Name)
|
|
68 return false;
|
|
69
|
|
70 RejectChanges();
|
|
71
|
|
72 return true;
|
|
73 }
|
|
74
|
|
75 public bool IsDirtyMember(PropertyInfo propertyInfo, string memberName, ref bool isDirty)
|
|
76 {
|
|
77 if (memberName != propertyInfo.Name)
|
|
78 return false;
|
|
79
|
|
80 isDirty = IsDirty;
|
|
81
|
|
82 return true;
|
|
83 }
|
|
84
|
|
85 public void GetDirtyMembers(PropertyInfo propertyInfo, ArrayList list)
|
|
86 {
|
|
87 if (IsDirty)
|
|
88 list.Add(propertyInfo);
|
|
89 }
|
|
90
|
|
91 #endregion
|
|
92
|
|
93 #region IPrintDebugState Members
|
|
94
|
|
95 public void PrintDebugState(PropertyInfo propertyInfo, ref string str)
|
|
96 {
|
|
97 str += string.Format("{0,-20} {1} {2,-40} {3,-40} \r\n",
|
|
98 propertyInfo.Name, IsDirty? "*": " ", _original, _current);
|
|
99 }
|
|
100
|
|
101 #endregion
|
|
102 }
|
|
103 }
|