Example #1
0
        public void Dispose()
        {
            if (children != null)
            {
                children.ForEach(ch => ch.Dispose());
                children = null;
            }

            Parent = null;
        }
Example #2
0
        public Stack GetParents()
        {
            var stack = new Stack();
            FreeHierarchyTypeTreeItem item = this;

            while (item != null)
            {
                stack.Push(item);
                item = item.Parent;
            }
            return(stack);
        }
        public static Dictionary <int, FreeHierarchyTypeTreeItem> GetTypes(EnumModuleFilter?rightFilter)
        {
#if DEBUG
            var sw = new System.Diagnostics.Stopwatch();
            sw.Start();
#endif
            //var dbTypes = FreeHierarchyService.GetTypes(Manager.UserName, Manager.Password, rights.ToList());
            var freeHierarchyTypes = Manager.User.GetFreeHierarchyTypes(Manager.UI.ShowMessage);

#if DEBUG
            sw.Stop();
            Console.WriteLine("GetFreeHierarchyTypes {0} млс", sw.ElapsedMilliseconds);
            sw.Restart();
#endif

            var result = new Dictionary <int, FreeHierarchyTypeTreeItem>();

            if (freeHierarchyTypes == null || freeHierarchyTypes.Count == 0)
            {
                return(result);
            }

            var parents = new Dictionary <FreeHierarchyTypeTreeItem, int?>();

            IEnumerable <TFreeHierarchyType> types = rightFilter.GetValueOrDefault() != EnumModuleFilter.None
                ? freeHierarchyTypes.Where(
                f => f.ModuleFilter.GetValueOrDefault() == EnumModuleFilter.None || (rightFilter.GetValueOrDefault() & f.ModuleFilter.GetValueOrDefault()) != EnumModuleFilter.None)
                : freeHierarchyTypes;

            foreach (var value in types)
            {
                var newItem = new FreeHierarchyTypeTreeItem
                {
                    FreeHierTree_ID = value.FreeHierTree_ID,
                    StringName      = value.StringName,
                    ModuleFilter    = value.ModuleFilter
                                      //так как читается упорядочено по уровням
                };
                result.Add(newItem.FreeHierTree_ID, newItem);
                parents[newItem] = value.ParentID;
            }
            if (parents.Count == 0)
            {
                return(result);
            }

            foreach (var value in result.Values)
            {
                int?parentId;
                FreeHierarchyTypeTreeItem hierarchyTypeTreeItem;
                if (!parents.TryGetValue(value, out parentId) || !parentId.HasValue || !result.TryGetValue(parentId.Value, out hierarchyTypeTreeItem))
                {
                    continue;
                }
                value.Parent = hierarchyTypeTreeItem;
                value.Parent.Children.Add(value);
            }

#if DEBUG
            sw.Stop();
            Console.WriteLine("Построение типов дерева {0} млс", sw.ElapsedMilliseconds);
#endif
            //Сортируем по алфавиту только в стандартном дереве
            FreeHierarchyTypeTreeItem standartTree;
            if (result.TryGetValue(TreeTypeStandart, out standartTree) && standartTree != null && standartTree.Children != null && standartTree.Children.Count > 0)
            {
                standartTree.Children.Sort(new FreeHierarchyTypeTreeItemComparer());
            }

            return(result);
        }