diff --git a/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.Designer.cs b/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.Designer.cs index 518f13fc4..ab6cc3de3 100644 --- a/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.Designer.cs +++ b/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.Designer.cs @@ -41,6 +41,7 @@ namespace XenAdmin.Wizards.PatchingWizard this.ColumnExpander = new System.Windows.Forms.DataGridViewImageColumn(); this.ColumnPoolIconHostCheck = new System.Windows.Forms.DataGridViewImageColumn(); this.ColumnName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColumnNotes = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.ColumnVersion = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.label1 = new System.Windows.Forms.Label(); this.buttonSelectAll = new System.Windows.Forms.Button(); @@ -77,6 +78,7 @@ namespace XenAdmin.Wizards.PatchingWizard this.ColumnExpander, this.ColumnPoolIconHostCheck, this.ColumnName, + this.ColumnNotes, this.ColumnVersion}); this.tableLayoutPanel1.SetColumnSpan(this.dataGridViewHosts, 2); this.dataGridViewHosts.Name = "dataGridViewHosts"; @@ -105,11 +107,15 @@ namespace XenAdmin.Wizards.PatchingWizard // // ColumnName // - this.ColumnName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ColumnName.FillWeight = 110.2538F; resources.ApplyResources(this.ColumnName, "ColumnName"); this.ColumnName.Name = "ColumnName"; // + // ColumnNotes + // + resources.ApplyResources(this.ColumnNotes, "ColumnNotes"); + this.ColumnNotes.Name = "ColumnNotes"; + this.ColumnNotes.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // // ColumnVersion // this.ColumnVersion.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells; @@ -161,6 +167,7 @@ namespace XenAdmin.Wizards.PatchingWizard private DataGridViewImageColumn ColumnExpander; private DataGridViewImageColumn ColumnPoolIconHostCheck; private DataGridViewTextBoxColumn ColumnName; + private DataGridViewTextBoxColumn ColumnNotes; private DataGridViewTextBoxColumn ColumnVersion; private Label label1; private CheckBox applyUpdatesCheckBox; diff --git a/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs b/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs index 7a877a58f..f19211a8a 100644 --- a/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs +++ b/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs @@ -152,9 +152,8 @@ namespace XenAdmin.Wizards.PatchingWizard { var hostRow = new PatchingHostsDataGridViewRow(host, hasPool, !poolSelectionOnly) {ParentPoolRow = poolRow}; dataGridViewHosts.Rows.Add(hostRow); - string tooltipText; - hostRow.Enabled = CanEnableRow(host, out tooltipText); - hostRow.Cells[3].ToolTipText = tooltipText; + hostRow.Enabled = CanEnableRow(host, out var cannotEnableReason); + hostRow.Notes = cannotEnableReason; //Enable the pool row if (poolRow != null && hostRow.Enabled) @@ -165,7 +164,7 @@ namespace XenAdmin.Wizards.PatchingWizard } if (poolRow != null && !poolRow.Enabled && coordinatorRow != null) - poolRow.Cells[3].ToolTipText = coordinatorRow.Cells[3].ToolTipText; + poolRow.Notes = coordinatorRow.Notes; } // restore server selection @@ -276,8 +275,7 @@ namespace XenAdmin.Wizards.PatchingWizard return false; } - string reason; - if (!IsHostAmongApplicable(host, out reason)) + if (!IsHostAmongApplicable(host, out var reason)) { tooltipText = reason; return false; @@ -349,7 +347,7 @@ namespace XenAdmin.Wizards.PatchingWizard { var nonApplicables = host.Connection.Cache.Hosts.Count(h => !applicableHosts.Contains(h) && !string.IsNullOrEmpty(patchUuidFromAlert) && - !isPatchApplied(patchUuidFromAlert, h)); + !IsPatchApplied(patchUuidFromAlert, h)); if (0 < nonApplicables && nonApplicables < host.Connection.Cache.Hosts.Length) { @@ -361,7 +359,7 @@ namespace XenAdmin.Wizards.PatchingWizard if (!applicableHosts.Contains(host) && !string.IsNullOrEmpty(patchUuidFromAlert)) { - if (isPatchApplied(patchUuidFromAlert, host)) + if (IsPatchApplied(patchUuidFromAlert, host)) { if (ApplyUpdatesToNewVersion) return CanEnableRowAutomatedUpdates(host, out tooltipText); @@ -377,7 +375,7 @@ namespace XenAdmin.Wizards.PatchingWizard return true; } - private bool isPatchApplied(string uuid, Host host) + private bool IsPatchApplied(string uuid, Host host) { if (Helpers.ElyOrGreater(host)) { @@ -654,26 +652,24 @@ namespace XenAdmin.Wizards.PatchingWizard foreach (PatchingHostsDataGridViewRow row in dataGridViewHosts.Rows) { - var host = row.Tag as Host; - if (host != null) + if (row.Tag is Host host) { - string tooltipText; - row.Enabled = CanEnableRow(host, out tooltipText); - row.Cells[3].ToolTipText = tooltipText; + row.Enabled = CanEnableRow(host, out var cannotEnableReason); + row.Notes = cannotEnableReason; if (row.ParentPoolRow != null) { if (row.Enabled) { row.ParentPoolRow.Enabled = true; - row.ParentPoolRow.Cells[3].ToolTipText = null; + row.Notes = null; } if (masterRow == null) { masterRow = row; if (!row.Enabled) - row.ParentPoolRow.Cells[3].ToolTipText = row.Cells[3].ToolTipText; + row.ParentPoolRow.Notes = row.Notes; } } } @@ -841,53 +837,49 @@ namespace XenAdmin.Wizards.PatchingWizard { protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { - Pool pool = value as Pool; - - if (pool != null) - base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); - else + if (value is Pool) { - Host host = value as Host; - if (host != null) + base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); + } + else if (value is Host host) + { + PatchingHostsDataGridViewRow row = (PatchingHostsDataGridViewRow)DataGridView.Rows[RowIndex]; + if (row.HasPool) { - PatchingHostsDataGridViewRow row = (PatchingHostsDataGridViewRow)this.DataGridView.Rows[this.RowIndex]; - if (row.HasPool) + Image hostIcon = Images.GetImage16For(host); + base.Paint(graphics, clipBounds, + new Rectangle(cellBounds.X + 16, cellBounds.Y, cellBounds.Width - 16, + cellBounds.Height), rowIndex, cellState, value, formattedValue, + errorText, cellStyle, advancedBorderStyle, paintParts); + + if ((cellState & DataGridViewElementStates.Selected) != 0 && row.Enabled) { - Image hostIcon = Images.GetImage16For(host); - base.Paint(graphics, clipBounds, - new Rectangle(cellBounds.X + 16, cellBounds.Y, cellBounds.Width - 16, - cellBounds.Height), rowIndex, cellState, value, formattedValue, - errorText, cellStyle, advancedBorderStyle, paintParts); - - if ((cellState & DataGridViewElementStates.Selected) != 0 && row.Enabled) - { - using (var brush = new SolidBrush(DataGridView.DefaultCellStyle.SelectionBackColor)) - graphics.FillRectangle( - brush, cellBounds.X, - cellBounds.Y, hostIcon.Width, cellBounds.Height); - } - else - { - using (var brush = new SolidBrush(DataGridView.DefaultCellStyle.BackColor)) - graphics.FillRectangle(brush, - cellBounds.X, cellBounds.Y, hostIcon.Width, cellBounds.Height); - } - - if (row.Enabled) - graphics.DrawImage(hostIcon, cellBounds.X, cellBounds.Y + 3, hostIcon.Width, - hostIcon.Height); - else - graphics.DrawImage(hostIcon, - new Rectangle(cellBounds.X, cellBounds.Y + 3, - hostIcon.Width, hostIcon.Height), - 0, 0, hostIcon.Width, hostIcon.Height, GraphicsUnit.Pixel, - Drawing.GreyScaleAttributes); + using (var brush = new SolidBrush(DataGridView.DefaultCellStyle.SelectionBackColor)) + graphics.FillRectangle( + brush, cellBounds.X, + cellBounds.Y, hostIcon.Width, cellBounds.Height); } else { - base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, - errorText, cellStyle, advancedBorderStyle, paintParts); + using (var brush = new SolidBrush(DataGridView.DefaultCellStyle.BackColor)) + graphics.FillRectangle(brush, + cellBounds.X, cellBounds.Y, hostIcon.Width, cellBounds.Height); } + + if (row.Enabled) + graphics.DrawImage(hostIcon, cellBounds.X, cellBounds.Y + 3, hostIcon.Width, + hostIcon.Height); + else + graphics.DrawImage(hostIcon, + new Rectangle(cellBounds.X, cellBounds.Y + 3, + hostIcon.Width, hostIcon.Height), + 0, 0, hostIcon.Width, hostIcon.Height, GraphicsUnit.Pixel, + Drawing.GreyScaleAttributes); + } + else + { + base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, + errorText, cellStyle, advancedBorderStyle, paintParts); } } } @@ -927,7 +919,7 @@ namespace XenAdmin.Wizards.PatchingWizard private DataGridViewCell _poolIconHostCheckCell; private DataGridViewTextBoxCell _versionCell; - + private DataGridViewTextBoxCell _notesCell; private readonly bool _showHostCheckBox = true; public PatchingHostsDataGridViewRow(Pool pool) @@ -943,22 +935,15 @@ namespace XenAdmin.Wizards.PatchingWizard SetupCells(); } - public int VersionCellIndex - { - get { return Cells.IndexOf(_versionCell); } - } + public PatchingHostsDataGridViewRow ParentPoolRow { get; set; } - public override bool IsCheckable - { - get { return !HasPool; } - } + public int VersionCellIndex => Cells.IndexOf(_versionCell); + + public override bool IsCheckable => !HasPool; public override bool Enabled { - get - { - return base.Enabled; - } + get => base.Enabled; set { base.Enabled = value; @@ -966,23 +951,18 @@ namespace XenAdmin.Wizards.PatchingWizard } } - public int CheckValue - { - get { - return IsPoolOrStandaloneHost - ? (int) Cells[POOL_CHECKBOX_COL].Value - : (int) Cells[POOL_ICON_HOST_CHECKBOX_COL].Value; - } - } + public int CheckValue => IsPoolOrStandaloneHost + ? (int)Cells[POOL_CHECKBOX_COL].Value + : (int)Cells[POOL_ICON_HOST_CHECKBOX_COL].Value; - public bool IsSelectableHost - { - get { return IsAHostRow && Enabled && (_showHostCheckBox || !HasPool); } - } + public bool IsSelectableHost => IsAHostRow && Enabled && (_showHostCheckBox || !HasPool); - public bool IsSelectablePool + public bool IsSelectablePool => IsAPoolRow && Enabled; + + public string Notes { - get { return IsAPoolRow && Enabled; } + get => _notesCell.Value as string; + set => _notesCell.Value = value; } private void SetupCells() @@ -996,10 +976,11 @@ namespace XenAdmin.Wizards.PatchingWizard _nameCell = new DataGridViewNameCell(); _versionCell = new DataGridViewTextBoxCell(); + _notesCell = new DataGridViewTextBoxCell(); - Cells.AddRange(_expansionCell, _poolCheckBoxCell, _poolIconHostCheckCell, _nameCell, _versionCell); + Cells.AddRange(_expansionCell, _poolCheckBoxCell, _poolIconHostCheckCell, _nameCell, _notesCell, _versionCell); - this.UpdateDetails(); + UpdateDetails(); } private void UpdateDetails() @@ -1040,8 +1021,6 @@ namespace XenAdmin.Wizards.PatchingWizard _poolIconHostCheckCell.Value = Images.GetImage16For((IXenObject)Tag); } } - - public PatchingHostsDataGridViewRow ParentPoolRow { get; set; } } #endregion diff --git a/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.resx b/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.resx index d3328372f..9ed0e8601 100644 --- a/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.resx +++ b/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.resx @@ -198,6 +198,12 @@ Name + + True + + + Notes + True @@ -378,6 +384,12 @@ System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ColumnNotes + + + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + ColumnVersion