예제 #1
0
        private IDsmElement AddElement(int id, string name, string type, int order, bool expanded, int?parentId, bool deleted)
        {
            DsmElement element = new DsmElement(id, name, type)
            {
                Order = order, IsExpanded = expanded, IsDeleted = deleted
            };

            if (parentId.HasValue)
            {
                DsmElement parent = null;
                if (_elementsById.ContainsKey(parentId.Value))
                {
                    parent = _elementsById[parentId.Value];
                }

                if (_deletedElementsById.ContainsKey(parentId.Value))
                {
                    parent = _deletedElementsById[parentId.Value];
                }

                if (parent != null)
                {
                    parent.AddChild(element);
                }
                else
                {
                    Logger.LogError($"Parent not found id={id}");
                }
            }
            else
            {
                _root.AddChild(element);
                _root.IsExpanded = true;
            }

            if (deleted)
            {
                UnregisterElement(element);
            }
            else
            {
                RegisterElement(element);
            }

            return(element);
        }
예제 #2
0
        public void ChangeElementParent(IDsmElement element, IDsmElement parent)
        {
            Logger.LogDataModelMessage($"Change element parent name={element.Name} from {element.Parent.Fullname} to {parent.Fullname}");

            DsmElement changedElement = element as DsmElement;
            DsmElement currentParent  = element.Parent as DsmElement;
            DsmElement newParent      = parent as DsmElement;

            if ((currentParent != null) && (newParent != null))
            {
                BeforeElementChangeParent?.Invoke(this, element);
                UnregisterElementNameHierarchy(changedElement);
                currentParent.RemoveChild(element);
                newParent.AddChild(element);
                RegisterElementNameHierarchy(changedElement);
                AfterElementChangeParent?.Invoke(this, element);
            }
        }
예제 #3
0
        public void ReorderChildren(IDsmElement element, ISortResult sortResult)
        {
            DsmElement parent = element as DsmElement;

            if (parent != null)
            {
                List <IDsmElement> clonedChildren = new List <IDsmElement>(parent.Children);

                foreach (IDsmElement child in clonedChildren)
                {
                    parent.RemoveChild(child);
                }

                for (int i = 0; i < sortResult.GetNumberOfElements(); i++)
                {
                    parent.AddChild(clonedChildren[sortResult.GetIndex(i)]);
                }
            }
        }