예제 #1
0
        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();
        }
예제 #2
0
 public void RemovedFromCollection(ClientXObject <TKind> _child)
 {
     foreach (var instance in m_instances.Values)
     {
         instance.RemovedFromCollection(_child);
     }
 }
예제 #3
0
 internal void DeleteObject(ClientXObject <TKind> _child, Guid _collectionOwnerUid)
 {
     if (_collectionOwnerUid.Equals(m_root.Uid))
     {
         m_root.RemovedFromCollection(_child);
     }
     Release(_child);
 }
예제 #4
0
 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));
     }
 }
예제 #5
0
 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);
         }
     }
 }
예제 #6
0
        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 });
            }
        }
예제 #7
0
        /// <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);
            }
        }
예제 #8
0
 public BatchChanges(ClientXObject <TKind> _xObject)
 {
     m_xObject = _xObject;
     _xObject.BeginBatchUpdating();
 }
예제 #9
0
 public bool GetIsUndoEnabled(ClientXObject <TKind> _obj)
 {
     return(GetIsUndoEnabled(_obj.Uid));
 }
예제 #10
0
 public void Revert(ClientXObject <TKind> _obj)
 {
     Revert(_obj.Uid);
 }
예제 #11
0
 public void Redo(ClientXObject <TKind> _obj)
 {
     Redo(_obj.Uid);
 }
예제 #12
0
 public void Undo(ClientXObject <TKind> _obj)
 {
     Undo(_obj.Uid);
 }
예제 #13
0
 public void Save(ClientXObject <TKind> _obj)
 {
     Save(_obj.Uid);
 }