- Timestamp:
- 07/17/21 18:18:41 (3 years ago)
- Location:
- stable
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk merged: 17223,17268,17273-17274
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Clients.Hive.Administrator
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Clients.Hive.Administrator merged: 17223,17268,17273-17274
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs
r17063 r18017 39 39 this.endLabel = new System.Windows.Forms.Label(); 40 40 this.indefiniteCheckBox = new System.Windows.Forms.CheckBox(); 41 this.createdTextBox = new System.Windows.Forms.TextBox(); 41 this.createdTextBox = new System.Windows.Forms.TextBox(); 42 42 this.toolTip = new System.Windows.Forms.ToolTip(this.components); 43 this.refreshButton = new System.Windows.Forms.Button(); 43 44 this.SuspendLayout(); 44 45 // … … 68 69 this.nameLabel.Name = "nameLabel"; 69 70 this.nameLabel.Size = new System.Drawing.Size(38, 13); 70 this.nameLabel.TabIndex = 0;71 this.nameLabel.TabIndex = 2; 71 72 this.nameLabel.Text = "Name:"; 72 73 // … … 78 79 this.nameTextBox.Name = "nameTextBox"; 79 80 this.nameTextBox.Size = new System.Drawing.Size(464, 20); 80 this.nameTextBox.TabIndex = 2;81 this.nameTextBox.TabIndex = 3; 81 82 this.nameTextBox.TextChanged += new System.EventHandler(this.nameTextBox_TextChanged); 82 83 this.nameTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.nameTextBox_Validating); … … 88 89 this.descriptionLabel.Name = "descriptionLabel"; 89 90 this.descriptionLabel.Size = new System.Drawing.Size(63, 13); 90 this.descriptionLabel.TabIndex = 0;91 this.descriptionLabel.TabIndex = 4; 91 92 this.descriptionLabel.Text = "Description:"; 92 93 // … … 99 100 this.descriptionTextBox.Name = "descriptionTextBox"; 100 101 this.descriptionTextBox.Size = new System.Drawing.Size(464, 98); 101 this.descriptionTextBox.TabIndex = 3;102 this.descriptionTextBox.TabIndex = 5; 102 103 this.descriptionTextBox.TextChanged += new System.EventHandler(this.descriptionTextBox_TextChanged); 103 104 // 104 // ownerLabel105 //106 this.ownerLabel.AutoSize = true;107 this.ownerLabel.Location = new System.Drawing.Point(3, 167);108 this.ownerLabel.Name = "ownerLabel";109 this.ownerLabel.Size = new System.Drawing.Size(41, 13);110 this.ownerLabel.TabIndex = 0;111 this.ownerLabel.Text = "Owner:";112 //113 105 // ownerComboBox 114 106 // 115 //this.ownerComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)116 // | System.Windows.Forms.AnchorStyles.Right)));117 107 this.ownerComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 118 108 this.ownerComboBox.FormattingEnabled = true; … … 120 110 this.ownerComboBox.Name = "ownerComboBox"; 121 111 this.ownerComboBox.Size = new System.Drawing.Size(200, 21); 122 this.ownerComboBox.TabIndex = 4;112 this.ownerComboBox.TabIndex = 7; 123 113 this.ownerComboBox.SelectedIndexChanged += new System.EventHandler(this.ownerComboBox_SelectedIndexChanged); 114 // 115 // ownerLabel 116 // 117 this.ownerLabel.AutoSize = true; 118 this.ownerLabel.Location = new System.Drawing.Point(3, 167); 119 this.ownerLabel.Name = "ownerLabel"; 120 this.ownerLabel.Size = new System.Drawing.Size(41, 13); 121 this.ownerLabel.TabIndex = 6; 122 this.ownerLabel.Text = "Owner:"; 124 123 // 125 124 // createdLabel … … 129 128 this.createdLabel.Name = "createdLabel"; 130 129 this.createdLabel.Size = new System.Drawing.Size(47, 13); 131 this.createdLabel.TabIndex = 8;130 this.createdLabel.TabIndex = 9; 132 131 this.createdLabel.Text = "Created:"; 133 132 // … … 135 134 // 136 135 this.startDateTimePicker.CustomFormat = "ddd, dd.MM.yyyy, HH:mm:ss"; 137 this.startDateTimePicker.Enabled = false;138 136 this.startDateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom; 139 137 this.startDateTimePicker.Location = new System.Drawing.Point(72, 216); 140 138 this.startDateTimePicker.Name = "startDateTimePicker"; 141 139 this.startDateTimePicker.Size = new System.Drawing.Size(200, 20); 142 this.startDateTimePicker.TabIndex = 9;143 this.startDateTimePicker.ValueChanged += new System.EventHandler(this.startDateTimePicker_ValueChanged); 140 this.startDateTimePicker.TabIndex = 12; 141 this.startDateTimePicker.ValueChanged += new System.EventHandler(this.startDateTimePicker_ValueChanged); 144 142 // 145 143 // startLabel … … 149 147 this.startLabel.Name = "startLabel"; 150 148 this.startLabel.Size = new System.Drawing.Size(32, 13); 151 this.startLabel.TabIndex = 1 0;149 this.startLabel.TabIndex = 11; 152 150 this.startLabel.Text = "Start:"; 153 151 // … … 155 153 // 156 154 this.endDateTimePicker.CustomFormat = "ddd, dd.MM.yyyy, HH:mm:ss"; 157 this.endDateTimePicker.Enabled = false;158 155 this.endDateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom; 159 156 this.endDateTimePicker.Location = new System.Drawing.Point(72, 243); 160 157 this.endDateTimePicker.Name = "endDateTimePicker"; 161 158 this.endDateTimePicker.Size = new System.Drawing.Size(200, 20); 162 this.endDateTimePicker.TabIndex = 1 1;159 this.endDateTimePicker.TabIndex = 14; 163 160 this.endDateTimePicker.ValueChanged += new System.EventHandler(this.endDateTimePicker_ValueChanged); 164 161 // … … 169 166 this.endLabel.Name = "endLabel"; 170 167 this.endLabel.Size = new System.Drawing.Size(29, 13); 171 this.endLabel.TabIndex = 1 0;168 this.endLabel.TabIndex = 13; 172 169 this.endLabel.Text = "End:"; 173 170 // … … 178 175 this.indefiniteCheckBox.Name = "indefiniteCheckBox"; 179 176 this.indefiniteCheckBox.Size = new System.Drawing.Size(69, 17); 180 this.indefiniteCheckBox.TabIndex = 1 3;177 this.indefiniteCheckBox.TabIndex = 15; 181 178 this.indefiniteCheckBox.Text = "Indefinite"; 182 179 this.indefiniteCheckBox.UseVisualStyleBackColor = true; … … 189 186 this.createdTextBox.ReadOnly = true; 190 187 this.createdTextBox.Size = new System.Drawing.Size(200, 20); 191 this.createdTextBox.TabIndex = 14; 188 this.createdTextBox.TabIndex = 10; 189 // 190 // refreshButton 191 // 192 this.refreshButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh; 193 this.refreshButton.Location = new System.Drawing.Point(278, 162); 194 this.refreshButton.Name = "refreshButton"; 195 this.refreshButton.Size = new System.Drawing.Size(24, 24); 196 this.refreshButton.TabIndex = 8; 197 this.refreshButton.UseVisualStyleBackColor = true; 198 this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click); 192 199 // 193 200 // ProjectView … … 195 202 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 196 203 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 204 this.Controls.Add(this.refreshButton); 197 205 this.Controls.Add(this.createdTextBox); 198 206 this.Controls.Add(this.indefiniteCheckBox); … … 213 221 this.Size = new System.Drawing.Size(539, 271); 214 222 this.Load += new System.EventHandler(this.ProjectView_Load); 215 this.Disposed += new System.EventHandler(this.ProjectView_Disposed);216 223 this.ResumeLayout(false); 217 224 this.PerformLayout(); … … 235 242 private System.Windows.Forms.Label endLabel; 236 243 private System.Windows.Forms.CheckBox indefiniteCheckBox; 237 private System.Windows.Forms.TextBox createdTextBox; 244 private System.Windows.Forms.TextBox createdTextBox; 238 245 private System.Windows.Forms.ToolTip toolTip; 246 private System.Windows.Forms.Button refreshButton; 239 247 } 240 248 } -
stable/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs
r17181 r18017 28 28 using HeuristicLab.Core.Views; 29 29 using HeuristicLab.MainForm; 30 using Tpl = System.Threading.Tasks; 30 31 31 32 namespace HeuristicLab.Clients.Hive.Administrator.Views { … … 33 34 [Content(typeof(Project), IsDefaultView = true)] 34 35 public partial class ProjectView : ItemView { 35 private readonly object locker = new object();36 37 36 public new Project Content { 38 37 get { return (Project)base.Content; } … … 58 57 } 59 58 60 protected void RegisterControlEvents() {61 nameTextBox.TextChanged += nameTextBox_TextChanged;62 nameTextBox.Validating += nameTextBox_Validating;63 descriptionTextBox.TextChanged += descriptionTextBox_TextChanged;64 ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;65 startDateTimePicker.ValueChanged += startDateTimePicker_ValueChanged;66 endDateTimePicker.ValueChanged += endDateTimePicker_ValueChanged;67 indefiniteCheckBox.CheckedChanged += indefiniteCheckBox_CheckedChanged;68 }69 70 protected void DeregisterControlEvents() {71 nameTextBox.TextChanged -= nameTextBox_TextChanged;72 nameTextBox.Validating -= nameTextBox_Validating;73 descriptionTextBox.TextChanged -= descriptionTextBox_TextChanged;74 ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged;75 startDateTimePicker.ValueChanged -= startDateTimePicker_ValueChanged;76 endDateTimePicker.ValueChanged -= endDateTimePicker_ValueChanged;77 indefiniteCheckBox.CheckedChanged -= indefiniteCheckBox_CheckedChanged;78 }79 80 59 protected override void OnContentChanged() { 81 60 base.OnContentChanged(); 82 DeregisterControlEvents(); 61 UpdateView(); 62 } 63 64 private void UpdateView() { 83 65 if (Content == null) { 84 66 idTextBox.Clear(); … … 94 76 nameTextBox.Text = Content.Name; 95 77 descriptionTextBox.Text = Content.Description; 96 97 ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged; 98 if (AccessClient.Instance.UsersAndGroups != null) { 99 var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>(); 100 if (!Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator)); 101 var projectOwnerId = Content.OwnerUserId; 102 ownerComboBox.DataSource = users.OrderBy(x => x.UserName).ToList(); 103 ownerComboBox.SelectedItem = users.FirstOrDefault(x => x.Id == projectOwnerId); 104 } 105 ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged; 106 78 ownerComboBox.SelectedItem = AccessClient.Instance.UsersAndGroups?.OfType<LightweightUser>().SingleOrDefault(x => x.Id == Content.OwnerUserId); 107 79 createdTextBox.Text = Content.DateCreated.ToString("ddd, dd.MM.yyyy, HH:mm:ss"); 108 80 startDateTimePicker.Value = Content.StartDate; 109 81 endDateTimePicker.Value = Content.EndDate.GetValueOrDefault(Content.StartDate); 110 82 indefiniteCheckBox.Checked = !Content.EndDate.HasValue; 111 if (!indefiniteCheckBox.Checked) endDateTimePicker.Value = Content.EndDate.Value; 112 else endDateTimePicker.Value = Content.StartDate; 113 endDateTimePicker.Enabled = !indefiniteCheckBox.Checked; 114 } 115 SetEnabledStateOfControls(); 116 RegisterControlEvents(); 117 } 118 119 protected override void SetEnabledStateOfControls() { 120 base.SetEnabledStateOfControls(); 121 bool enabled = Content != null && !Locked && !ReadOnly; 122 nameTextBox.Enabled = enabled; 123 descriptionTextBox.Enabled = enabled; 124 ownerComboBox.Enabled = enabled; 125 createdTextBox.Enabled = enabled; 126 startDateTimePicker.Enabled = enabled; 127 endDateTimePicker.Enabled = enabled && Content.EndDate.HasValue; 128 indefiniteCheckBox.Enabled = enabled; 129 130 if (Content != null) { 131 //var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault(); 132 var parentProject = HiveAdminClient.Instance.Projects.FirstOrDefault(x => x.Id == Content.ParentProjectId); 133 if ((!IsAdmin() && (parentProject == null || parentProject.EndDate.HasValue)) 134 || (IsAdmin() && parentProject != null && parentProject.EndDate.HasValue)) { 135 indefiniteCheckBox.Enabled = false; 136 } 137 138 if (Content.Id != Guid.Empty && !IsAdmin() && !HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id)) { 139 ownerComboBox.Enabled = false; 140 startDateTimePicker.Enabled = false; 141 endDateTimePicker.Enabled = false; 142 indefiniteCheckBox.Enabled = false; 143 } 144 } 145 } 146 #endregion 147 148 #region Event Handlers 149 private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) { 150 if (InvokeRequired) Invoke((Action<object, PropertyChangedEventArgs>)Content_PropertyChanged, sender, e); 151 else OnContentChanged(); 152 } 153 154 private void AccessClient_Instance_Refreshing(object sender, EventArgs e) { 155 if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshing, sender, e); 156 else { 157 Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate); 158 SetEnabledStateOfControls(); 159 } 160 } 161 162 private void AccessClient_Instance_Refreshed(object sender, EventArgs e) { 163 if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshed, sender, e); 164 else { 165 Progress.Hide(this); 166 SetEnabledStateOfControls(); 167 } 168 } 169 170 private async void ProjectView_Load(object sender, EventArgs e) { 171 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 172 action: () => UpdateUsers(), 173 finallyCallback: () => { 174 ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged; 175 var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>(); 176 if (Content != null && !Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator)); 177 ownerComboBox.DataSource = users.OrderBy(x => x.UserName).ToList(); 178 ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged; 179 }); 180 } 181 182 private void ProjectView_Disposed(object sender, EventArgs e) { 183 AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed; 184 AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing; 185 } 186 187 private void nameTextBox_Validating(object sender, CancelEventArgs e) { 188 if (string.IsNullOrEmpty(nameTextBox.Text)) { 189 MessageBox.Show( 190 "Project must have a name.", 191 "HeuristicLab Hive Administrator", 192 MessageBoxButtons.OK, 193 MessageBoxIcon.Error); 194 e.Cancel = true; 195 } 196 } 197 198 private void nameTextBox_TextChanged(object sender, EventArgs e) { 199 if (Content != null && Content.Name != nameTextBox.Text) { 200 DeregisterContentEvents(); 201 Content.Name = nameTextBox.Text; 202 RegisterContentEvents(); 203 } 204 } 205 206 private void descriptionTextBox_TextChanged(object sender, EventArgs e) { 207 if (Content != null && Content.Description != descriptionTextBox.Text) { 208 DeregisterContentEvents(); 209 Content.Description = descriptionTextBox.Text; 210 RegisterContentEvents(); 211 } 212 } 213 214 private void ownerComboBox_SelectedIndexChanged(object sender, EventArgs e) { 215 var selectedItem = (LightweightUser)ownerComboBox.SelectedItem; 216 var selectedOwnerUserId = selectedItem != null ? selectedItem.Id : Guid.Empty; 217 if (Content != null && Content.OwnerUserId != selectedOwnerUserId) { 218 DeregisterContentEvents(); 219 Content.OwnerUserId = selectedOwnerUserId; 220 RegisterContentEvents(); 221 } 222 } 223 224 private void startDateTimePicker_ValueChanged(object sender, EventArgs e) { 225 if (Content == null) return; 226 startDateTimePicker.ValueChanged -= startDateTimePicker_ValueChanged; 227 228 if (!IsAdmin()) { 229 var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault(); 230 if (parentProject != null) { 231 if (startDateTimePicker.Value < parentProject.StartDate) 232 startDateTimePicker.Value = parentProject.StartDate; 233 } else { 234 startDateTimePicker.Value = Content.StartDate; 235 } 236 } 237 238 if (!Content.EndDate.HasValue || startDateTimePicker.Value > Content.EndDate) 239 endDateTimePicker.Value = startDateTimePicker.Value; 240 if (Content.StartDate != startDateTimePicker.Value) { 241 DeregisterContentEvents(); 242 Content.StartDate = startDateTimePicker.Value; 243 RegisterContentEvents(); 244 } 245 246 startDateTimePicker.ValueChanged += startDateTimePicker_ValueChanged; 247 } 248 249 private void endDateTimePicker_ValueChanged(object sender, EventArgs e) { 250 if (Content == null) return; 251 endDateTimePicker.ValueChanged -= endDateTimePicker_ValueChanged; 252 253 if (!IsAdmin()) { 254 var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault(); 255 if (parentProject != null) { 256 if (parentProject.EndDate.HasValue && endDateTimePicker.Value > parentProject.EndDate.Value) { 257 endDateTimePicker.Value = parentProject.EndDate.Value; 258 } 259 } else if (Content.EndDate.HasValue) { 260 endDateTimePicker.Value = Content.EndDate.Value; 261 } 262 } 263 264 if (endDateTimePicker.Value < startDateTimePicker.Value) 265 endDateTimePicker.Value = startDateTimePicker.Value; 266 if (Content.EndDate != endDateTimePicker.Value) { 267 DeregisterContentEvents(); 268 Content.EndDate = endDateTimePicker.Value; 269 RegisterContentEvents(); 270 } 271 272 endDateTimePicker.ValueChanged += endDateTimePicker_ValueChanged; 273 } 274 275 private void indefiniteCheckBox_CheckedChanged(object sender, EventArgs e) { 276 if (Content == null) return; 277 278 var newEndDate = indefiniteCheckBox.Checked ? (DateTime?)null : endDateTimePicker.Value; 279 endDateTimePicker.Enabled = !indefiniteCheckBox.Checked; 280 if (Content.EndDate != newEndDate) { 281 DeregisterContentEvents(); 282 Content.EndDate = newEndDate; 283 RegisterContentEvents(); 284 } 285 } 286 #endregion 287 288 #region Helpers 83 } 84 } 85 86 private async Tpl.Task UpdateUsersAsync() { 87 await Tpl.Task.Run(() => UpdateUsers()); 88 } 89 289 90 private void UpdateUsers() { 91 // deregister handler to avoid change of content's owner when data source is updated 92 ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged; 290 93 try { 291 AccessClient.Instance.Refresh(); 94 ownerComboBox.DataSource = null; 95 SecurityExceptionUtil.TryAndReportSecurityExceptions(AccessClient.Instance.Refresh); 96 ownerComboBox.DataSource = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>().OrderBy(x => x.UserName).ToList(); 292 97 } catch (AnonymousUserException) { 293 98 ShowHiveInformationDialog(); 294 } 295 } 296 297 private bool IsAdmin() { 298 return HiveRoles.CheckAdminUserPermissions(); 99 } finally { 100 ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged; 101 } 299 102 } 300 103 … … 307 110 } 308 111 } 112 113 protected override void SetEnabledStateOfControls() { 114 base.SetEnabledStateOfControls(); 115 116 bool enabled = Content != null && !Locked && !ReadOnly; 117 118 nameTextBox.Enabled = enabled; 119 descriptionTextBox.Enabled = enabled; 120 ownerComboBox.Enabled = enabled; 121 refreshButton.Enabled = enabled; 122 createdTextBox.Enabled = enabled; 123 startDateTimePicker.Enabled = enabled; 124 endDateTimePicker.Enabled = enabled && Content.EndDate.HasValue && Content.EndDate > Content.StartDate; 125 indefiniteCheckBox.Enabled = enabled; 126 127 if (Content == null) return; 128 129 var parentProject = HiveAdminClient.Instance.Projects.SingleOrDefault(x => x.Id == Content.ParentProjectId); 130 if (parentProject != null && parentProject.EndDate.HasValue) 131 indefiniteCheckBox.Enabled = false; 132 133 if (Content.Id == Guid.Empty) return; // newly created project 134 if (HiveRoles.CheckAdminUserPermissions()) return; // admins can edit any project 135 if (HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id)) return; // owner can edit project 136 137 // project was already created and user is neither admin nor owner 138 ownerComboBox.Enabled = false; 139 startDateTimePicker.Enabled = false; 140 endDateTimePicker.Enabled = false; 141 indefiniteCheckBox.Enabled = false; 142 } 143 #endregion 144 145 #region Event Handlers 146 private void ProjectView_Load(object sender, EventArgs e) { 147 Locked = true; 148 try { 149 UpdateUsers(); 150 UpdateView(); 151 } finally { 152 Locked = false; 153 } 154 } 155 156 private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) { 157 UpdateView(); 158 } 159 160 private void nameTextBox_TextChanged(object sender, EventArgs e) { 161 if (Content == null || Content.Name == nameTextBox.Text) return; 162 Content.Name = nameTextBox.Text; 163 } 164 165 private void nameTextBox_Validating(object sender, CancelEventArgs e) { 166 if (!string.IsNullOrEmpty(nameTextBox.Text)) return; 167 168 MessageBox.Show("Project must have a name.", "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error); 169 e.Cancel = true; 170 } 171 172 private void descriptionTextBox_TextChanged(object sender, EventArgs e) { 173 if (Content == null || Content.Description == descriptionTextBox.Text) return; 174 Content.Description = descriptionTextBox.Text; 175 } 176 177 private void ownerComboBox_SelectedIndexChanged(object sender, EventArgs e) { 178 if (Content == null) return; 179 180 var selectedItem = (LightweightUser)ownerComboBox.SelectedItem; 181 var selectedOwnerUserId = selectedItem != null ? selectedItem.Id : Guid.Empty; 182 if (Content.OwnerUserId == selectedOwnerUserId) return; 183 184 Content.OwnerUserId = selectedOwnerUserId; 185 } 186 187 private async void refreshButton_Click(object sender, EventArgs e) { 188 Locked = true; 189 try { 190 await UpdateUsersAsync(); 191 UpdateView(); 192 } finally { 193 Locked = false; 194 } 195 } 196 197 private void startDateTimePicker_ValueChanged(object sender, EventArgs e) { 198 if (Content == null || Content.StartDate == startDateTimePicker.Value) return; 199 200 string errorMessage = string.Empty; 201 202 var parentProject = HiveAdminClient.Instance.Projects.SingleOrDefault(x => x.Id == Content.ParentProjectId); 203 if (parentProject != null) { 204 if (startDateTimePicker.Value < parentProject.StartDate) { 205 errorMessage = "Project cannot start before its parent project has started."; 206 } else if (startDateTimePicker.Value > parentProject.EndDate) { 207 errorMessage = "Project cannot start after its parent project has ended."; 208 } 209 } 210 211 if (startDateTimePicker.Value > endDateTimePicker.Value) { 212 errorMessage = "Project cannot start after it ends."; 213 } 214 215 if (!string.IsNullOrEmpty(errorMessage)) { 216 MessageBox.Show(errorMessage, "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error); 217 startDateTimePicker.Value = Content.StartDate; 218 } 219 220 Content.StartDate = startDateTimePicker.Value; 221 } 222 223 private void endDateTimePicker_ValueChanged(object sender, EventArgs e) { 224 if (Content == null || Content.EndDate == endDateTimePicker.Value || Content.StartDate == endDateTimePicker.Value) return; 225 226 string errorMessage = string.Empty; 227 228 var parentProject = HiveAdminClient.Instance.Projects.SingleOrDefault(x => x.Id == Content.ParentProjectId); 229 if (parentProject != null) { 230 if (endDateTimePicker.Value > parentProject.EndDate) { 231 errorMessage = "Project cannot end after its parent project has ended."; 232 } else if (endDateTimePicker.Value < parentProject.StartDate) { 233 errorMessage = "Project cannot end before its parent project has started."; 234 } 235 } 236 237 if (endDateTimePicker.Value < startDateTimePicker.Value) { 238 errorMessage = "Project cannot end after it starts."; 239 } 240 241 if (!string.IsNullOrEmpty(errorMessage)) { 242 MessageBox.Show(errorMessage, "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error); 243 endDateTimePicker.Value = Content.EndDate.GetValueOrDefault(Content.StartDate); 244 } 245 246 Content.EndDate = endDateTimePicker.Value; 247 } 248 249 private void indefiniteCheckBox_CheckedChanged(object sender, EventArgs e) { 250 if (Content == null) return; 251 252 var newEndDate = indefiniteCheckBox.Checked ? (DateTime?)null : endDateTimePicker.Value; 253 254 if (Content.EndDate == newEndDate) return; 255 Content.EndDate = newEndDate; 256 257 endDateTimePicker.Enabled = !indefiniteCheckBox.Checked; 258 } 259 260 private void AccessClient_Instance_Refreshing(object sender, EventArgs e) { 261 if (InvokeRequired) { 262 Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshing, sender, e); 263 return; 264 } 265 266 Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate); 267 SetEnabledStateOfControls(); 268 } 269 270 private void AccessClient_Instance_Refreshed(object sender, EventArgs e) { 271 if (InvokeRequired) { 272 Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshed, sender, e); 273 return; 274 } 275 276 Progress.Hide(this); 277 SetEnabledStateOfControls(); 278 } 309 279 #endregion 310 280 }
Note: See TracChangeset
for help on using the changeset viewer.