diff --git a/OpenNest/Controls/GridStyle.cs b/OpenNest/Controls/GridStyle.cs new file mode 100644 index 00000000..c52f4e44 --- /dev/null +++ b/OpenNest/Controls/GridStyle.cs @@ -0,0 +1,47 @@ +using System.Drawing; +using System.Windows.Forms; + +namespace OpenNest.Controls; + +/// +/// The shared look of every in the desktop app, taken from the +/// database nest browser: flat light headers, faint grid lines, a soft blue selection and +/// fixed row heights. Behaviour (editing, selection mode, column sizing) stays with each grid. +/// +public static class GridStyle +{ + public const int RowHeight = 22; + + private static readonly Color HeaderBackColor = Color.FromArgb(245, 245, 245); + private static readonly Color HeaderForeColor = Color.FromArgb(90, 90, 90); + private static readonly Color SelectionBackColor = Color.FromArgb(204, 228, 247); + private static readonly Color LineColor = Color.FromArgb(230, 230, 230); + + public static T Apply(T grid) where T : DataGridView + { + grid.AllowUserToResizeRows = false; + grid.BackgroundColor = SystemColors.Window; + grid.BorderStyle = BorderStyle.None; + grid.GridColor = LineColor; + grid.EnableHeadersVisualStyles = false; + grid.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; + grid.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; + grid.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + grid.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing; + grid.RowTemplate.Height = RowHeight; + grid.RowTemplate.Resizable = DataGridViewTriState.False; + + grid.DefaultCellStyle.SelectionBackColor = SelectionBackColor; + grid.DefaultCellStyle.SelectionForeColor = Color.Black; + grid.ColumnHeadersDefaultCellStyle.BackColor = HeaderBackColor; + grid.ColumnHeadersDefaultCellStyle.ForeColor = HeaderForeColor; + grid.ColumnHeadersDefaultCellStyle.SelectionBackColor = HeaderBackColor; + grid.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + grid.RowHeadersDefaultCellStyle.BackColor = HeaderBackColor; + grid.RowHeadersDefaultCellStyle.ForeColor = HeaderForeColor; + grid.RowHeadersDefaultCellStyle.SelectionBackColor = SelectionBackColor; + grid.RowHeadersDefaultCellStyle.SelectionForeColor = Color.Black; + grid.RowHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + return grid; + } +} diff --git a/OpenNest/Controls/PostSettingsEditor.cs b/OpenNest/Controls/PostSettingsEditor.cs index 47b6f2ef..0c220428 100644 --- a/OpenNest/Controls/PostSettingsEditor.cs +++ b/OpenNest/Controls/PostSettingsEditor.cs @@ -252,22 +252,18 @@ namespace OpenNest.Controls AddSpanning(grid, label); AddHelp(grid, field.Description, spanning: true); - var table = new DataGridView + var table = GridStyle.Apply(new DataGridView { Dock = DockStyle.Fill, Height = 200, AllowUserToAddRows = true, AllowUserToDeleteRows = true, - AllowUserToResizeRows = false, AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill, - BackgroundColor = SystemColors.Window, - BorderStyle = BorderStyle.FixedSingle, - ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize, RowHeadersWidth = 28, SelectionMode = DataGridViewSelectionMode.FullRowSelect, MultiSelect = true, Margin = new Padding(0, 4, 0, 0), - }; + }); table.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = field.KeyHeader, FillWeight = 65 }); table.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = field.ValueHeader, FillWeight = 35 }); diff --git a/OpenNest/Forms/AutoNestForm.Designer.cs b/OpenNest/Forms/AutoNestForm.Designer.cs index 4fc66d39..207a1108 100644 --- a/OpenNest/Forms/AutoNestForm.Designer.cs +++ b/OpenNest/Forms/AutoNestForm.Designer.cs @@ -84,10 +84,7 @@ namespace OpenNest.Forms // this.partsGrid.AllowUserToAddRows = false; this.partsGrid.AllowUserToDeleteRows = false; - this.partsGrid.AllowUserToResizeRows = false; this.partsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.partsGrid.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.partsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.partsGrid.Location = new System.Drawing.Point(10, 10); this.partsGrid.Name = "partsGrid"; this.partsGrid.RowHeadersVisible = false; @@ -167,10 +164,7 @@ namespace OpenNest.Forms // // plateGrid // - this.plateGrid.AllowUserToResizeRows = false; this.plateGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.plateGrid.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.plateGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.plateGrid.Location = new System.Drawing.Point(10, 22); this.plateGrid.Name = "plateGrid"; this.plateGrid.RowHeadersVisible = true; diff --git a/OpenNest/Forms/AutoNestForm.cs b/OpenNest/Forms/AutoNestForm.cs index 667adda5..f0e8d647 100644 --- a/OpenNest/Forms/AutoNestForm.cs +++ b/OpenNest/Forms/AutoNestForm.cs @@ -4,6 +4,7 @@ using System.ComponentModel; using System.Linq; using System.Text.RegularExpressions; using System.Windows.Forms; +using OpenNest.Controls; using OpenNest.Engine; namespace OpenNest.Forms @@ -19,6 +20,8 @@ namespace OpenNest.Forms public AutoNestForm(Nest nest) { InitializeComponent(); + GridStyle.Apply(partsGrid); + GridStyle.Apply(plateGrid); cancelButton.CausesValidation = false; SetupPartsGrid(); SetupPlateGrid(); diff --git a/OpenNest/Forms/BomImportForm.Designer.cs b/OpenNest/Forms/BomImportForm.Designer.cs index b847ea19..eb7ddcc0 100644 --- a/OpenNest/Forms/BomImportForm.Designer.cs +++ b/OpenNest/Forms/BomImportForm.Designer.cs @@ -271,9 +271,6 @@ namespace OpenNest.Forms dgvParts.AllowUserToAddRows = false; dgvParts.AllowUserToDeleteRows = false; dgvParts.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - dgvParts.BackgroundColor = System.Drawing.SystemColors.Window; - dgvParts.BorderStyle = System.Windows.Forms.BorderStyle.None; - dgvParts.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; dgvParts.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { colItemNum, colFileName, colDescription, colMaterial, colThickness, colQty, colStatus }); dgvParts.Dock = System.Windows.Forms.DockStyle.Fill; dgvParts.Name = "dgvParts"; @@ -367,9 +364,6 @@ namespace OpenNest.Forms dgvGroups.AllowUserToAddRows = false; dgvGroups.AllowUserToDeleteRows = false; dgvGroups.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - dgvGroups.BackgroundColor = System.Drawing.SystemColors.Window; - dgvGroups.BorderStyle = System.Windows.Forms.BorderStyle.None; - dgvGroups.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; dgvGroups.Dock = System.Windows.Forms.DockStyle.Fill; dgvGroups.Name = "dgvGroups"; dgvGroups.RowHeadersVisible = false; diff --git a/OpenNest/Forms/BomImportForm.cs b/OpenNest/Forms/BomImportForm.cs index b1726220..d10b9fd4 100644 --- a/OpenNest/Forms/BomImportForm.cs +++ b/OpenNest/Forms/BomImportForm.cs @@ -5,6 +5,7 @@ using System.Data; using System.Drawing; using System.IO; using System.Windows.Forms; +using OpenNest.Controls; using OpenNest.Data; using OpenNest.IO; using OpenNest.IO.Bom; @@ -24,6 +25,8 @@ namespace OpenNest.Forms public BomImportForm() { InitializeComponent(); + GridStyle.Apply(dgvParts); + GridStyle.Apply(dgvGroups); _parts = new BindingList(); _parts.ListChanged += Parts_ListChanged; dgvParts.AutoGenerateColumns = false; diff --git a/OpenNest/Forms/CuttingInspectionPanel.cs b/OpenNest/Forms/CuttingInspectionPanel.cs index 880bc2ec..e69fa942 100644 --- a/OpenNest/Forms/CuttingInspectionPanel.cs +++ b/OpenNest/Forms/CuttingInspectionPanel.cs @@ -101,7 +101,7 @@ internal sealed class CuttingInspectionPanel : UserControl Visible = false, Text = "LIVE NEST only — reviews overlaps, lead-ins and rapid crossings. Confirm minimum spacing, plate boundaries and final post output separately, before posting." }; - private readonly DataGridView warningGrid = new() + private readonly DataGridView warningGrid = GridStyle.Apply(new DataGridView { Dock = DockStyle.Fill, ReadOnly = true, @@ -111,7 +111,7 @@ internal sealed class CuttingInspectionPanel : UserControl SelectionMode = DataGridViewSelectionMode.FullRowSelect, RowHeadersVisible = false, AutoGenerateColumns = false - }; + }); private ValidationInspectionScope scope; private bool closed; private int generation; diff --git a/OpenNest/Forms/NestHistoryForm.cs b/OpenNest/Forms/NestHistoryForm.cs index 29fce297..3fa28050 100644 --- a/OpenNest/Forms/NestHistoryForm.cs +++ b/OpenNest/Forms/NestHistoryForm.cs @@ -4,6 +4,7 @@ using System.IO; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; +using OpenNest.Controls; using OpenNest.Data; using OpenNest.IO; @@ -118,7 +119,7 @@ public sealed class NestHistoryForm : Form UpdateButtons(); } - private static DataGridView Grid() => new() + private static DataGridView Grid() => GridStyle.Apply(new DataGridView { Dock = DockStyle.Fill, ReadOnly = true, @@ -128,7 +129,7 @@ public sealed class NestHistoryForm : Form SelectionMode = DataGridViewSelectionMode.FullRowSelect, AutoGenerateColumns = false, RowHeadersVisible = false, - }; + }); private NestRecord SelectedRevision => revisions.SelectedRows.Count > 0 ? revisions.SelectedRows[0].Tag as NestRecord : null; diff --git a/OpenNest/Forms/OptionsForm.Designer.cs b/OpenNest/Forms/OptionsForm.Designer.cs index 8fdec50d..b53e4b04 100644 --- a/OpenNest/Forms/OptionsForm.Designer.cs +++ b/OpenNest/Forms/OptionsForm.Designer.cs @@ -152,10 +152,6 @@ // this.strategyGrid.AllowUserToAddRows = false; this.strategyGrid.AllowUserToDeleteRows = false; - this.strategyGrid.AllowUserToResizeRows = false; - this.strategyGrid.BackgroundColor = System.Drawing.SystemColors.Window; - this.strategyGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.strategyGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.strategyGrid.Dock = System.Windows.Forms.DockStyle.Fill; this.strategyGrid.Location = new System.Drawing.Point(3, 18); this.strategyGrid.Name = "strategyGrid"; diff --git a/OpenNest/Forms/OptionsForm.cs b/OpenNest/Forms/OptionsForm.cs index 3483f426..777b1877 100644 --- a/OpenNest/Forms/OptionsForm.cs +++ b/OpenNest/Forms/OptionsForm.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; +using OpenNest.Controls; using OpenNest.Data; using OpenNest.Engine.Strategies; using OpenNest.Properties; @@ -13,6 +14,7 @@ namespace OpenNest.Forms public OptionsForm() { InitializeComponent(); + GridStyle.Apply(strategyGrid); BuildStrategyGrid(); } diff --git a/OpenNest/Forms/SavedNestsForm.cs b/OpenNest/Forms/SavedNestsForm.cs index 2d810f8d..6524d40f 100644 --- a/OpenNest/Forms/SavedNestsForm.cs +++ b/OpenNest/Forms/SavedNestsForm.cs @@ -377,39 +377,17 @@ public sealed class SavedNestsForm : Form private static DataGridView CreateGrid() { - var grid = new DataGridView + return GridStyle.Apply(new DataGridView { Dock = DockStyle.Fill, ReadOnly = true, AllowUserToAddRows = false, AllowUserToDeleteRows = false, - AllowUserToResizeRows = false, SelectionMode = DataGridViewSelectionMode.FullRowSelect, MultiSelect = false, AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None, - BackgroundColor = SystemColors.Window, - BorderStyle = BorderStyle.None, - GridColor = Color.FromArgb(230, 230, 230), - EnableHeadersVisualStyles = false, - ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single, - RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single, - ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize, - RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing, StandardTab = true, - }; - grid.RowTemplate.Height = 22; - grid.DefaultCellStyle.SelectionBackColor = Color.FromArgb(204, 228, 247); - grid.DefaultCellStyle.SelectionForeColor = Color.Black; - grid.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(245, 245, 245); - grid.ColumnHeadersDefaultCellStyle.ForeColor = Color.FromArgb(90, 90, 90); - grid.ColumnHeadersDefaultCellStyle.SelectionBackColor = Color.FromArgb(245, 245, 245); - grid.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; - grid.RowHeadersDefaultCellStyle.BackColor = Color.FromArgb(245, 245, 245); - grid.RowHeadersDefaultCellStyle.ForeColor = Color.FromArgb(90, 90, 90); - grid.RowHeadersDefaultCellStyle.SelectionBackColor = Color.FromArgb(204, 228, 247); - grid.RowHeadersDefaultCellStyle.SelectionForeColor = Color.Black; - grid.RowHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; - return grid; + }); } private static DataGridViewTextBoxColumn AddColumn(