Mercurial > pub > bltoolkit
view Source/EditableObjects/EditableValue.cs @ 9:1e85f66cf767 default tip
update bltoolkit
author | nickolay |
---|---|
date | Thu, 05 Apr 2018 20:53:26 +0300 |
parents | f990fcb411a9 |
children |
line wrap: on
line source
using System; using System.Collections; using System.Reflection; using BLToolkit.TypeBuilder; namespace BLToolkit.EditableObjects { [Serializable] public struct EditableValue<T>: IEditable, IMemberwiseEditable, IPrintDebugState { private T _original; private T _current; public EditableValue(T value) { _original = value; _current = value; } [GetValue, SetValue] public T Value { get { return _current; } set { _current = value; } } #region IEditable Members public void AcceptChanges() { _original = _current; } public void RejectChanges() { _current = _original; } public bool IsDirty { get { object o = _original; object c = _current; return o == null? c != null: o.Equals(c) == false; } } #endregion #region IMemberwiseEditable Members public bool AcceptMemberChanges(PropertyInfo propertyInfo, string memberName) { if (memberName != propertyInfo.Name) return false; AcceptChanges(); return true; } public bool RejectMemberChanges(PropertyInfo propertyInfo, string memberName) { if (memberName != propertyInfo.Name) return false; RejectChanges(); return true; } public bool IsDirtyMember(PropertyInfo propertyInfo, string memberName, ref bool isDirty) { if (memberName != propertyInfo.Name) return false; isDirty = IsDirty; return true; } public void GetDirtyMembers(PropertyInfo propertyInfo, ArrayList list) { if (IsDirty) list.Add(propertyInfo); } #endregion #region IPrintDebugState Members public void PrintDebugState(PropertyInfo propertyInfo, ref string str) { str += string.Format("{0,-20} {1} {2,-40} {3,-40} \r\n", propertyInfo.Name, IsDirty? "*": " ", _original, _current); } #endregion } }