/** * * Param: parent The document level context for this override. * Param: target The component level context for this override. */ /// <summary> /// Gets the targeted member based on the folowing logic: /// If target is supplied - as object - get its member using name /// If target is supplied - as string - find a target (object) and then get its member using name /// If target is not supplied - get the member on parent using name /// </summary> /// <param name="target"></param> /// <param name="parent"></param> /// <param name="name"></param> /// <returns></returns> protected MemberProxy GetMember(object target, Component parent, string name) { if (target == null) return new MemberProxy(parent, name); if (target is string) target = new MemberProxy(parent, (string) target).GetValue(); return new MemberProxy(target, name); }
/// <summary> /// /// </summary> /// <param name="parent"></param> public override void Remove(Component parent) { //Debug.Log("SetStyle->Remove: Name: " + Name + "; Value: " + Value); var obj = (IStyleClient) _appliedTarget; // ovo je fakat čudno, njihova logika ne radi (ili ima bug) // što znači "clearate" style - maknut ga iz style deklaracije ili ga staviti unutra s vrijednosti "undefined"??? if (_wasInline) { // Restore the old value /*if (_oldValue == null) obj.ClearStyle(Name); else*/ obj.SetStyle(Name, _oldValue); // apply whatever the old value is } else { obj.ClearStyle(Name); } //obj.SetStyle(Name, _oldValue); //_relatedProps = GetRelatedProperties(_appliedTarget, _pseudonym); if (null != _relatedProps) { for (var i = 0; i < _relatedProps.Count; i++) { _mp = new MemberProxy(_appliedTarget, _relatedProps[i]); _mp.SetValue(_oldRelatedValues[i]); } } Applied = false; _appliedTarget = null; }
/// <summary> /// /// </summary> /// <param name="parent"></param> public override void Remove(Component parent) { //Debug.Log("SetProperty->Remove: Name: " + Name + "; Value: " + Value); //_appliedTarget = GetTarget(_appliedTarget, parent); _pseudonym = GetPseudonym(_appliedTarget, Name); // Special case for width and height. Restore the "width" and // "height" properties instead of explicitWidth/explicitHeight // so they can be kept in sync. if ((Name == "Width" || Name == "Height") && null != (_oldValue as float?)) { _pseudonym = Name; } _mp = new MemberProxy(_appliedTarget, _pseudonym); // buggy caching (tries to do Color to Rotation) _mp.SetValue(_oldValue); /*MemberWrapper mw = new MemberWrapper(_appliedTarget.GetType(), _pseudonym); mw.SetValue(_appliedTarget, _oldValue);*/ _oldValue = null; //_relatedProps = GetRelatedProperties(_appliedTarget, _pseudonym); if (null != _relatedProps) { for (var i = 0; i < _relatedProps.Count; i++) { _mp = new MemberProxy(_appliedTarget, _relatedProps[i]); _mp.SetValue(_oldRelatedValues[i]); } } Applied = false; _appliedTarget = null; }
/// <summary> /// /// </summary> /// <param name="parent"></param> public override void Apply(Component parent) { //Debug.Log("SetProperty->Apply: Name: " + Name + "; Value: " + Value); _appliedTarget = GetTarget(Target, parent); _pseudonym = GetPseudonym(_appliedTarget, Name); _mp = new MemberProxy(_appliedTarget, _pseudonym); //_mp = GetMember(Target, parent, _pseudonym); if (!Applied) { _oldValue = _mp.GetValue(); } _mp.SetValue(Value); // buggy caching (tries to do Color to Rotation) //MemberWrapper mw = new MemberWrapper(_appliedTarget.GetType(), _pseudonym); /*MemberWrapper mw = GlobalMemberCache.Instance.Get(_appliedTarget.GetType(), _pseudonym); if (null == mw) { mw = new MemberWrapper(_appliedTarget.GetType(), _pseudonym); GlobalMemberCache.Instance.Put(_appliedTarget.GetType(), _pseudonym, mw); } if (!Applied) { _oldValue = mw.GetValue(_appliedTarget); } mw.SetValue(_appliedTarget, Value);*/ _relatedProps = GetRelatedProperties(_appliedTarget, _pseudonym); if (_relatedProps.Count > 0) { if (null == _oldRelatedValues) _oldRelatedValues = new List<object>(); // lazily else _oldRelatedValues.Clear(); foreach (string property in _relatedProps) { _oldRelatedValues.Add(new MemberProxy(_appliedTarget, property).GetValue()); } } Applied = true; }