/// <summary> /// Adds a new subscription item to the configuration. /// </summary> private void AddItemToSubscription(ServerNodeTag serverNodeTag) { // create new monitored item ItemConfig itemConfig = new() { NodeID = serverNodeTag.NodeIdStr, DisplayName = serverNodeTag.DisplayName, TagCode = GetTagCode(serverNodeTag), Tag = new ItemConfigTag(0) }; if (GetDataTypeName(serverNodeTag.NodeId, out string dataTypeName)) { itemConfig.DataTypeName = dataTypeName; } // find subscription TreeNode deviceNode = tvDevice.SelectedNode; TreeNode subscriptionNode = deviceNode?.FindClosest(typeof(SubscriptionConfig)) ?? subscriptionsNode.LastNode; SubscriptionConfig subscriptionConfig; // add new subscription if (subscriptionNode == null) { subscriptionConfig = new SubscriptionConfig(); subscriptionNode = CreateSubscriptionNode(subscriptionConfig); tvDevice.Insert(subscriptionsNode, subscriptionNode, deviceConfig.Subscriptions, subscriptionConfig); } else { subscriptionConfig = (SubscriptionConfig)subscriptionNode.Tag; } // add monitored item TreeNode itemNode = CreateItemNode(itemConfig); tvDevice.Insert(subscriptionNode, itemNode, subscriptionConfig.Items, itemConfig); UpdateTagNums(itemNode); Modified = true; }
/// <summary> /// Fills the device tree. /// </summary> private void FillDeviceTree() { try { tvDevice.BeginUpdate(); tvDevice.Nodes.Clear(); subscriptionsNode = TreeViewUtils.CreateNode(KpPhrases.SubscriptionsNode, FolderClosedImageKey); commandsNode = TreeViewUtils.CreateNode(KpPhrases.CommandsNode, FolderClosedImageKey); int signal = 1; foreach (SubscriptionConfig subscriptionConfig in deviceConfig.Subscriptions) { TreeNode subscriptionNode = CreateSubscriptionNode(subscriptionConfig); subscriptionsNode.Nodes.Add(subscriptionNode); foreach (ItemConfig itemConfig in subscriptionConfig.Items) { subscriptionNode.Nodes.Add(CreateItemNode(itemConfig)); ItemConfigTag tag = new ItemConfigTag(signal, itemConfig.IsArray, itemConfig.ArrayLen); signal += tag.Length; itemConfig.Tag = tag; } } foreach (CommandConfig commandConfig in deviceConfig.Commands) { commandsNode.Nodes.Add(CreateCommandNode(commandConfig)); } tvDevice.Nodes.Add(subscriptionsNode); tvDevice.Nodes.Add(commandsNode); subscriptionsNode.Expand(); commandsNode.Expand(); } finally { tvDevice.EndUpdate(); } }