private bool changesMade() { foreach (DataGridViewRow r in gridRoles.Rows) { Role role = r.Tag as Role; DataGridViewCheckBoxCellEx c = r.Cells[0] as DataGridViewCheckBoxCellEx; if (c.CheckState == CheckState.Checked && roleAssignment[role].Count < subjects.Length) { return(true); } else if (c.CheckState == CheckState.Unchecked && roleAssignment[role].Count > 0) { return(true); } // Don't care about intermediate values, it's not possible to set them in the dialog } return(false); }
public RoleSelectionDialog(Subject[] subjects, Pool pool) : this() { this.subjects = subjects; this.pool = pool; roleAssignment = new Dictionary<Role,List<Subject>>(); if (subjects.Length == 1) { Subject subject = subjects[0]; string sName = (subject.DisplayName ?? subject.SubjectName ?? Messages.UNKNOWN_AD_USER).Ellipsise(30); if (subject.IsGroup) { labelBlurb.Text = String.Format(Messages.AD_SELECT_ROLE_GROUP, sName); pictureBoxSubjectType.Image = XenAdmin.Properties.Resources._000_UserAndGroup_h32bit_32; } else { labelBlurb.Text = String.Format(Messages.AD_SELECT_ROLE_USER, sName); pictureBoxSubjectType.Image = XenAdmin.Properties.Resources._000_User_h32bit_16; } } else { labelBlurb.Text = Messages.AD_SELECT_ROLE_MIXED; pictureBoxSubjectType.Image = XenAdmin.Properties.Resources._000_User_h32bit_16; } // Get the list of roles off the server and arrange them into rank List<Role> serverRoles = new List<Role>(pool.Connection.Cache.Roles); //hide basic permissions, we only want the roles. serverRoles.RemoveAll(delegate(Role r){return r.subroles.Count < 1;}); serverRoles.Sort(); serverRoles.Reverse(); foreach (Role r in serverRoles) { roleAssignment.Add(r, new List<Subject>()); } foreach (Subject s in subjects) { List<Role> subjectRoles = (List<Role>)pool.Connection.ResolveAll<Role>(s.roles); foreach (Role r in subjectRoles) { roleAssignment[r].Add(s); } } foreach (Role role in serverRoles) { DataGridViewRow r = new DataGridViewRow(); DataGridViewCheckBoxCellEx c1 = new DataGridViewCheckBoxCellEx(); c1.ThreeState = true; if (roleAssignment[role].Count == subjects.Length) { c1.Value = CheckState.Checked; c1.CheckState = CheckState.Checked; } else if (roleAssignment[role].Count == 0) { c1.Value = CheckState.Unchecked; c1.CheckState = CheckState.Unchecked; } else { c1.Value = CheckState.Indeterminate; c1.CheckState = CheckState.Indeterminate; } DataGridViewTextBoxCell c2 = new DataGridViewTextBoxCell(); c2.Value = role.FriendlyName; r.Cells.Add(c1); r.Cells.Add(c2); r.Tag = role; gridRoles.Rows.Add(r); } setRoleDescription(); }
public RoleSelectionDialog(IXenConnection connection, Subject[] subjects) { InitializeComponent(); _connection = connection; this.subjects = subjects; roleAssignment = new Dictionary <Role, List <Subject> >(); var allAreGroups = subjects.Length > 0 && subjects.All(s => s.IsGroup); var allAreUsers = subjects.Length > 0 && subjects.All(s => !s.IsGroup); pictureBoxSubjectType.Image = allAreUsers ? Properties.Resources._000_User_h32bit_16 : Properties.Resources._000_UserAndGroup_h32bit_32; if (subjects.Length == 1) { Subject subject = subjects[0]; string sName = (subject.DisplayName ?? subject.SubjectName ?? Messages.UNKNOWN_AD_USER).Ellipsise(30); labelBlurb.Text = string.Format(allAreGroups ? Messages.AD_SELECT_ROLE_GROUP : Messages.AD_SELECT_ROLE_USER, sName); } else { if (allAreGroups) { labelBlurb.Text = Messages.AD_SELECT_ROLE_GROUP_MANY; } else if (allAreUsers) { labelBlurb.Text = Messages.AD_SELECT_ROLE_USER_MANY; } else { labelBlurb.Text = Messages.AD_SELECT_ROLE_MIXED; } } // Get the list of roles off the server and arrange them into rank List <Role> serverRoles = new List <Role>(_connection.Cache.Roles); //hide basic permissions, we only want the roles. serverRoles.RemoveAll(delegate(Role r){ return(r.subroles.Count < 1); }); serverRoles.Sort(); serverRoles.Reverse(); foreach (Role r in serverRoles) { roleAssignment.Add(r, new List <Subject>()); } foreach (Subject s in subjects) { List <Role> subjectRoles = _connection.ResolveAll(s.roles); foreach (Role r in subjectRoles) { roleAssignment[r].Add(s); } } foreach (Role role in serverRoles) { DataGridViewRow r = new DataGridViewRow(); DataGridViewCheckBoxCellEx c1 = new DataGridViewCheckBoxCellEx(); c1.ThreeState = true; if (roleAssignment[role].Count == subjects.Length) { c1.Value = CheckState.Checked; c1.CheckState = CheckState.Checked; } else if (roleAssignment[role].Count == 0) { c1.Value = CheckState.Unchecked; c1.CheckState = CheckState.Unchecked; } else { c1.Value = CheckState.Indeterminate; c1.CheckState = CheckState.Indeterminate; } DataGridViewTextBoxCell c2 = new DataGridViewTextBoxCell(); c2.Value = role.FriendlyName(); r.Cells.Add(c1); r.Cells.Add(c2); r.Tag = role; gridRoles.Rows.Add(r); } setRoleDescription(); }