예제 #1
0
        /// <summary>
        /// Переключение состояния чекбоксов операции
        /// </summary>
        /// <param name="nodes">узлы</param>
        /// <param name="checkedMode">выбранные (отмеченные) операции</param>
        private void selectedDevices(List <Node> nodes, ITreeViewItem checkedMode)
        {
            foreach (Node subNode in nodes)
            {
                if (subNode.Tag.ToString() == "TechObject.Mode")
                {
                    Node   parentNode = subNode.Parent;
                    string checkStr   = "{ " + (parentNode.Parent.Nodes.IndexOf(parentNode) + 1).ToString() + ", " +
                                        (nodes.IndexOf(subNode) + 1).ToString() + " }";

                    TechObject.Restriction restriction = checkedMode as TechObject.Restriction;

                    // Если не ограничения, то выходим из функции
                    if (restriction == null)
                    {
                        return;
                    }

                    if (restriction.RestrictDictionary != null)
                    {
                        if (restriction.RestrictDictionary.ContainsKey(parentNode.Parent.Nodes.IndexOf(parentNode) + 1))
                        {
                            if (restriction.RestrictDictionary[
                                    parentNode.Parent.Nodes.IndexOf(parentNode) + 1].Contains(
                                    nodes.IndexOf(subNode) + 1))
                            {
                                subNode.CheckState = CheckState.Checked;

                                // Выставляем состояние родителя
                                RecursiveCheckParent(subNode.Parent);

                                // Выставляем состояние узла
                                RecursiveCheck(subNode);
                            }
                        }
                    }
                }
                selectedDevices(subNode.Nodes.ToList(), checkedMode);
            }
        }
예제 #2
0
        /// <summary>
        /// Обновление дерева на основе текущих устройств проекта.
        /// </summary>
        ///
        /// <param name="techManager">Менеджер техустройств проекта.</param>
        /// <param name="checkedMode">Выбранные операиции.</param>
        private void Refresh(TechObject.TechObjectManager techManager,
                             ITreeViewItem checkedMode, bool showOneNode, ITreeViewItem item)
        {
            modesTreeViewAdv.BeginUpdate();

            modesTreeViewAdv.Model = null;
            modesTreeViewAdv.Refresh();
            TreeModel treeModel = new TreeModel();

            Node root = new Node(techManager.DisplayText[0]);

            root.Tag = techManager.GetType().FullName;
            treeModel.Nodes.Add(root);

            int toNum   = 0;
            int modeNum = 0;

            TechObject.TechObject mainTO = item as TechObject.TechObject;
            //Заполняем узлы дерева устройствами.
            foreach (TechObject.TechObject to in techManager.Objects)
            {
                toNum++;

                Node parentNode = new Node(to.DisplayText[0]);
                parentNode.Tag = to.GetType().FullName;
                root.Nodes.Add(parentNode);

                List <TechObject.Mode> modes = to.GetModesManager.GetModes;

                foreach (TechObject.Mode mode in modes)
                {
                    modeNum++;

                    Node childNode = new Node(mode.DisplayText[0]);
                    childNode.Tag = mode.GetType().FullName;
                    parentNode.Nodes.Add(childNode);

                    string checkedStr;
                    if (checkedMode != null)
                    {
                        checkedStr = checkedMode.EditText[1];
                        TechObject.Restriction restrict = checkedMode as TechObject.Restriction;

                        if (restrict != null)
                        {
                            if (restrict.RestrictDictionary != null)
                            {
                                if (restrict.RestrictDictionary.ContainsKey(toNum))
                                {
                                    if (restrict.RestrictDictionary[toNum].Contains(modeNum))
                                    {
                                        childNode.CheckState = CheckState.Checked;
                                    }
                                    else
                                    {
                                        childNode.CheckState = CheckState.Unchecked;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        checkedStr           = "";
                        childNode.CheckState = CheckState.Unchecked;
                    }
                }

                if (showOneNode == true)
                {
                    if (to != mainTO)
                    {
                        parentNode.IsHidden = true;
                        foreach (Node child in parentNode.Nodes)
                        {
                            child.IsHidden = true;
                        }
                    }
                }
                else
                {
                    if (to == mainTO)
                    {
                        parentNode.IsHidden = true;
                        foreach (Node child in parentNode.Nodes)
                        {
                            child.IsHidden = true;
                        }
                    }
                }
            }

            modesTreeViewAdv.Model = treeModel;
            //Обновляем названия строк (добавляем количество объектов).

            List <TreeNodeAdv> nodes    = modesTreeViewAdv.AllNodes.ToList();
            TreeNodeAdv        treeNode = nodes[0];

            OnHideOperationTree.Execute(treeNode);

            modesTreeViewAdv.ExpandAll();
            modesTreeViewAdv.Refresh();
            modesTreeViewAdv.EndUpdate();
        }