private void ChangeValue(string name, JSC.JSValue val) { if (_value.ValueType == JSC.JSValueType.Object) { var jo = JSC.JSObject.CreateObject(); foreach (var kv in _value.OrderBy(z => z.Key)) { if (kv.Key == name) { if (val != null) { jo[kv.Key] = val; } else { jo.DeleteProperty(kv.Key); } } else { jo[kv.Key] = kv.Value; } } if (val != null && !jo.GetProperty(name, JSC.PropertyScope.Own).Defined) { jo[name] = val; } if (_parent == null) { _data.SetValue(jo); } else { _parent.ChangeValue(this.name, jo); } } else { throw new NotImplementedException(); } }
private void UpdateData(JSC.JSValue val) { _value = val; if(_value.ValueType == JSC.JSValueType.Object) { InValue vc; int i; foreach(var kv in _value.OrderBy(z => z.Key)) { vc = _items.OfType<InValue>().FirstOrDefault(z => z.name == kv.Key); if(vc != null) { vc.UpdateData(kv.Value); } else { for(i = _items.Count - 1; i >= 0; i--) { if(string.Compare(_items[i].name, kv.Key) < 0) { break; } } JSC.JSValue cs; { JSC.JSValue pr; if(_schema == null || (pr = _schema["Properties"] as JSC.JSValue).ValueType != JSC.JSValueType.Object || (cs = pr[kv.Key]).ValueType != JSC.JSValueType.Object) { cs = null; } } var ni= new InValue(_data, this, kv.Key, kv.Value, cs, _collFunc); _items.Insert(i + 1, ni); if(_isVisible && _isExpanded) { _collFunc(ni, true); } } } var keys = _value.Select(z => z.Key).ToArray(); for(i = _items.Count - 1; i >= 0; i--) { if(!keys.Contains(_items[i].name)) { if(_isVisible && _isExpanded) { _items[i].Deleted(); } _items.RemoveAt(i); } } } if(editor == null) { editor = InspectorForm.GetEdititor(_view, this, _schema); PropertyChangedReise("editor"); } else { editor.ValueChanged(_value); } }
private void UpdateType(JSC.JSValue type, JSC.JSValue val) { _value = val; #region Trace /*{ * StringBuilder sb = new StringBuilder(); * sb.Append(this.ToString()); * sb.Append(" $UpdateType( m{"); * if(type == null) { * sb.Append("null"); * } else { * foreach(var kv in type) { * sb.AppendFormat("{0}:{1},", kv.Key, kv.Value.ValueType == JSC.JSValueType.Object ? "Object" : kv.Value.ToString()); * } * sb.Append("}"); * if(type.__proto__.ValueType == JSC.JSValueType.Object && type.__proto__.Any()) { * sb.Append(" mp{"); * foreach(var kv in type.__proto__) { * sb.AppendFormat("{0}:{1},", kv.Key, kv.Value.ValueType == JSC.JSValueType.Object ? "Object" : kv.Value.ToString()); * } * sb.Append("}"); * } * } * if(val!=null && val.ValueType == JSC.JSValueType.Object) { * sb.Append(", s{"); * foreach(var kv in val) { * sb.AppendFormat("{0}:{1},", kv.Key, kv.Value.ValueType == JSC.JSValueType.Object ? "Object" : kv.Value.ToString()); * } * sb.Append("}"); * if(val.__proto__.ValueType == JSC.JSValueType.Object && val.__proto__.Any()) { * sb.Append(" proto{"); * foreach(var kv in val.__proto__) { * sb.AppendFormat("{0}:{1},", kv.Key, kv.Value.ValueType == JSC.JSValueType.Object ? "Object" : kv.Value.ToString()); * } * sb.Append("}"); * } * } else { * sb.Append(", s=" + JSL.JsLib.Stringify(_value, null, null)); * } * sb.Append(")"); * Log.Debug("{0}", sb.ToString()); * }*/ #endregion Trace bool o_hc = _items.Any(); base.UpdateType(type); base.editor.ValueChanged(_value); if (_value.ValueType == JSC.JSValueType.Object) { InManifest vc; int i; JSC.JSValue cs, cs_mi, cs_p; foreach (var kv in _value.OrderBy(z => z.Key)) { if (_manifest == null || _manifest.ValueType != JSC.JSValueType.Object || _manifest.Value == null || (cs_mi = _manifest["mi"]).ValueType != JSC.JSValueType.Object || cs_mi.Value == null || (cs = cs_mi[kv.Key]).ValueType != JSC.JSValueType.Object || cs.Value == null) { cs = JSC.JSObject.CreateObject(); } if ((cs_mi = (IsGroupHeader ? _value : _manifest)["mi"]).ValueType == JSC.JSValueType.Object && cs_mi.Value != null) { if ((cs_p = cs_mi[kv.Key]).ValueType == JSC.JSValueType.Object && cs_p.Value != null && cs != cs_p) { if (cs["mi"].ValueType == JSC.JSValueType.Object) { cs["mi"].__proto__ = cs_p["mi"].ToObject(); } cs.__proto__ = cs_p.ToObject(); } } vc = _items.OfType <InManifest>().FirstOrDefault(z => z.name == kv.Key); if (vc != null) { vc.UpdateType(cs, kv.Value); } else { var ni = new InManifest(this, kv.Key, kv.Value, cs); for (i = _items.Count - 1; i >= 0; i--) { if (string.Compare(_items[i].name, kv.Key) < 0) { break; } } _items.Insert(i + 1, ni); if (_isVisible && _isExpanded) { _collFunc(ni, true); } } } var keys = _value.Select(z => z.Key).ToArray(); for (i = _items.Count - 1; i >= 0; i--) { if (!keys.Contains(_items[i].name)) { if (_isVisible && _isExpanded) { _items[i].Deleted(); } _items.RemoveAt(i); } } } if (o_hc != _items.Any()) { if (o_hc) // now has now children { IsExpanded = false; } PropertyChangedReise("HasChildren"); } }
private void UpdateData(JSC.JSValue val) { bool o_hc = HasChildren; _value = val; if (_value.ValueType == JSC.JSValueType.Object) { InValue vc; int i; foreach (var kv in _value.OrderBy(z => z.Key)) { vc = _items.OfType <InValue>().FirstOrDefault(z => z.name == kv.Key); if (vc != null) { vc.UpdateData(kv.Value); } else { for (i = _items.Count - 1; i >= 0; i--) { if (string.Compare(_items[i].name, kv.Key) < 0) { break; } } JSC.JSValue cs; { JSC.JSValue pr; if (_manifest == null || (pr = _manifest["Fields"]).ValueType != JSC.JSValueType.Object || (cs = pr[kv.Key]).ValueType != JSC.JSValueType.Object) { cs = null; } } var ni = new InValue(_data, this, kv.Key, kv.Value, cs, _collFunc); _items.Insert(i + 1, ni); if (_isVisible && _isExpanded) { _collFunc(ni, true); } } } var keys = _value.Select(z => z.Key).ToArray(); for (i = _items.Count - 1; i >= 0; i--) { if (!keys.Contains(_items[i].name)) { if (_isVisible && _isExpanded) { _items[i].Deleted(); } _items.RemoveAt(i); } } } if (editor == null) { editor = InspectorForm.GetEditor(_editorName, this, _manifest); PropertyChangedReise("editor"); } else { editor.ValueChanged(_value); } if (o_hc != this.HasChildren) { PropertyChangedReise("HasChildren"); } }