Changeset 15412 for branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs
- Timestamp:
- 10/07/17 10:32:07 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs
r15401 r15412 104 104 removeButton.Enabled = enabled; 105 105 saveProjectButton.Enabled = enabled; 106 savePermissionsButton.Enabled = enabled && permissionsView. FetchSelectedUsers != null;107 permissionsView.Enabled = enabled && permissionsView. FetchSelectedUsers != null;106 savePermissionsButton.Enabled = enabled && permissionsView.Content != null && permissionsView.FetchSelectedUsers != null; 107 permissionsView.Enabled = enabled && permissionsView.Content != null && permissionsView.FetchSelectedUsers != null; 108 108 } 109 109 #endregion … … 111 111 #region Event Handlers 112 112 private void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<Project>> e) { 113 OnContentChanged(); 113 if (InvokeRequired) Invoke((Action<object, CollectionItemsChangedEventArgs<IndexedItem<Project>>>)Content_ItemsAdded, sender, e); 114 else { 115 OnContentChanged(); 116 } 114 117 } 115 118 116 119 private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Project>> e) { 117 OnContentChanged(); 120 if (InvokeRequired) Invoke((Action<object, CollectionItemsChangedEventArgs<IndexedItem<Project>>>)Content_ItemsRemoved, sender, e); 121 else { 122 OnContentChanged(); 123 } 118 124 } 119 125 120 126 private void ProjectViewContent_PropertyChanged(object sender, PropertyChangedEventArgs e) { 121 OnContentChanged(); 127 if (InvokeRequired) Invoke((Action<object, PropertyChangedEventArgs>)ProjectViewContent_PropertyChanged, sender, e); 128 else { 129 OnContentChanged(); 130 } 122 131 } 123 132 … … 159 168 160 169 private async void ProjectsView_Load(object sender, EventArgs e) { 161 lock (locker) {162 if (updatingProjects) return;163 updatingProjects = true;164 }165 166 170 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 167 171 action: () => UpdateProjects(), 168 finallyCallback: () => updatingProjects = false);172 finallyCallback: () => Content = HiveAdminClient.Instance.Projects); 169 173 } 170 174 … … 177 181 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 178 182 action: () => UpdateProjects(), 179 finallyCallback: () => updatingProjects = false); 183 finallyCallback: () => { 184 Content = HiveAdminClient.Instance.Projects; 185 updatingProjects = false; 186 }); 180 187 } 181 188 … … 194 201 } 195 202 196 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 197 action: () => RemoveProject(), 198 finallyCallback: () => removingProjects = false); 203 var selectedNode = projectsTreeView.SelectedNode; 204 if (selectedNode == null || selectedNode.Tag == null) return; 205 206 var project = (Project)selectedNode.Tag; 207 var result = MessageBox.Show( 208 "Do you really want to delete " + project.Name + "?", 209 "HeuristicLab Hive Administrator", 210 MessageBoxButtons.YesNo, 211 MessageBoxIcon.Question); 212 213 if (result == DialogResult.Yes) { 214 if (Content.Any(x => x.ParentProjectId == project.Id)) { 215 MessageBox.Show( 216 "Only empty projects can be deleted.", 217 "HeuristicLab Hive Administrator", 218 MessageBoxButtons.OK, 219 MessageBoxIcon.Error); 220 } else { 221 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 222 action: () => RemoveProject(project), 223 finallyCallback: () => { 224 Content.Remove(project); 225 removingProjects = false; 226 }); 227 } 228 } 199 229 } 200 230 … … 222 252 projectView.Content = selectedProject; 223 253 224 selectedProject.PropertyChanged += ProjectViewContent_PropertyChanged; 225 226 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 227 action: () => UpdatePermissions()); 254 if (selectedProject != null) 255 selectedProject.PropertyChanged += ProjectViewContent_PropertyChanged; 256 257 if (IsAuthorized(selectedProject)) { 258 if (!tabControl.TabPages.Contains(permissionsTabPage)) 259 tabControl.TabPages.Add(permissionsTabPage); 260 261 permissionsView.FetchSelectedUsers = () => 262 HiveServiceLocator.Instance.CallHiveService(s => s.GetProjectPermissions(selectedProject.Id)) 263 .Select(x => x.GrantedUserId) 264 .ToList(); 265 266 if (tabControl.SelectedIndex == 1 && permissionsView.Content != null && permissionsView.FetchSelectedUsers != null) 267 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 268 action: () => UpdatePermissions()); 269 } else { 270 if (tabControl.TabPages.Contains(permissionsTabPage)) 271 tabControl.TabPages.Remove(permissionsTabPage); 272 permissionsView.FetchSelectedUsers = null; 273 } 228 274 } 229 275 … … 273 319 } 274 320 275 private void tabControl_SelectedIndexChanged(object sender, EventArgs e) {276 if (tabControl.SelectedIndex == 1 ) {277 UpdatePermissions();278 }321 private async void tabControl_SelectedIndexChanged(object sender, EventArgs e) { 322 if (tabControl.SelectedIndex == 1 && permissionsView.Content != null && permissionsView.FetchSelectedUsers != null) 323 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 324 action: () => UpdatePermissions()); 279 325 } 280 326 … … 341 387 private void UpdateProjects() { 342 388 try { 343 389 HiveAdminClient.Instance.Refresh(); 344 390 } catch (AnonymousUserException) { 345 391 ShowHiveInformationDialog(); 346 392 } 347 HiveAdminClient.Instance.Refresh(); 348 Content = HiveAdminClient.Instance.Projects; 349 } 350 351 private void RemoveProject() { 352 var selectedNode = projectsTreeView.SelectedNode; 353 if (selectedNode == null || selectedNode.Tag == null) return; 354 355 var project = (Project)selectedNode.Tag; 356 var result = MessageBox.Show( 357 "Do you really want to delete " + project.Name + "?", 358 "HeuristicLab Hive Administrator", 359 MessageBoxButtons.YesNo, 360 MessageBoxIcon.Question); 361 362 if (result == DialogResult.Yes) { 363 if (Content.Any(x => x.ParentProjectId == project.Id)) { 364 MessageBox.Show( 365 "Only empty projects can be deleted.", 366 "HeuristicLab Hive Administrator", 367 MessageBoxButtons.OK, 368 MessageBoxIcon.Error); 369 } else { 370 Content.Remove(project); 371 HiveAdminClient.Delete(project); 372 } 393 } 394 395 private void RemoveProject(Project project) { 396 try { 397 HiveAdminClient.Delete(project); 398 } catch (AnonymousUserException) { 399 ShowHiveInformationDialog(); 373 400 } 374 401 } 375 402 376 403 private void UpdatePermissions() { 377 var selectedNode = projectsTreeView.SelectedNode; 378 var project = (Project)selectedNode?.Tag; 379 380 if (IsAuthorized(project)) { 381 permissionsView.FetchSelectedUsers = () => 382 HiveServiceLocator.Instance.CallHiveService(s => s.GetProjectPermissions(project.Id)) 383 .Select(x => x.GrantedUserId) 384 .ToList(); 385 386 savePermissionsButton.Enabled = true; 387 388 if (!tabControl.TabPages.Contains(permissionsTabPage)) 389 tabControl.TabPages.Add(permissionsTabPage); 390 391 if (tabControl.SelectedIndex == 1 && permissionsView.Content != null && permissionsView.FetchSelectedUsers != null) 392 permissionsView.ManualRefresh(); 393 } else { 394 permissionsView.FetchSelectedUsers = null; 395 savePermissionsButton.Enabled = false; 396 397 if (tabControl.TabPages.Contains(permissionsTabPage)) 398 tabControl.TabPages.Remove(permissionsTabPage); 404 try { 405 permissionsView.ManualRefresh(); 406 } catch (AnonymousUserException) { 407 ShowHiveInformationDialog(); 399 408 } 400 409 }
Note: See TracChangeset
for help on using the changeset viewer.