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("Не удалось загрузить типы свободных иерархий!");
                }
            }
        }
 private void tree_ActiveNodeChanged(object sender, ActiveNodeChangedEventArgs e)
 {
     try
     {
         if (e.NewActiveTreeNode == null || e.NewActiveTreeNode.Data == null)
         {
             ActiveTreeNode = null;
         }
         else
         {
             ActiveTreeNode = e.NewActiveTreeNode.Data as FreeHierarchyTypeTreeItem;
         }
         OnActiveNodeChanged();
     }
     catch
     {
     }
 }
        /// <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
                {
                    //ошибки бывают..
                }
            }));
        }
Exemplo n.º 4
0
        /// <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);
            }
        }
Exemplo n.º 5
0
 public void Dispose()
 {
     Descriptor                = null;
     FreeHierarchyTreeItems    = null;
     FreeHierarchyTypeTreeItem = null;
 }
Exemplo n.º 6
0
        /// <summary>
        /// Ждем подгрузки дерева, инициализируем
        /// </summary>
        public void LoadTreeAndInit(FreeHierarchyTypeTreeItem freeHierarchyTypeTreeItem, bool isFullReload = false,
                                    HashSet <int> singreRootFreeHierItemIds = null)
        {
            #region Очищаем старое дерево

            var items = Items;

            Items = null;

            string previousSets = null;

            if (descriptor != null)
            {
                if (descriptor.FreeHierarchyTree != null)
                {
                    //Запоминаем выбранные на прошлом дереве объекты
                    previousSets = descriptor.FreeHierarchyTree.GetSelectedToSet();
                }

                descriptor.Dispose();
                descriptor = null;
            }

            if (items != null)
            {
                items.DisposeChildren();
                items = null;
            }

            selectedType.DataContext = null;

            #endregion

            if (freeHierarchyTypeTreeItem != null)
            {
                Tree_ID = freeHierarchyTypeTreeItem.FreeHierTree_ID;
            }
            else
            {
                Tree_ID = DefaultTree_ID;
            }

            if (previousSets != null)
            {
                if (_startSelector != null)
                {
                    try
                    {
                        _startSelector.Dispose();
                        _startSelector = null;
                    }
                    catch
                    {
                    }
                }

                //Была смена дерева, пытаемся выделить объекты с предыдущего дерева
                SetItemsForSelection(previousSets, 2);
            }

            MainLayout.RunAsync(() => new TreeStartLoader(this, freeHierarchyTypeTreeItem, _selectedNodes, isFullReload, singreRootFreeHierItemIds),
                                loader =>
            {
                //Ошибка загрузки дерева
                lock (_selectedNodesSyncLock)
                {
                    if (loader == null || loader.Descriptor == null)
                    {
                        return;
                    }
                }

                if (IsSelectSingle)
                {
                    butNone.Visibility = showOnlySelected.Visibility = butAll.Visibility = System.Windows.Visibility.Collapsed;
                }

                var isFirstUsed = loader.IsFirstLoaded;

                IDictionary <int, FreeHierarchyTreeItem> source;
                lock (_selectedNodesSyncLock)
                {
                    source     = loader.FreeHierarchyTreeItems;
                    descriptor = loader.Descriptor;
                    freeHierarchyTypeTreeItem = loader.FreeHierarchyTypeTreeItem;
                    //_loader = null;
                    var prevTypeTreeItem = selectedType.DataContext as FreeHierarchyTypeTreeItem;
                    if (prevTypeTreeItem != null)
                    {
                        selectedType.DataContext = null;
                        prevTypeTreeItem.Dispose();
                    }

                    descriptor.SelectedChanged += DescOnSelectedChanged;

                    loader.Dispose();
                }

                if (source == null)
                {
                    return;
                }

                selectedType.DataContext = freeHierarchyTypeTreeItem;

                IEnumerable <KeyValuePair <int, FreeHierarchyTreeItem> > query;

                query = source.Where(i => i.Value != null && i.Value.Parent == null);

                //else
                //{
                //    //Нужно отобразить с дерево с определенного узла
                //    query = source.Where(i => i.Value != null && singreRootFreeHierItemIds.Contains(i.Value.FreeHierItem_ID));
                //}

                var parents = new RangeObservableCollection <FreeHierarchyTreeItem>(query
                                                                                    .Select(i => i.Value).OrderBy(o => o, new FreeHierarchyTreeItemComparer()), new FreeHierarchyTreeItemComparer());

                if (IsNSIDocuments)
                {
                    parents.Add(new FreeHierarchyTreeItem(descriptor, null as FreeHierarchyTreeItem)
                    {
                        FreeHierItemType = EnumFreeHierarchyItemType.CommonDocuments,
                        StringName       = "Общие документы"
                    });
                }

                var module = FindModule(this);
                if (module != null && Manager.Config.TreeDefaults != null)
                {
                    Manager.Config.TreeDefaults[module.ModuleType + Name] = descriptor.Tree_ID.GetValueOrDefault();
                }

                //Пытаемся оставить совместимость
                if (module != null && Manager.Config.FreeSets != null)
                {
                    var setKey = module.ModuleType + ":" + freeHierarchyTypeTreeItem.FreeHierTree_ID;

                    Dictionary <string, List <string> > set;
                    if (Manager.Config.FreeSets.TryGetValue(setKey, out set) && set != null)
                    {
                        Dictionary <string, List <string> > ks;
                        if (Manager.Config.FreeSets.TryGetValue(
                                freeHierarchyTypeTreeItem.FreeHierTree_ID.ToString(), out ks) && ks != null)
                        {
                            foreach (var k in ks)
                            {
                                List <string> existsSet;
                                if (set.TryGetValue(k.Key, out existsSet) && existsSet != null)
                                {
                                    existsSet.AddRange(k.Value);
                                }
                                else
                                {
                                    set[k.Key] = k.Value;
                                }
                            }
                        }

                        Manager.Config.FreeSets[freeHierarchyTypeTreeItem.FreeHierTree_ID.ToString()] = set;
                        Manager.Config.FreeSets.Remove(setKey);
                    }
                }

                sets.InitGlobal(freeHierarchyTypeTreeItem.FreeHierTree_ID.ToString());

                Items = parents;

                if (OnTreeDataLoaded != null)
                {
                    OnTreeDataLoaded(this, new EventArgsTreeItems
                    {
                        Items = parents,
                    });
                }
            }, priority: DispatcherPriority.Normal);
        }