feat: Add material shape dropdown and Save As button to MainForm

UI improvements:
- Add material shape dropdown (Round Tube, Square Tube, Angle, etc.)
- Add Save As toolbar button for saving to a new file
- Simplify toolbar button styling (show text with icons)
- Expose SelectedMaterialShape property for report generation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-01 21:56:42 -05:00
parent b0c9470bb7
commit fa36d82285
2 changed files with 89 additions and 36 deletions

View File

@@ -43,6 +43,7 @@
newDocumentButton = new ToolStripButton(); newDocumentButton = new ToolStripButton();
openFileButton = new ToolStripButton(); openFileButton = new ToolStripButton();
saveButton = new ToolStripButton(); saveButton = new ToolStripButton();
saveAsButton = new ToolStripButton();
toolStripSeparator1 = new ToolStripSeparator(); toolStripSeparator1 = new ToolStripSeparator();
runButton = new ToolStripButton(); runButton = new ToolStripButton();
loadExampleDataButton = new ToolStripButton(); loadExampleDataButton = new ToolStripButton();
@@ -50,6 +51,8 @@
cutWidthTextBox = new TextBox(); cutWidthTextBox = new TextBox();
cutMethodLabel = new Label(); cutMethodLabel = new Label();
cutWidthLabel = new Label(); cutWidthLabel = new Label();
materialShapeComboBox = new ComboBox();
materialShapeLabel = new Label();
tabControl1 = new TabControl(); tabControl1 = new TabControl();
tabPage2 = new TabPage(); tabPage2 = new TabPage();
tabPage1 = new TabPage(); tabPage1 = new TabPage();
@@ -59,6 +62,8 @@
TotalLengthString = new DataGridViewTextBoxColumn(); TotalLengthString = new DataGridViewTextBoxColumn();
priorityDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); priorityDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
binInputItemBindingSource = new BindingSource(components); binInputItemBindingSource = new BindingSource(components);
toolStripSeparator2 = new ToolStripSeparator();
toolStripSeparator3 = new ToolStripSeparator();
((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit();
((System.ComponentModel.ISupportInitialize)itemBindingSource).BeginInit(); ((System.ComponentModel.ISupportInitialize)itemBindingSource).BeginInit();
toolStrip1.SuspendLayout(); toolStrip1.SuspendLayout();
@@ -137,63 +142,55 @@
// //
// toolStrip1 // toolStrip1
// //
toolStrip1.Items.AddRange(new ToolStripItem[] { newDocumentButton, openFileButton, saveButton, toolStripSeparator1, runButton, loadExampleDataButton }); toolStrip1.Items.AddRange(new ToolStripItem[] { newDocumentButton, toolStripSeparator3, openFileButton, toolStripSeparator2, saveButton, saveAsButton, toolStripSeparator1, runButton, loadExampleDataButton });
toolStrip1.Location = new Point(0, 0); toolStrip1.Location = new Point(0, 0);
toolStrip1.Name = "toolStrip1"; toolStrip1.Name = "toolStrip1";
toolStrip1.Size = new Size(844, 39); toolStrip1.Size = new Size(844, 25);
toolStrip1.TabIndex = 0; toolStrip1.TabIndex = 0;
toolStrip1.Text = "toolStrip1"; toolStrip1.Text = "toolStrip1";
// //
// newDocumentButton // newDocumentButton
// //
newDocumentButton.DisplayStyle = ToolStripItemDisplayStyle.Image;
newDocumentButton.Image = Properties.Resources.gnome_document_new; newDocumentButton.Image = Properties.Resources.gnome_document_new;
newDocumentButton.ImageScaling = ToolStripItemImageScaling.None;
newDocumentButton.ImageTransparentColor = Color.Magenta;
newDocumentButton.Name = "newDocumentButton"; newDocumentButton.Name = "newDocumentButton";
newDocumentButton.Padding = new Padding(5, 0, 5, 0); newDocumentButton.Size = new Size(51, 22);
newDocumentButton.Size = new Size(46, 36);
newDocumentButton.Text = "New"; newDocumentButton.Text = "New";
newDocumentButton.Click += newDocumentButton_Click; newDocumentButton.Click += newDocumentButton_Click;
// //
// openFileButton // openFileButton
// //
openFileButton.DisplayStyle = ToolStripItemDisplayStyle.Image;
openFileButton.Image = Properties.Resources.Open_Folder_32; openFileButton.Image = Properties.Resources.Open_Folder_32;
openFileButton.ImageScaling = ToolStripItemImageScaling.None;
openFileButton.ImageTransparentColor = Color.Magenta;
openFileButton.Name = "openFileButton"; openFileButton.Name = "openFileButton";
openFileButton.Padding = new Padding(5, 0, 5, 0); openFileButton.Size = new Size(56, 22);
openFileButton.Size = new Size(46, 36);
openFileButton.Text = "Open"; openFileButton.Text = "Open";
openFileButton.Click += openFileButton_Click; openFileButton.Click += openFileButton_Click;
// //
// saveButton // saveButton
// //
saveButton.DisplayStyle = ToolStripItemDisplayStyle.Image;
saveButton.Image = Properties.Resources.Save_32; saveButton.Image = Properties.Resources.Save_32;
saveButton.ImageScaling = ToolStripItemImageScaling.None;
saveButton.ImageTransparentColor = Color.Magenta;
saveButton.Name = "saveButton"; saveButton.Name = "saveButton";
saveButton.Padding = new Padding(5, 0, 5, 0); saveButton.Size = new Size(51, 22);
saveButton.Size = new Size(46, 36);
saveButton.Text = "Save"; saveButton.Text = "Save";
saveButton.Click += saveButton_Click; saveButton.Click += saveButton_Click;
// //
// saveAsButton
//
saveAsButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
saveAsButton.Name = "saveAsButton";
saveAsButton.Size = new Size(51, 22);
saveAsButton.Text = "Save As";
saveAsButton.Click += saveAsButton_Click;
//
// toolStripSeparator1 // toolStripSeparator1
// //
toolStripSeparator1.Name = "toolStripSeparator1"; toolStripSeparator1.Name = "toolStripSeparator1";
toolStripSeparator1.Size = new Size(6, 39); toolStripSeparator1.Size = new Size(6, 25);
// //
// runButton // runButton
// //
runButton.DisplayStyle = ToolStripItemDisplayStyle.Image;
runButton.Image = Properties.Resources.Circled_Play_32; runButton.Image = Properties.Resources.Circled_Play_32;
runButton.ImageScaling = ToolStripItemImageScaling.None;
runButton.ImageTransparentColor = Color.Magenta;
runButton.Name = "runButton"; runButton.Name = "runButton";
runButton.Padding = new Padding(5, 0, 5, 0); runButton.Size = new Size(48, 22);
runButton.Size = new Size(46, 36);
runButton.Text = "Run"; runButton.Text = "Run";
runButton.Click += runButton_Click; runButton.Click += runButton_Click;
// //
@@ -202,12 +199,8 @@
loadExampleDataButton.Alignment = ToolStripItemAlignment.Right; loadExampleDataButton.Alignment = ToolStripItemAlignment.Right;
loadExampleDataButton.DisplayStyle = ToolStripItemDisplayStyle.Text; loadExampleDataButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
loadExampleDataButton.ForeColor = Color.DimGray; loadExampleDataButton.ForeColor = Color.DimGray;
loadExampleDataButton.Image = Properties.Resources.Circled_Play_32;
loadExampleDataButton.ImageScaling = ToolStripItemImageScaling.None;
loadExampleDataButton.ImageTransparentColor = Color.Magenta;
loadExampleDataButton.Name = "loadExampleDataButton"; loadExampleDataButton.Name = "loadExampleDataButton";
loadExampleDataButton.Padding = new Padding(5, 0, 5, 0); loadExampleDataButton.Size = new Size(111, 22);
loadExampleDataButton.Size = new Size(122, 36);
loadExampleDataButton.Text = "Load Example Data"; loadExampleDataButton.Text = "Load Example Data";
loadExampleDataButton.Click += loadExampleDataButton_Click; loadExampleDataButton.Click += loadExampleDataButton_Click;
// //
@@ -251,6 +244,26 @@
cutWidthLabel.TabIndex = 8; cutWidthLabel.TabIndex = 8;
cutWidthLabel.Text = "Cut width"; cutWidthLabel.Text = "Cut width";
// //
// materialShapeLabel
//
materialShapeLabel.AutoSize = true;
materialShapeLabel.Font = new Font("Segoe UI Semibold", 9.75F, FontStyle.Bold, GraphicsUnit.Point, 0);
materialShapeLabel.ForeColor = Color.Blue;
materialShapeLabel.Location = new Point(310, 25);
materialShapeLabel.Name = "materialShapeLabel";
materialShapeLabel.Size = new Size(56, 17);
materialShapeLabel.TabIndex = 13;
materialShapeLabel.Text = "Material";
//
// materialShapeComboBox
//
materialShapeComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
materialShapeComboBox.FormattingEnabled = true;
materialShapeComboBox.Location = new Point(372, 22);
materialShapeComboBox.Name = "materialShapeComboBox";
materialShapeComboBox.Size = new Size(184, 25);
materialShapeComboBox.TabIndex = 14;
//
// tabControl1 // tabControl1
// //
tabControl1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; tabControl1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
@@ -277,14 +290,16 @@
// tabPage1 // tabPage1
// //
tabPage1.Controls.Add(dataGridView2); tabPage1.Controls.Add(dataGridView2);
tabPage1.Controls.Add(materialShapeComboBox);
tabPage1.Controls.Add(materialShapeLabel);
tabPage1.Controls.Add(cutWidthTextBox); tabPage1.Controls.Add(cutWidthTextBox);
tabPage1.Controls.Add(cutMethodComboBox); tabPage1.Controls.Add(cutMethodComboBox);
tabPage1.Controls.Add(cutWidthLabel); tabPage1.Controls.Add(cutWidthLabel);
tabPage1.Controls.Add(cutMethodLabel); tabPage1.Controls.Add(cutMethodLabel);
tabPage1.Location = new Point(4, 26); tabPage1.Location = new Point(4, 24);
tabPage1.Name = "tabPage1"; tabPage1.Name = "tabPage1";
tabPage1.Padding = new Padding(3); tabPage1.Padding = new Padding(3);
tabPage1.Size = new Size(812, 579); tabPage1.Size = new Size(812, 581);
tabPage1.TabIndex = 0; tabPage1.TabIndex = 0;
tabPage1.Text = "STOCK LENGTHS"; tabPage1.Text = "STOCK LENGTHS";
tabPage1.UseVisualStyleBackColor = true; tabPage1.UseVisualStyleBackColor = true;
@@ -341,6 +356,16 @@
// //
binInputItemBindingSource.DataSource = typeof(Models.BinInputItem); binInputItemBindingSource.DataSource = typeof(Models.BinInputItem);
// //
// toolStripSeparator2
//
toolStripSeparator2.Name = "toolStripSeparator2";
toolStripSeparator2.Size = new Size(6, 25);
//
// toolStripSeparator3
//
toolStripSeparator3.Name = "toolStripSeparator3";
toolStripSeparator3.Size = new Size(6, 25);
//
// MainForm // MainForm
// //
AutoScaleMode = AutoScaleMode.None; AutoScaleMode = AutoScaleMode.None;
@@ -374,12 +399,15 @@
private System.Windows.Forms.ToolStrip toolStrip1; private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton openFileButton; private System.Windows.Forms.ToolStripButton openFileButton;
private System.Windows.Forms.ToolStripButton saveButton; private System.Windows.Forms.ToolStripButton saveButton;
private System.Windows.Forms.ToolStripButton saveAsButton;
private System.Windows.Forms.ToolStripButton runButton; private System.Windows.Forms.ToolStripButton runButton;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ComboBox cutMethodComboBox; private System.Windows.Forms.ComboBox cutMethodComboBox;
private System.Windows.Forms.TextBox cutWidthTextBox; private System.Windows.Forms.TextBox cutWidthTextBox;
private System.Windows.Forms.Label cutMethodLabel; private System.Windows.Forms.Label cutMethodLabel;
private System.Windows.Forms.Label cutWidthLabel; private System.Windows.Forms.Label cutWidthLabel;
private System.Windows.Forms.ComboBox materialShapeComboBox;
private System.Windows.Forms.Label materialShapeLabel;
private System.Windows.Forms.TabControl tabControl1; private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage tabPage1; private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.TabPage tabPage2; private System.Windows.Forms.TabPage tabPage2;
@@ -395,6 +423,8 @@
private System.Windows.Forms.DataGridViewTextBoxColumn TotalLength; private System.Windows.Forms.DataGridViewTextBoxColumn TotalLength;
private System.Windows.Forms.ToolStripButton newDocumentButton; private System.Windows.Forms.ToolStripButton newDocumentButton;
private System.Windows.Forms.ToolStripButton loadExampleDataButton; private System.Windows.Forms.ToolStripButton loadExampleDataButton;
private ToolStripSeparator toolStripSeparator3;
private ToolStripSeparator toolStripSeparator2;
} }
} }

View File

@@ -37,6 +37,23 @@ namespace CutList.Forms
toolbox = new Toolbox(); toolbox = new Toolbox();
cutMethodComboBox.DataSource = toolbox.Tools; cutMethodComboBox.DataSource = toolbox.Tools;
// Populate material shapes
materialShapeComboBox.Items.AddRange(new object[]
{
"Round Tube",
"Square Tube",
"Rectangular Tube",
"Angle",
"Channel",
"Flat Bar",
"Round Bar",
"Square Bar",
"I-Beam",
"Pipe",
"Other"
});
materialShapeComboBox.SelectedIndex = 0;
// Enable keyboard shortcuts // Enable keyboard shortcuts
KeyPreview = true; KeyPreview = true;
@@ -53,6 +70,7 @@ namespace CutList.Forms
public List<PartInputItem> Parts => parts.ToList(); public List<PartInputItem> Parts => parts.ToList();
public List<BinInputItem> StockBins => bins.ToList(); public List<BinInputItem> StockBins => bins.ToList();
public Tool SelectedTool => cutMethodComboBox.SelectedItem as Tool; public Tool SelectedTool => cutMethodComboBox.SelectedItem as Tool;
public string? SelectedMaterialShape => materialShapeComboBox.SelectedItem?.ToString();
public void ShowError(string message) public void ShowError(string message)
{ {
@@ -127,9 +145,9 @@ namespace CutList.Forms
binInputItemBindingSource.DataSource = bins; binInputItemBindingSource.DataSource = bins;
} }
public void ShowResults(List<Bin> binResults, string fileName) public void ShowResults(List<Bin> binResults, string fileName, string cutMethod, string? materialShape = null)
{ {
var form = new ResultsForm(fileName); var form = new ResultsForm(fileName, cutMethod, materialShape);
form.Bins = binResults; form.Bins = binResults;
form.ShowDialog(); form.ShowDialog();
} }
@@ -291,6 +309,11 @@ namespace CutList.Forms
Save(); Save();
} }
private void saveAsButton_Click(object sender, EventArgs e)
{
SaveAs();
}
private void runButton_Click(object sender, EventArgs e) private void runButton_Click(object sender, EventArgs e)
{ {
Run(); Run();