internal void RegisterNewItem(ClientXObject <TKind> _child, Guid _collectionOwnerUid, int _fieldId) { var ownerDescriptor = GetDescriptor(_collectionOwnerUid); ClientXObjectDescriptor <TKind> childDescriptor; if (m_descriptors.TryGetValue(_child.Uid, out childDescriptor)) { if (!childDescriptor.CollectionOwnerUid.Equals(_collectionOwnerUid)) { throw new ApplicationException("Object owned by another parent"); } ProcessAddedToCollection(_child, ownerDescriptor, _fieldId); return; //throw new ApplicationException("Object is not unique"); } var kindId = KindToInt(_child.Kind); var report = new XReport(_child.Uid, _child.GetChanges(), kindId, EState.SINGLE); m_transport.AddNew(report, m_sessionId, _collectionOwnerUid); var descriptor = new ClientXObjectDescriptor <TKind>(_child, this, kindId, _collectionOwnerUid); m_descriptors.Add(_child.Uid, descriptor); ProcessAddedToCollection(_child, ownerDescriptor, _fieldId); _child.SetClientInternal(this); _child.OnInstantiationFinished(); }
public void RemovedFromCollection(ClientXObject <TKind> _child) { foreach (var instance in m_instances.Values) { instance.RemovedFromCollection(_child); } }
internal void DeleteObject(ClientXObject <TKind> _child, Guid _collectionOwnerUid) { if (_collectionOwnerUid.Equals(m_root.Uid)) { m_root.RemovedFromCollection(_child); } Release(_child); }
void IXCollection <TKind> .AddSilently(ClientXObject <TKind> _item) { if (!m_dict.ContainsKey(_item.Uid)) { m_dict.Add(_item.Uid, (T)_item); _item.SetClientInternal(m_client); UpdateVM(() => m_observableCollection.Add((T)_item)); } }
public void AddedToCollection(ClientXObject <TKind> _child, IEnumerable <int> _addAs) { foreach (var instance in m_instances.Values) { foreach (var addAs in _addAs) { instance.AddedToCollection(_child, addAs); } } }
private void ProcessAddedToCollection(ClientXObject <TKind> _child, ClientXObjectDescriptor <TKind> ownerDescriptor, int _fieldId) { List <TKind> alsoKnownAsList; if (ownerDescriptor == RootDescriptor && m_abstractRootKindMap.TryGetValue(_child.Kind, out alsoKnownAsList)) { var alsoKnownAs = new List <TKind>(alsoKnownAsList) { _child.Kind }; ownerDescriptor.AddedToCollection(_child, alsoKnownAs.Select(KindToInt)); } else { ownerDescriptor.AddedToCollection(_child, new[] { _fieldId }); } }
/// <summary> /// Вызывается для создания дескриптора для нового объекта /// </summary> /// <param name="_newBorn"></param> /// <param name="_client"></param> /// <param name="_kindId"></param> /// <param name="_parentUid"></param> public ClientXObjectDescriptor(ClientXObject <TKind> _newBorn, AbstractXClient <TKind> _client, int _kindId, Guid _parentUid) : this(_newBorn.Uid, _client, _parentUid) { var child = _newBorn as IClientXChildObject <TKind>; if (child != null) { child.SetParent(_parentUid); } m_instances.Add(_newBorn.GetType(), _newBorn); m_instancesCounter.Add(_newBorn, 1); Kind = _kindId; ResetState(); _newBorn.Changed += XObjectChanged; var changes = _newBorn.GetChanges(); if (changes.Any()) { Report = new ServerXReport(_newBorn.Uid, _newBorn.GetChanges(), 0, m_client.KindToIntInternal(_newBorn.Kind), EState.SINGLE); } }
public BatchChanges(ClientXObject <TKind> _xObject) { m_xObject = _xObject; _xObject.BeginBatchUpdating(); }
public bool GetIsUndoEnabled(ClientXObject <TKind> _obj) { return(GetIsUndoEnabled(_obj.Uid)); }
public void Revert(ClientXObject <TKind> _obj) { Revert(_obj.Uid); }
public void Redo(ClientXObject <TKind> _obj) { Redo(_obj.Uid); }
public void Undo(ClientXObject <TKind> _obj) { Undo(_obj.Uid); }
public void Save(ClientXObject <TKind> _obj) { Save(_obj.Uid); }