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(