/// <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); } }
/// <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(); }