void AddUserRow(ExtUserRightInfo tag)
        {
            int index = dgvUsers.Rows.Add(string.Format(VCAPI.GetPrettyUserName(tag.userInfo)), tag.hasProjectAdminRight,
                                          tag.defaultUnitRight == VCAPI.VC_ACCESS_RIGHTS.UPLOAD ? VC_ACCESS_UPLOAD : (tag.defaultUnitRight == VCAPI.VC_ACCESS_RIGHTS.DOWNLOAD ? VC_ACCESS_DOWNLOAD : VC_ACCESS_NONE));

            dgvUsers.Rows[index].Tag = tag;
        }
        internal VCUsers(VCAPI vcAPI)
        {
            InitializeComponent();

            _vcAPI = vcAPI;

            colRefineRights.Visible  = false;
            colDefaultRight.ReadOnly = false;

            List <UserInfo> userInfos; List <bool> adminRights; List <VCAPI.VC_ACCESS_RIGHTS> defaultRights;

            if (!_vcAPI.GetProjectUserRights(_vcAPI.vc_projectInfo.ProjectId, out userInfos, out adminRights, out defaultRights))
            {
                UserInfoHandler.ShowError(_vcAPI.GetErrorMessage());
                return;
            }

            colDefaultRight.Items.Add(VC_ACCESS_DOWNLOAD); colDefaultRight.Items.Add(VC_ACCESS_UPLOAD);
            for (int i = 0; i < userInfos.Count; ++i)
            {
                ExtUserRightInfo tag = new ExtUserRightInfo {
                    userInfo = userInfos.ElementAt(i)
                };
                tag.defaultUnitRight     = defaultRights.ElementAt(i);
                tag.hasProjectAdminRight = adminRights.ElementAt(i);
                AddUserRow(tag);
            }
        }
        void btnRemoveUsers_Click(object sender, EventArgs e)
        {
            List <ExtUserRightInfo> usersToRemove = new List <ExtUserRightInfo>(); string userNames = string.Empty;

            foreach (DataGridViewRow row in dgvUsers.SelectedRows)
            {
                ExtUserRightInfo extUserInfo = row.Tag as ExtUserRightInfo;
                VCAdministrator.AddUnitToMessage(ref userNames, extUserInfo.userInfo.username);
                if (!extUserInfo.added)
                {
                    usersToRemove.Add(extUserInfo);                     //user only needs to be removed via API if it wasn't added during this session of the dialog
                }
            }

            if (UserInfoHandler.GetInfo("Are you sure you want to remove user(s) " + userNames + " from project?", MessageBoxButtons.OKCancel)
                == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }
            _usersToRemove.AddRange(usersToRemove);
            foreach (DataGridViewRow row in dgvUsers.SelectedRows)
            {
                dgvUsers.Rows.Remove(row);
            }
        }
 void dgvUsers_CellContentClick(object sender, DataGridViewCellEventArgs e)
 {
     if (e.ColumnIndex == colRefineRights.Index)
     {
         ExtUserRightInfo tag = dgvUsers.Rows[e.RowIndex].Tag as ExtUserRightInfo;
         Cursor = Cursors.WaitCursor;
         VCUserUnitRights vcUserUnitRights = new VCUserUnitRights(_vcAPI, tag.userInfo, DefaultUnitRightToInt(dgvUsers.Rows[e.RowIndex]), tag.unitRights);
         Cursor = Cursors.Default;
         if (vcUserUnitRights.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
         {
             return;
         }
         tag.unitRights = vcUserUnitRights.GetChangedRights();
     }
 }
        internal void GetChanges(out List <UserRightInfo> usersToAdd, out List <UserInfo> usersToRemove, out List <UserRightInfo> usersToChange)
        {
            usersToAdd = new List <UserRightInfo>(); usersToRemove = new List <UserInfo>(); usersToChange = new List <UserRightInfo>();
            foreach (DataGridViewRow row in dgvUsers.Rows)
            {
                ExtUserRightInfo tag = row.Tag as ExtUserRightInfo;

                //users to add
                if (tag.added)
                {
                    usersToAdd.Add(new UserRightInfo {
                        userInfo             = tag.userInfo,
                        defaultUnitRight     = DefaultUnitRightToInt(row),
                        hasProjectAdminRight = EM_Helpers.SaveConvertToBoolean(row.Cells[colAdmin.Index].Value),
                        unitRights           = tag.unitRights
                    });
                }
                else
                {
                    //users with changed rights-settings (also includes users to add)
                    bool changed = tag.hasProjectAdminRight != EM_Helpers.SaveConvertToBoolean(row.Cells[colAdmin.Index].Value) || //... compare old and new admin-right ...
                                   DefaultUnitRightToInt(row) != tag.defaultUnitRight;                                             //... and old and new default unit-right ...

                    if (changed)
                    {
                        usersToChange.Add(new UserRightInfo {
                            userInfo             = tag.userInfo,
                            defaultUnitRight     = DefaultUnitRightToInt(row),
                            hasProjectAdminRight = EM_Helpers.SaveConvertToBoolean(row.Cells[colAdmin.Index].Value),
                            unitRights           = tag.unitRights
                        });
                    }
                }
            }

            //users to delete
            foreach (ExtUserRightInfo userRightInfo in _usersToRemove)
            {
                usersToRemove.Add(userRightInfo.userInfo);
            }
        }
        void btnAddUsers_Click(object sender, EventArgs e)
        {
            List <UserInfo> potUserInfos = new List <UserInfo>();
            List <string>   potUserNames = new List <string>();
            List <long>     inProUserIds = new List <long>();
            List <UserInfo> allUsers;

            foreach (DataGridViewRow row in dgvUsers.Rows)
            {
                inProUserIds.Add((row.Tag as ExtUserRightInfo).userInfo.userId);
            }

            if (!_vcAPI.GetAllUsers(out allUsers))
            {
                UserInfoHandler.ShowError(_vcAPI.GetErrorMessage());
                return;
            }

            foreach (UserInfo userInfo in allUsers)
            {
                if (!inProUserIds.Contains(userInfo.userId))
                {
                    potUserInfos.Add(userInfo);
                    potUserNames.Add(string.Format(VCAPI.GetPrettyUserName(userInfo)));
                }
            }

            VCUsersAdd vcUsersAdd = new VCUsersAdd(potUserNames);

            if (vcUsersAdd.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }

            List <int> selectedIndices = vcUsersAdd.GetSelectedIndices();

            if (selectedIndices.Count == 0)
            {
                return;
            }

            foreach (int selIndex in selectedIndices)
            {
                UserInfo         addUserInfo = potUserInfos[selIndex];
                ExtUserRightInfo tag         = null;
                for (int remIndex = 0; remIndex < _usersToRemove.Count; ++remIndex) //check if user was in fact deleted during this section and is now re-added
                {
                    if (_usersToRemove[remIndex].userInfo.userId == addUserInfo.userId)
                    {
                        tag = _usersToRemove[remIndex]; _usersToRemove.RemoveAt(remIndex); break;
                    }
                }
                if (tag == null)
                {
                    tag = new ExtUserRightInfo {
                        userInfo         = addUserInfo, added = true,
                        defaultUnitRight = VCAPI.VC_ACCESS_RIGHTS.DOWNLOAD
                    }
                }
                ;
                AddUserRow(tag);
            }
        }
    }