public void LoadTypes(EnumModuleFilter?rightFilter, HashSet <long> selectedNodes = null, bool IsDeclaratorMainTree = false) { _isDeclaratorMainTree = IsDeclaratorMainTree; _currentRightFilter = rightFilter; if (!Manager.IsDesignMode) { try { if (Items != null) { Items.DisposeChildren(); Items.Clear(); } var treeTypes = GlobalFreeHierarchyDictionary.GetTypes(rightFilter).Values .Where(t => t.Parent == null).ToList(); //пока здесь. для описателя в основном дереве отображаем перечень OPCUA серверов, для этого добавляем строку в стандартные деревья if (IsDeclaratorMainTree && Manager.User.IsAdmin) { FreeHierarchyTypeTreeItem stdtree = treeTypes.FirstOrDefault(i => i.FreeHierTree_ID == -100); FreeHierarchyTypeTreeItem OPCtree = new FreeHierarchyTypeTreeItem { FreeHierTree_ID = -1001, StringName = "Сервера OPCUA" }; if (stdtree != null && !stdtree.Children.Any(i => i.FreeHierTree_ID == -1001)) { stdtree.Children.Add(OPCtree); } else if (stdtree == null && !treeTypes.Any(i => i.FreeHierTree_ID == -1001)) { treeTypes.Add(OPCtree); } } //ТОЛЬКО для описателя if (IsDeclaratorMainTree) { FreeHierarchyTypeTreeItem stdtree = treeTypes.FirstOrDefault(i => i.FreeHierTree_ID == -100); FreeHierarchyTypeTreeItem OPCtree = new FreeHierarchyTypeTreeItem { FreeHierTree_ID = -1002, StringName = "ФИАС - используемые адреса" }; if (stdtree != null && stdtree.Children.All(i => i.FreeHierTree_ID != -1002)) { stdtree.Children.Add(OPCtree); } else if (stdtree == null && treeTypes.All(i => i.FreeHierTree_ID != -1002)) { treeTypes.Add(OPCtree); } } Items = new ObservableCollection <FreeHierarchyTypeTreeItem>(treeTypes); } catch (Exception) { Manager.UI.ShowMessage("Не удалось загрузить типы свободных иерархий!"); } } }
/// <summary> /// перезагрузка дерева /// </summary> public void ReloadTree(int?ActiveNode_ID = null) { var fnd = new Dictionary <object, Stack>(); FreeHierarchyTypeTreeItem obj = null; Manager.User.ReloadFreeHierarchyTypes(Manager.UI.ShowMessage); LoadTypes(_currentRightFilter, new HashSet <long> { ActiveNode_ID ?? -101 }, _isDeclaratorMainTree); var allNodes = GlobalFreeHierarchyDictionary.GetTypes(_currentRightFilter); if (allNodes != null) { allNodes.TryGetValue(ActiveNode_ID ?? -101, out obj); } if (obj == null) { return; } //fnd[obj] = obj.GetParents(); ActiveTreeNode = obj; Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new System.Action(delegate() { try { XamTreeFinder.ExpandAndSelectXamTree(fnd, obj, tree); } catch { //ошибки бывают.. } })); }
/// <summary> /// Подгрузчик дерева /// </summary> /// <param name="freeHierarchyTypeTreeItem"></param> /// <param name="isFullReload"></param> public TreeStartLoader(FreeHierarchyTree tree, FreeHierarchyTypeTreeItem freeHierarchyTypeTreeItem, HashSet <long> selectedNodes, bool isFullReload = false, HashSet <int> singreRootFreeHierItemIds = null) { if (freeHierarchyTypeTreeItem == null || tree == null) { return; } var d = new FreeHierarchyTreeDescriptor { //TreeID = freeHierarchyTypeTreeItem.FreeHierTree_ID, FilterStatus = tree.FilterStatus, TreeHashId = GetHashCode(), IsSelectSingle = tree.IsSelectSingle, ShowUspdAndE422InTree = tree.ShowUspdAndE422InTree, IsHideSelectMany = tree.IsHideSelectMany, NeedFindTransformatorsAndreactors = tree.IsShowTransformatorsAndReactors, NeedFindTI = !tree.IsHideTi && (freeHierarchyTypeTreeItem.FreeHierTree_ID >= GlobalFreeHierarchyDictionary.TreeTypeStandartPS || freeHierarchyTypeTreeItem.FreeHierTree_ID == GlobalFreeHierarchyDictionary.TreeTypeStandartTIFormula || freeHierarchyTypeTreeItem.FreeHierTree_ID == GlobalFreeHierarchyDictionary.TreeTypeStandartDistributingArrangementAndBusSystem), IsHideTp = tree.IsHideTp, PermissibleForSelectObjects = tree.PermissibleForSelectObjects, FreeHierarchyTree = tree, }; try { Descriptor = d; FreeHierarchyTypeTreeItem = freeHierarchyTypeTreeItem; FreeHierarchyTreeItems = GlobalFreeHierarchyDictionary.GetTree(d, out IsFirstLoaded, tree.IsHideTi, selectedNodes, isFullReload, singreRootFreeHierItemIds); } catch (Exception ex) { Manager.UI.ShowMessage(ex.Message); } }