private void addHostStripMenuItem_Click(object sender, EventArgs e) { AddHostForm ahf = new AddHostForm(Groups, LastAdditions); if (ahf.ShowDialog() != DialogResult.OK) { return; } LastAdditions = ahf.Membership; Slave NewSlave = new Slave(ahf.HostName, AcceptedCertificates); lock (Slaves) { NewSlave.Connection.OnMessage += Slave_Connection_OnMessage; NewSlave.Connection.OnConnectionState += Slave_Connection_OnState; Slaves.Add(NewSlave); lock (ComputerTree) { Terminal.AddSlave(NewSlave); string Display = NewSlave.HostName + " (Disconnected)"; TreeNode SlaveNode = new TreeNode(Display); SlaveNode.Tag = NewSlave; HostNodes.Nodes.Add(SlaveNode); foreach (HostGroup Group in LastAdditions) { Group.Slaves.Add(NewSlave); List <TreeNode> Instances = FindAllInstancesOfGroup(Group.Name); foreach (TreeNode tn in Instances) { TreeNode GNode = new TreeNode(Display); GNode.Tag = NewSlave; tn.Nodes.Add(GNode); tn.Text = Group.GetDisplayText(); } } Legend.Invalidate(); } } SaveHostListToRegistry(); SaveGroupListToRegistry(); }
private void OnEditMembership_MenuItemClick(object sender, EventArgs e) { if (ContextNode == null) { return; } Slave ss = ContextNode.Tag as Slave; if (ss == null) { return; } List <HostGroup> Memberships = new List <HostGroup>(); lock (Slaves) { lock (ComputerTree) { foreach (TreeNode v in GroupNodes.Nodes) { HostGroup Group = v.Tag as HostGroup; if (Group.Slaves.Contains(ss)) { Memberships.Add(Group); } } } } AddHostForm ahf = new AddHostForm(Groups, Memberships); ahf.HostName = ss.HostName; if (ahf.ShowDialog() != DialogResult.OK) { return; } Memberships = ahf.Membership; lock (Slaves) { lock (ComputerTree) { List <TreeNode> ExistingInstances = FindAllInstancesOfSlave(ss.HostName); foreach (TreeNode tnGroup in GroupNodes.Nodes) { HostGroup Group = (HostGroup)tnGroup.Tag; if (Memberships.Contains(Group)) { if (!Group.Slaves.Contains(ss)) { // New membership added... Group.Slaves.Add(ss); TreeNode GNode = new TreeNode(ContextNode.Text); GNode.Tag = ss; tnGroup.Nodes.Add(GNode); tnGroup.Text = Group.GetDisplayText(); } } else { if (Group.Slaves.Contains(ss)) { // Existing membership revoked... Group.Slaves.Remove(ss); List <TreeNode> hits = new List <TreeNode>(); foreach (TreeNode tnHosts in tnGroup.Nodes) { if (((Slave)tnHosts.Tag).HostName == ss.HostName) { hits.Add(tnHosts); } } foreach (TreeNode tn in hits) { tnGroup.Nodes.Remove(tn); } tnGroup.Text = Group.GetDisplayText(); } } } Legend.Invalidate(); } } SaveHostListToRegistry(); SaveGroupListToRegistry(); }