Example #1
0
        /// <summary>
        /// Строим ветки, которые будем добавлять
        /// </summary>
        /// <param name="parent">Родительский объект</param>
        /// <param name="nodes">Список узлов для вставки/обновления который наполняем</param>
        /// <param name="nodePath">Дополнительный путь к узлу, в который вставляем или переносим (что-то вроде 1/1/1/)</param>
        private static void BuildParent(int destTreeId, int destFreeHierItemId, FreeHierarchyTreeItem parent, List <FreeHierTreeItem> nodes,
                                        bool includeChildren, string nodePath)
        {
            //Добавляем родителя
            nodes.Add(CreateInserted(destTreeId, destFreeHierItemId, parent, includeChildren, nodePath));

            //Теперь добавляем дочерние
            if (parent.Children == null || parent.Children.Count == 0)
            {
                return;
            }

            var ph = 1;

            foreach (var child in parent.Children)
            {
                if (!child.IsSelected)
                {
                    continue;
                }

                BuildParent(destTreeId, destFreeHierItemId, child, nodes, includeChildren, nodePath + ph + "/"); //Увеличиваем путь

                ph++;
            }
        }
Example #2
0
        private void InitVisual()
        {
            var nodeContext = DataContext as XamDataTreeNodeDataContext;

            if (nodeContext == null)
            {
                return;
            }

            var item = nodeContext.Data as FreeHierarchyTreeItem;

            if (_parentTree == null)
            {
                _parentTree = nodeContext.Node.NodeLayout.Tree.TryFindResource("treeModule") as FreeHierarchyTree; //.FindParent<FreeHierarchyTree>();
            }

            #region Определяемся нужно ли пересоздавать контрол

            var isRecreateControl = _freeHierarchyTreeItem == null ||
                                    item == null;

            if (!isRecreateControl)
            {
                var oldTypeFound = false;
                var newTypeFound = false;

                isRecreateControl = true;

                foreach (var notRecreatableType in _notRecreatableTypes)
                {
                    if (!oldTypeFound && notRecreatableType == _freeHierarchyTreeItem.FreeHierItemType)
                    {
                        oldTypeFound = true;
                    }

                    if (!newTypeFound && notRecreatableType == item.FreeHierItemType)
                    {
                        newTypeFound = true;
                    }

                    if (oldTypeFound && newTypeFound)
                    {
                        isRecreateControl = false;
                        break;
                    }
                }
            }

            #endregion

            _freeHierarchyTreeItem = item;

            if (_freeHierarchyTreeItem == null || _freeHierarchyTreeItem.Descriptor == null)
            {
                return;
            }

            //MainLayout.DataContext = _freeHierarchyTreeItem;

            if (_outerSelector == null && _parentTree != null && _parentTree.OuterSelector != null)
            {
                _outerSelector = _parentTree.OuterSelector;
            }

            //if (_freeHierarchyTreeItem.UpdateItemContent == null)
            //{
            //    _freeHierarchyTreeItem.UpdateItemContent = UpdateItemContent;
            //}

            if (_parentTree == null)
            {
                return;
            }

            _treeDescriptor = _parentTree.GetDescriptor();
            if (_treeDescriptor == null)
            {
                return;
            }

            bool isHideStandartIcon = false;


            //если указана пользовательская иконка то скрываем стандартные
            if (item != null && item.NodeIcon_ID != null)
            {
                isHideStandartIcon = true;

                DictNodeIcon imgBytes;
                GlobalTreeDictionary.DictNodeIconList.TryGetValue(item.NodeIcon_ID ?? 0, out imgBytes);


                if (imgBytes != null)
                {
                    UserImage.Source = imgBytes.DataImage;
                }
                UserImage.Visibility = Visibility.Visible;
            }
            else if (UserImage.Visibility == Visibility.Visible)
            {
                UserImage.Visibility = Visibility.Collapsed;
                //TODO
            }


            //if (ccLayout.Content != null) DisposeControlContent();
            UpdateItemContent(_freeHierarchyTreeItem, isRecreateControl, isHideStandartIcon);

            //ccLayout.Content = _freeHierarchyTreeItem.Name;
        }
Example #3
0
        private void UpdateItemContent(FreeHierarchyTreeItem freeHierarchyTreeItem, bool isRecreateControl = true, bool isHideStandartIcon = false)
        {
            var isSelectSingle = _treeDescriptor != null && _treeDescriptor.IsSelectSingle;

            if (isSelectSingle)
            {
                bMenu.Visibility = cbSelect.Visibility = Visibility.Collapsed;
            }
            //else
            //{
            //if (bMenu.CommandTarget == null) bMenu.CommandTarget = _parentTree;
            //}

            var obj = freeHierarchyTreeItem.HierObject ?? freeHierarchyTreeItem.ItemObject;

            if (obj is FreeHierarchyTreeItem)
            {
                var tb = new TextBlock
                {
                    Text = obj.ToString(),
                };
                //tb.SetBinding(TextBlock.TextProperty, "StringName");
                ccLayout.Content = tb;
            }
            else
            {
                var needRecreateContent = true;

                if (!isRecreateControl && ccLayout.Content != null)
                {
                    //Универсальный контрол, пересоздавать визуальный объект не нужно, просто меняем DataContext
                    if (ccLayout.Content is HierObject)
                    {
                        //fec.DataContext = obj;
                        needRecreateContent = false;
                    }
                    else
                    {
                        var tb = ccLayout.Content as TextBlock;
                        if (tb != null)
                        {
                            tb.Text = obj.ToString();
                        }
                        //else
                        //{
                        //    var f = ccLayout.Content as FrameworkElement;
                        //    if (f != null) f.DataContext = obj;
                        //}
                    }
                }

                DataTemplate dt = null;
                if (_parentTree != null)
                {
                    var parentFrame = _parentTree.PermissibleForSelectObjects;
                    if (parentFrame != null && parentFrame.PermissibleForSelectObjects != null &&
                        parentFrame.PermissibleForSelectObjects.All(p => p != freeHierarchyTreeItem.FreeHierItemType))
                    {
                        cbSelect.Visibility = Visibility.Collapsed;
                    }
                    else if (_outerSelector != null)
                    {
                        TreeMode = _parentTree.TreeMode;
                        dt       = _outerSelector.GetTemplate(freeHierarchyTreeItem, _parentTree.ExtendetTemplates,
                                                              TreeMode);
                        if (dt != null)
                        {
                            var tm = TreeMode.GetValueOrDefault();

                            if (tm == enumTreeMode.SingleObject || tm == enumTreeMode.PSSingleMode ||
                                tm == enumTreeMode.MultiTIMode ||
                                tm == enumTreeMode.Formulas || tm == enumTreeMode.OpcUa ||
                                tm == enumTreeMode.FactPower ||
                                (tm == enumTreeMode.PSMultiMode && freeHierarchyTreeItem.FreeHierItemType !=
                                 EnumFreeHierarchyItemType.PS))
                            {
                                cbSelect.Visibility = Visibility.Collapsed;
                                if (tm != enumTreeMode.MultiTIMode)
                                {
                                    bMenu.Visibility = Visibility.Collapsed;
                                }
                            }
                            else if (!isSelectSingle)
                            {
                                cbSelect.Visibility = Visibility.Visible;
                            }
                        }
                        else if (cbSelect.Visibility != Visibility.Visible)
                        {
                            cbSelect.Visibility = Visibility.Visible;
                        }
                    }
                    else if (!isSelectSingle)
                    {
                        cbSelect.Visibility = Visibility.Visible;
                    }
                }

                if (_treeDescriptor != null && _treeDescriptor.Tree_ID <= 0 &&
                    (FreeHierarchyTreeItem.NoHaveChildren.Contains(freeHierarchyTreeItem.FreeHierItemType)))
                {
                    bMenu.Visibility = Visibility.Collapsed;
                }
                else if (!isSelectSingle && bMenu.Visibility != Visibility.Visible)
                {
                    bMenu.Visibility = Visibility.Visible;
                }

                if (dt != null)
                {
                    ccLayout.Content = dt.LoadContent();
                }
                else if (needRecreateContent)
                {
                    if (freeHierarchyTreeItem.HierObject != null)
                    {
                        ccLayout.Content = freeHierarchyTreeItem.HierObject.ToControl();
                        //content = new TextBlock { DataContext = obj };
                    }
                    else
                    {
                        if (_parentTree != null && _parentTree.Selector != null)
                        {
                            dt = _parentTree.Selector.SelectTemplate(obj, null);
                        }

                        if (dt == null)
                        {
                            return;
                        }

                        ccLayout.Content = dt.LoadContent();
                    }
                }

                if (isHideStandartIcon)
                {
                    var hidable = ccLayout.Content as IHideStandartIcon;
                    if (hidable != null)
                    {
                        hidable.SetVisibilityStandartIcon(false);
                    }
                }

                var fe = ccLayout.Content as FrameworkElement;
                if (fe != null)
                {
                    if (dt == null)
                    {
                        fe.DataContext = obj;
                    }
                    else
                    {
                        fe.DataContext = freeHierarchyTreeItem;
                    }
                }
                else
                {
                    ccLayout.DataContext = obj;
                }
            }
        }
Example #4
0
        internal static FreeHierTreeItem CreateInserted(int destTreeId, int destFreeHierItemId, FreeHierarchyTreeItem item, bool includeChildren, string nodePath)
        {
            var node = new FreeHierTreeItem
            {
                FreeHierTree_ID       = destTreeId,
                FreeHierItem_ID       = item.FreeHierItem_ID,
                FreeHierIcon_ID       = item.NodeIcon_ID,
                ParentFreeHierItem_ID = destFreeHierItemId,
                FreeHierItemType      = (byte)item.FreeHierItemType,
                NodePath = nodePath //Нужно для сохранения структуры переносимых объектов, строго соблюдать не обязательно
            };

            if (item.HierObject != null)
            {
                node.StringName = item.HierObject.Name;
                if (item.HierObject.Id > 0 && !HierarchyObjectHelper.IsStringId(item.FreeHierItemType))
                {
                    node.ObjectStringID = item.HierObject.Id.ToString();
                }
                else
                {
                    node.ObjectStringID = item.HierObject.StringId;
                }
            }
            else
            {
                node.StringName = item.StringName;
            }

            if (item.FreeHierItemType != EnumFreeHierarchyItemType.XMLSystem)
            {
                node.IncludeObjectChildren = includeChildren;
            }

            return(node);
        }