feat(ui): defaults.json-backed new nests; retire .nstdot templates
New nests now load plate defaults from %APPDATA%/OpenNest/defaults.json instead of a .nstdot nest template: - Tools > Nest Defaults... edits the file directly (new dialog). - Tools > Save Current Plate as Defaults captures the active plate with no dialog (visible when a nest is open). - New_Click no longer unzips a template; a corrupt defaults file warns once per session and falls back to built-in values. - First run converts an existing NestTemplatePath .nstdot to defaults.json and clears the legacy setting (kept readable on a failed conversion); the setting itself stays, marked legacy. - Save As no longer offers the .nstdot filter; SaveTemplate removed. - BomImportForm and OptionsForm template plumbing removed in favor of the shared NestDefaults store.
This commit is contained in:
@@ -4,6 +4,19 @@ using OpenNest.Geometry;
|
|||||||
|
|
||||||
namespace OpenNest.Data;
|
namespace OpenNest.Data;
|
||||||
|
|
||||||
|
/// <summary>Outcome of <see cref="NestDefaults.Load(string, out NestDefaultsStatus)"/>.</summary>
|
||||||
|
public enum NestDefaultsStatus
|
||||||
|
{
|
||||||
|
/// <summary>Defaults were read from the file (invalid fields still fall back individually).</summary>
|
||||||
|
Ok,
|
||||||
|
|
||||||
|
/// <summary>No file exists at the path; built-in fallback values were used.</summary>
|
||||||
|
Missing,
|
||||||
|
|
||||||
|
/// <summary>The file exists but could not be read or parsed; fallback values were used.</summary>
|
||||||
|
Invalid,
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Plate/nest defaults persisted to a single JSON file
|
/// Plate/nest defaults persisted to a single JSON file
|
||||||
/// (by default %APPDATA%\OpenNest\defaults.json), replacing the
|
/// (by default %APPDATA%\OpenNest\defaults.json), replacing the
|
||||||
@@ -56,18 +69,18 @@ public sealed class NestDefaults
|
|||||||
public static NestDefaults Load(string path) => Load(path, out _);
|
public static NestDefaults Load(string path) => Load(path, out _);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads defaults; <paramref name="fileExisted"/> is true when the file
|
/// Loads defaults and reports whether the file was missing, loaded, or
|
||||||
/// was present (even if it failed to parse), so callers can surface a
|
/// present but unreadable/invalid, so callers can warn about a corrupt
|
||||||
/// warning when a present file did not load cleanly.
|
/// file while still returning usable values.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static NestDefaults Load(string path, out bool fileExisted)
|
public static NestDefaults Load(string path, out NestDefaultsStatus status)
|
||||||
{
|
{
|
||||||
fileExisted = false;
|
|
||||||
var defaults = Fallback;
|
var defaults = Fallback;
|
||||||
if (string.IsNullOrWhiteSpace(path) || !File.Exists(path))
|
if (string.IsNullOrWhiteSpace(path) || !File.Exists(path))
|
||||||
|
{
|
||||||
|
status = NestDefaultsStatus.Missing;
|
||||||
return defaults;
|
return defaults;
|
||||||
|
}
|
||||||
fileExisted = true;
|
|
||||||
|
|
||||||
NestDefaultsDto? dto;
|
NestDefaultsDto? dto;
|
||||||
try
|
try
|
||||||
@@ -77,15 +90,22 @@ public sealed class NestDefaults
|
|||||||
}
|
}
|
||||||
catch (JsonException)
|
catch (JsonException)
|
||||||
{
|
{
|
||||||
|
status = NestDefaultsStatus.Invalid;
|
||||||
return defaults;
|
return defaults;
|
||||||
}
|
}
|
||||||
catch (IOException)
|
catch (IOException)
|
||||||
{
|
{
|
||||||
|
status = NestDefaultsStatus.Invalid;
|
||||||
return defaults;
|
return defaults;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dto is null)
|
if (dto is null)
|
||||||
|
{
|
||||||
|
status = NestDefaultsStatus.Invalid;
|
||||||
return defaults;
|
return defaults;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = NestDefaultsStatus.Ok;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
dto.Units is not null
|
dto.Units is not null
|
||||||
@@ -138,6 +158,23 @@ public sealed class NestDefaults
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Captures defaults from an existing plate (a copy of its size,
|
||||||
|
/// quadrant, and spacing), e.g. the active plate in the desktop app.
|
||||||
|
/// </summary>
|
||||||
|
public static NestDefaults FromPlate(Units units, Plate plate)
|
||||||
|
{
|
||||||
|
ArgumentNullException.ThrowIfNull(plate);
|
||||||
|
return new NestDefaults
|
||||||
|
{
|
||||||
|
Units = units,
|
||||||
|
Size = plate.Size,
|
||||||
|
Quadrant = plate.Quadrant,
|
||||||
|
PartSpacing = plate.PartSpacing,
|
||||||
|
EdgeSpacing = plate.EdgeSpacing,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public void ApplyTo(Nest nest)
|
public void ApplyTo(Nest nest)
|
||||||
{
|
{
|
||||||
ArgumentNullException.ThrowIfNull(nest);
|
ArgumentNullException.ThrowIfNull(nest);
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ public class NestDefaultsTests : IDisposable
|
|||||||
};
|
};
|
||||||
|
|
||||||
original.Save(_path);
|
original.Save(_path);
|
||||||
var loaded = NestDefaults.Load(_path, out var loadedFromDisk);
|
var loaded = NestDefaults.Load(_path, out var status);
|
||||||
|
|
||||||
Assert.True(loadedFromDisk);
|
Assert.Equal(NestDefaultsStatus.Ok, status);
|
||||||
Assert.Equal(Units.Millimeters, loaded.Units);
|
Assert.Equal(Units.Millimeters, loaded.Units);
|
||||||
Assert.Equal(original.Size, loaded.Size);
|
Assert.Equal(original.Size, loaded.Size);
|
||||||
Assert.Equal(3, loaded.Quadrant);
|
Assert.Equal(3, loaded.Quadrant);
|
||||||
@@ -58,20 +58,20 @@ public class NestDefaultsTests : IDisposable
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void Load_MissingFile_ReturnsFallback()
|
public void Load_MissingFile_ReturnsFallback()
|
||||||
{
|
{
|
||||||
var loaded = NestDefaults.Load(_path, out var loadedFromDisk);
|
var loaded = NestDefaults.Load(_path, out var status);
|
||||||
|
|
||||||
Assert.False(loadedFromDisk);
|
Assert.Equal(NestDefaultsStatus.Missing, status);
|
||||||
AssertFallback(loaded);
|
AssertFallback(loaded);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Load_CorruptJson_ReturnsFallbackButReportsFile()
|
public void Load_CorruptJson_ReturnsFallbackButReportsInvalid()
|
||||||
{
|
{
|
||||||
File.WriteAllText(_path, "{ this is not json");
|
File.WriteAllText(_path, "{ this is not json");
|
||||||
|
|
||||||
var loaded = NestDefaults.Load(_path, out var loadedFromDisk);
|
var loaded = NestDefaults.Load(_path, out var status);
|
||||||
|
|
||||||
Assert.True(loadedFromDisk);
|
Assert.Equal(NestDefaultsStatus.Invalid, status);
|
||||||
AssertFallback(loaded);
|
AssertFallback(loaded);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,9 +80,9 @@ public class NestDefaultsTests : IDisposable
|
|||||||
{
|
{
|
||||||
File.WriteAllText(_path, """{ "units": "millimeters", "partSpacing": 4 }""");
|
File.WriteAllText(_path, """{ "units": "millimeters", "partSpacing": 4 }""");
|
||||||
|
|
||||||
var loaded = NestDefaults.Load(_path, out var loadedFromDisk);
|
var loaded = NestDefaults.Load(_path, out var status);
|
||||||
|
|
||||||
Assert.True(loadedFromDisk);
|
Assert.Equal(NestDefaultsStatus.Ok, status);
|
||||||
Assert.Equal(Units.Millimeters, loaded.Units);
|
Assert.Equal(Units.Millimeters, loaded.Units);
|
||||||
Assert.Equal(4, loaded.PartSpacing);
|
Assert.Equal(4, loaded.PartSpacing);
|
||||||
// Untouched fields keep fallback values.
|
// Untouched fields keep fallback values.
|
||||||
@@ -107,9 +107,10 @@ public class NestDefaultsTests : IDisposable
|
|||||||
"""
|
"""
|
||||||
);
|
);
|
||||||
|
|
||||||
var loaded = NestDefaults.Load(_path, out var loadedFromDisk);
|
var loaded = NestDefaults.Load(_path, out var status);
|
||||||
|
|
||||||
Assert.True(loadedFromDisk);
|
// The file parses; only the invalid values fall back, so no warning.
|
||||||
|
Assert.Equal(NestDefaultsStatus.Ok, status);
|
||||||
Assert.Equal(Units.Inches, loaded.Units);
|
Assert.Equal(Units.Inches, loaded.Units);
|
||||||
Assert.Equal(new Size(100, 100), loaded.Size);
|
Assert.Equal(new Size(100, 100), loaded.Size);
|
||||||
Assert.Equal(1, loaded.Quadrant);
|
Assert.Equal(1, loaded.Quadrant);
|
||||||
@@ -144,9 +145,9 @@ public class NestDefaultsTests : IDisposable
|
|||||||
"""
|
"""
|
||||||
);
|
);
|
||||||
|
|
||||||
var loaded = NestDefaults.Load(_path, out var loadedFromDisk);
|
var loaded = NestDefaults.Load(_path, out var status);
|
||||||
|
|
||||||
Assert.True(loadedFromDisk);
|
Assert.Equal(NestDefaultsStatus.Ok, status);
|
||||||
Assert.Equal(2, loaded.PartSpacing);
|
Assert.Equal(2, loaded.PartSpacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using System.Drawing;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using OpenNest.Data;
|
||||||
using OpenNest.Geometry;
|
using OpenNest.Geometry;
|
||||||
using OpenNest.IO;
|
using OpenNest.IO;
|
||||||
using OpenNest.IO.Bom;
|
using OpenNest.IO.Bom;
|
||||||
@@ -16,7 +17,7 @@ namespace OpenNest.Forms
|
|||||||
private List<BomPartRow> _parts;
|
private List<BomPartRow> _parts;
|
||||||
private Dictionary<string, GroupSettings> _groupSettings;
|
private Dictionary<string, GroupSettings> _groupSettings;
|
||||||
private bool _suppressRegroup;
|
private bool _suppressRegroup;
|
||||||
private Nest.PlateSettings _templateDefaults;
|
private NestDefaults _defaults;
|
||||||
|
|
||||||
public Form MdiParentForm { get; set; }
|
public Form MdiParentForm { get; set; }
|
||||||
|
|
||||||
@@ -25,37 +26,14 @@ namespace OpenNest.Forms
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
_parts = new List<BomPartRow>();
|
_parts = new List<BomPartRow>();
|
||||||
_groupSettings = new Dictionary<string, GroupSettings>();
|
_groupSettings = new Dictionary<string, GroupSettings>();
|
||||||
_templateDefaults = LoadTemplateDefaults();
|
_defaults = NestDefaults.Load(NestDefaults.DefaultPath);
|
||||||
ApplyTemplateDefaults();
|
ApplyDefaults();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Nest.PlateSettings LoadTemplateDefaults()
|
private void ApplyDefaults()
|
||||||
{
|
{
|
||||||
var templatePath = Properties.Settings.Default.NestTemplatePath;
|
txtPlateWidth.Text = _defaults.Size.Width.ToString("0.####");
|
||||||
if (File.Exists(templatePath))
|
txtPlateLength.Text = _defaults.Size.Length.ToString("0.####");
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var nest = new NestReader(templatePath).Read();
|
|
||||||
return nest.PlateDefaults;
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fallback defaults matching CreateDefaultNest
|
|
||||||
return new Nest.PlateSettings
|
|
||||||
{
|
|
||||||
Size = new Geometry.Size(100, 100),
|
|
||||||
Quadrant = 1,
|
|
||||||
PartSpacing = 1,
|
|
||||||
EdgeSpacing = new Spacing(1, 1, 1, 1),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ApplyTemplateDefaults()
|
|
||||||
{
|
|
||||||
txtPlateWidth.Text = _templateDefaults.Size.Width.ToString("0.####");
|
|
||||||
txtPlateLength.Text = _templateDefaults.Size.Length.ToString("0.####");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region File Browsing
|
#region File Browsing
|
||||||
@@ -147,9 +125,9 @@ namespace OpenNest.Forms
|
|||||||
var matchedPaths = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
var matchedPaths = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
foreach (var group in analysis.Groups)
|
foreach (var group in analysis.Groups)
|
||||||
foreach (var part in group.Parts)
|
foreach (var part in group.Parts)
|
||||||
if (part.DxfPath != null)
|
if (part.DxfPath != null)
|
||||||
matchedPaths[part.Item.FileName ?? ""] = part.DxfPath;
|
matchedPaths[part.Item.FileName ?? ""] = part.DxfPath;
|
||||||
|
|
||||||
_parts = new List<BomPartRow>();
|
_parts = new List<BomPartRow>();
|
||||||
|
|
||||||
@@ -290,10 +268,10 @@ namespace OpenNest.Forms
|
|||||||
|
|
||||||
var defaultWidth = double.TryParse(txtPlateWidth.Text, out var w)
|
var defaultWidth = double.TryParse(txtPlateWidth.Text, out var w)
|
||||||
? w
|
? w
|
||||||
: _templateDefaults.Size.Width;
|
: _defaults.Size.Width;
|
||||||
var defaultLength = double.TryParse(txtPlateLength.Text, out var l)
|
var defaultLength = double.TryParse(txtPlateLength.Text, out var l)
|
||||||
? l
|
? l
|
||||||
: _templateDefaults.Size.Length;
|
: _defaults.Size.Length;
|
||||||
|
|
||||||
var groups = _parts
|
var groups = _parts
|
||||||
.Where(p =>
|
.Where(p =>
|
||||||
@@ -336,11 +314,11 @@ namespace OpenNest.Forms
|
|||||||
group.Sum(p => p.Qty ?? 0),
|
group.Sum(p => p.Qty ?? 0),
|
||||||
existing ? gs.PlateWidth : defaultWidth,
|
existing ? gs.PlateWidth : defaultWidth,
|
||||||
existing ? gs.PlateLength : defaultLength,
|
existing ? gs.PlateLength : defaultLength,
|
||||||
existing ? gs.PartSpacing : _templateDefaults.PartSpacing,
|
existing ? gs.PartSpacing : _defaults.PartSpacing,
|
||||||
existing ? gs.EdgeLeft : _templateDefaults.EdgeSpacing.Left,
|
existing ? gs.EdgeLeft : _defaults.EdgeSpacing.Left,
|
||||||
existing ? gs.EdgeBottom : _templateDefaults.EdgeSpacing.Bottom,
|
existing ? gs.EdgeBottom : _defaults.EdgeSpacing.Bottom,
|
||||||
existing ? gs.EdgeRight : _templateDefaults.EdgeSpacing.Right,
|
existing ? gs.EdgeRight : _defaults.EdgeSpacing.Right,
|
||||||
existing ? gs.EdgeTop : _templateDefaults.EdgeSpacing.Top
|
existing ? gs.EdgeTop : _defaults.EdgeSpacing.Top
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,23 +352,23 @@ namespace OpenNest.Forms
|
|||||||
{
|
{
|
||||||
PlateWidth = row["Plate Width"] is double pw
|
PlateWidth = row["Plate Width"] is double pw
|
||||||
? pw
|
? pw
|
||||||
: _templateDefaults.Size.Width,
|
: _defaults.Size.Width,
|
||||||
PlateLength = row["Plate Length"] is double pl
|
PlateLength = row["Plate Length"] is double pl
|
||||||
? pl
|
? pl
|
||||||
: _templateDefaults.Size.Length,
|
: _defaults.Size.Length,
|
||||||
PartSpacing = row["Part Spacing"] is double ps
|
PartSpacing = row["Part Spacing"] is double ps
|
||||||
? ps
|
? ps
|
||||||
: _templateDefaults.PartSpacing,
|
: _defaults.PartSpacing,
|
||||||
EdgeLeft = row["Edge Left"] is double el
|
EdgeLeft = row["Edge Left"] is double el
|
||||||
? el
|
? el
|
||||||
: _templateDefaults.EdgeSpacing.Left,
|
: _defaults.EdgeSpacing.Left,
|
||||||
EdgeBottom = row["Edge Bottom"] is double eb
|
EdgeBottom = row["Edge Bottom"] is double eb
|
||||||
? eb
|
? eb
|
||||||
: _templateDefaults.EdgeSpacing.Bottom,
|
: _defaults.EdgeSpacing.Bottom,
|
||||||
EdgeRight = row["Edge Right"] is double er
|
EdgeRight = row["Edge Right"] is double er
|
||||||
? er
|
? er
|
||||||
: _templateDefaults.EdgeSpacing.Right,
|
: _defaults.EdgeSpacing.Right,
|
||||||
EdgeTop = row["Edge Top"] is double et ? et : _templateDefaults.EdgeSpacing.Top,
|
EdgeTop = row["Edge Top"] is double et ? et : _defaults.EdgeSpacing.Top,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -434,10 +412,10 @@ namespace OpenNest.Forms
|
|||||||
|
|
||||||
var defaultWidth = double.TryParse(txtPlateWidth.Text, out var dw)
|
var defaultWidth = double.TryParse(txtPlateWidth.Text, out var dw)
|
||||||
? dw
|
? dw
|
||||||
: _templateDefaults.Size.Width;
|
: _defaults.Size.Width;
|
||||||
var defaultLength = double.TryParse(txtPlateLength.Text, out var dl)
|
var defaultLength = double.TryParse(txtPlateLength.Text, out var dl)
|
||||||
? dl
|
? dl
|
||||||
: _templateDefaults.Size.Length;
|
: _defaults.Size.Length;
|
||||||
|
|
||||||
var groups = _parts
|
var groups = _parts
|
||||||
.Where(p =>
|
.Where(p =>
|
||||||
@@ -477,11 +455,11 @@ namespace OpenNest.Forms
|
|||||||
var hasSettings = _groupSettings.TryGetValue(key, out var gs);
|
var hasSettings = _groupSettings.TryGetValue(key, out var gs);
|
||||||
var plateWidth = hasSettings ? gs.PlateWidth : defaultWidth;
|
var plateWidth = hasSettings ? gs.PlateWidth : defaultWidth;
|
||||||
var plateLength = hasSettings ? gs.PlateLength : defaultLength;
|
var plateLength = hasSettings ? gs.PlateLength : defaultLength;
|
||||||
var partSpacing = hasSettings ? gs.PartSpacing : _templateDefaults.PartSpacing;
|
var partSpacing = hasSettings ? gs.PartSpacing : _defaults.PartSpacing;
|
||||||
var edgeLeft = hasSettings ? gs.EdgeLeft : _templateDefaults.EdgeSpacing.Left;
|
var edgeLeft = hasSettings ? gs.EdgeLeft : _defaults.EdgeSpacing.Left;
|
||||||
var edgeBottom = hasSettings ? gs.EdgeBottom : _templateDefaults.EdgeSpacing.Bottom;
|
var edgeBottom = hasSettings ? gs.EdgeBottom : _defaults.EdgeSpacing.Bottom;
|
||||||
var edgeRight = hasSettings ? gs.EdgeRight : _templateDefaults.EdgeSpacing.Right;
|
var edgeRight = hasSettings ? gs.EdgeRight : _defaults.EdgeSpacing.Right;
|
||||||
var edgeTop = hasSettings ? gs.EdgeTop : _templateDefaults.EdgeSpacing.Top;
|
var edgeTop = hasSettings ? gs.EdgeTop : _defaults.EdgeSpacing.Top;
|
||||||
|
|
||||||
var nestName = $"{jobName} - {thickness:0.###} {material}";
|
var nestName = $"{jobName} - {thickness:0.###} {material}";
|
||||||
var nest = new Nest(nestName);
|
var nest = new Nest(nestName);
|
||||||
@@ -490,7 +468,7 @@ namespace OpenNest.Forms
|
|||||||
nest.PlateDefaults.Size = new Geometry.Size(plateWidth, plateLength);
|
nest.PlateDefaults.Size = new Geometry.Size(plateWidth, plateLength);
|
||||||
nest.Thickness = thickness;
|
nest.Thickness = thickness;
|
||||||
nest.Material = new Material(material);
|
nest.Material = new Material(material);
|
||||||
nest.PlateDefaults.Quadrant = _templateDefaults.Quadrant;
|
nest.PlateDefaults.Quadrant = _defaults.Quadrant;
|
||||||
nest.PlateDefaults.PartSpacing = partSpacing;
|
nest.PlateDefaults.PartSpacing = partSpacing;
|
||||||
nest.PlateDefaults.EdgeSpacing = new Spacing(
|
nest.PlateDefaults.EdgeSpacing = new Spacing(
|
||||||
edgeLeft,
|
edgeLeft,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
@@ -301,16 +301,11 @@ namespace OpenNest.Forms
|
|||||||
public void SaveAs()
|
public void SaveAs()
|
||||||
{
|
{
|
||||||
var dlg = new SaveFileDialog();
|
var dlg = new SaveFileDialog();
|
||||||
dlg.Filter = $"{NestFormat.FileFilter}|Template File|*.nstdot";
|
dlg.Filter = NestFormat.FileFilter;
|
||||||
dlg.FileName = Nest.Name;
|
dlg.FileName = Nest.Name;
|
||||||
|
|
||||||
if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||||
{
|
SaveAs(dlg.FileName);
|
||||||
if (dlg.FilterIndex == 2)
|
|
||||||
SaveTemplate(dlg.FileName);
|
|
||||||
else
|
|
||||||
SaveAs(dlg.FileName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveAs(string path)
|
public void SaveAs(string path)
|
||||||
@@ -319,17 +314,6 @@ namespace OpenNest.Forms
|
|||||||
Text = Document.Name;
|
Text = Document.Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveTemplate(string path)
|
|
||||||
{
|
|
||||||
var nst = new Nest();
|
|
||||||
nst.Name = Path.GetFileNameWithoutExtension(path);
|
|
||||||
nst.PlateDefaults = Nest.PlateDefaults;
|
|
||||||
nst.Units = Nest.Units;
|
|
||||||
|
|
||||||
var writer = new NestWriter(nst);
|
|
||||||
writer.Write(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Import()
|
public void Import()
|
||||||
{
|
{
|
||||||
var dlg = new OpenFileDialog();
|
var dlg = new OpenFileDialog();
|
||||||
@@ -943,9 +927,9 @@ namespace OpenNest.Forms
|
|||||||
|
|
||||||
// Refresh all parts to use the updated programs
|
// Refresh all parts to use the updated programs
|
||||||
foreach (var plate in Nest.Plates)
|
foreach (var plate in Nest.Plates)
|
||||||
foreach (var part in plate.Parts)
|
foreach (var part in plate.Parts)
|
||||||
if (!part.BaseDrawing.IsCutOff)
|
if (!part.BaseDrawing.IsCutOff)
|
||||||
part.Update();
|
part.Update();
|
||||||
|
|
||||||
UpdateDrawingList();
|
UpdateDrawingList();
|
||||||
PlateView.Invalidate();
|
PlateView.Invalidate();
|
||||||
|
|||||||
Generated
+19
-1
@@ -82,6 +82,8 @@
|
|||||||
mnuSetRotationIncrement = new System.Windows.Forms.ToolStripMenuItem();
|
mnuSetRotationIncrement = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator();
|
toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
mnuToolsMachineConfig = new System.Windows.Forms.ToolStripMenuItem();
|
mnuToolsMachineConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
mnuToolsNestDefaults = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
mnuToolsSaveCurrentAsDefaults = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
mnuToolsOptions = new System.Windows.Forms.ToolStripMenuItem();
|
mnuToolsOptions = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
mnuNest = new System.Windows.Forms.ToolStripMenuItem();
|
mnuNest = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
mnuNestEdit = new System.Windows.Forms.ToolStripMenuItem();
|
mnuNestEdit = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
@@ -420,7 +422,7 @@
|
|||||||
//
|
//
|
||||||
// mnuTools
|
// mnuTools
|
||||||
//
|
//
|
||||||
mnuTools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { mnuToolsMeasureArea, mnuToolsBestFitViewer, mnuToolsPatternTile, mnuToolsExpandSpacing, mnuToolsAlign, toolStripMenuItem14, mnuSetOffsetIncrement, mnuSetRotationIncrement, toolStripMenuItem15, mnuToolsMachineConfig, mnuToolsOptions });
|
mnuTools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { mnuToolsMeasureArea, mnuToolsBestFitViewer, mnuToolsPatternTile, mnuToolsExpandSpacing, mnuToolsAlign, toolStripMenuItem14, mnuSetOffsetIncrement, mnuSetRotationIncrement, toolStripMenuItem15, mnuToolsMachineConfig, mnuToolsNestDefaults, mnuToolsSaveCurrentAsDefaults, mnuToolsOptions });
|
||||||
mnuTools.Name = "mnuTools";
|
mnuTools.Name = "mnuTools";
|
||||||
mnuTools.Size = new System.Drawing.Size(47, 20);
|
mnuTools.Size = new System.Drawing.Size(47, 20);
|
||||||
mnuTools.Text = "&Tools";
|
mnuTools.Text = "&Tools";
|
||||||
@@ -559,6 +561,20 @@
|
|||||||
mnuToolsMachineConfig.Text = "Machine Configuration...";
|
mnuToolsMachineConfig.Text = "Machine Configuration...";
|
||||||
mnuToolsMachineConfig.Click += MachineConfig_Click;
|
mnuToolsMachineConfig.Click += MachineConfig_Click;
|
||||||
//
|
//
|
||||||
|
// mnuToolsNestDefaults
|
||||||
|
//
|
||||||
|
mnuToolsNestDefaults.Name = "mnuToolsNestDefaults";
|
||||||
|
mnuToolsNestDefaults.Size = new System.Drawing.Size(214, 22);
|
||||||
|
mnuToolsNestDefaults.Text = "Nest Defaults...";
|
||||||
|
mnuToolsNestDefaults.Click += NestDefaults_Click;
|
||||||
|
//
|
||||||
|
// mnuToolsSaveCurrentAsDefaults
|
||||||
|
//
|
||||||
|
mnuToolsSaveCurrentAsDefaults.Name = "mnuToolsSaveCurrentAsDefaults";
|
||||||
|
mnuToolsSaveCurrentAsDefaults.Size = new System.Drawing.Size(214, 22);
|
||||||
|
mnuToolsSaveCurrentAsDefaults.Text = "Save Current Plate as Defaults";
|
||||||
|
mnuToolsSaveCurrentAsDefaults.Click += SaveCurrentAsDefaults_Click;
|
||||||
|
//
|
||||||
// mnuToolsOptions
|
// mnuToolsOptions
|
||||||
//
|
//
|
||||||
mnuToolsOptions.Name = "mnuToolsOptions";
|
mnuToolsOptions.Name = "mnuToolsOptions";
|
||||||
@@ -1225,6 +1241,8 @@
|
|||||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem5;
|
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem5;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuTools;
|
private System.Windows.Forms.ToolStripMenuItem mnuTools;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuToolsMachineConfig;
|
private System.Windows.Forms.ToolStripMenuItem mnuToolsMachineConfig;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem mnuToolsNestDefaults;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem mnuToolsSaveCurrentAsDefaults;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuToolsOptions;
|
private System.Windows.Forms.ToolStripMenuItem mnuToolsOptions;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuNest;
|
private System.Windows.Forms.ToolStripMenuItem mnuNest;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuNestEdit;
|
private System.Windows.Forms.ToolStripMenuItem mnuNestEdit;
|
||||||
|
|||||||
+92
-29
@@ -90,14 +90,38 @@ namespace OpenNest.Forms
|
|||||||
private Nest CreateDefaultNest()
|
private Nest CreateDefaultNest()
|
||||||
{
|
{
|
||||||
var nest = new Nest();
|
var nest = new Nest();
|
||||||
nest.Units = Properties.Settings.Default.DefaultUnit;
|
LoadNestDefaults().ApplyTo(nest);
|
||||||
nest.PlateDefaults.EdgeSpacing = new Spacing(1, 1, 1, 1);
|
|
||||||
nest.PlateDefaults.PartSpacing = 1;
|
|
||||||
nest.PlateDefaults.Size = new OpenNest.Geometry.Size(100, 100);
|
|
||||||
nest.PlateDefaults.Quadrant = 1;
|
|
||||||
return nest;
|
return nest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Loads the persisted nest defaults. When no usable file exists,
|
||||||
|
/// units come from the legacy DefaultUnit setting; a corrupt file
|
||||||
|
/// warns once per session.
|
||||||
|
/// </summary>
|
||||||
|
private NestDefaults LoadNestDefaults()
|
||||||
|
{
|
||||||
|
var defaults = NestDefaults.Load(NestDefaults.DefaultPath, out var status);
|
||||||
|
if (status == NestDefaultsStatus.Ok)
|
||||||
|
return defaults;
|
||||||
|
|
||||||
|
defaults.Units = Properties.Settings.Default.DefaultUnit;
|
||||||
|
|
||||||
|
if (status == NestDefaultsStatus.Invalid && !defaultsWarned)
|
||||||
|
{
|
||||||
|
defaultsWarned = true;
|
||||||
|
MessageBox.Show(
|
||||||
|
$"The nest defaults file could not be read:\n{NestDefaults.DefaultPath}\n\nBuilt-in defaults will be used. Re-save your defaults from Tools > Nest Defaults.",
|
||||||
|
"Nest Defaults",
|
||||||
|
MessageBoxButtons.OK,
|
||||||
|
MessageBoxIcon.Warning
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return defaults;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool defaultsWarned;
|
||||||
|
|
||||||
private string GetNestName(DateTime date, int id)
|
private string GetNestName(DateTime date, int id)
|
||||||
{
|
{
|
||||||
var year = (date.Year % 100).ToString("D2");
|
var year = (date.Year % 100).ToString("D2");
|
||||||
@@ -185,6 +209,7 @@ namespace OpenNest.Forms
|
|||||||
mnuToolsAlign.Visible = hasValue;
|
mnuToolsAlign.Visible = hasValue;
|
||||||
mnuToolsMeasureArea.Visible = hasValue;
|
mnuToolsMeasureArea.Visible = hasValue;
|
||||||
mnuToolsExpandSpacing.Visible = hasValue;
|
mnuToolsExpandSpacing.Visible = hasValue;
|
||||||
|
mnuToolsSaveCurrentAsDefaults.Visible = hasValue;
|
||||||
|
|
||||||
toolStripMenuItem14.Visible = hasValue;
|
toolStripMenuItem14.Visible = hasValue;
|
||||||
mnuSetOffsetIncrement.Visible = hasValue;
|
mnuSetOffsetIncrement.Visible = hasValue;
|
||||||
@@ -454,10 +479,52 @@ namespace OpenNest.Forms
|
|||||||
{
|
{
|
||||||
base.OnLoad(e);
|
base.OnLoad(e);
|
||||||
|
|
||||||
|
MigrateNestTemplate();
|
||||||
|
|
||||||
if (Settings.Default.CreateNewNestOnOpen)
|
if (Settings.Default.CreateNewNestOnOpen)
|
||||||
New_Click(this, new EventArgs());
|
New_Click(this, new EventArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// One-time upgrade: converts a legacy .nstdot nest template
|
||||||
|
/// (NestTemplatePath setting) into defaults.json, then clears the
|
||||||
|
/// setting so the template mechanism is never consulted again.
|
||||||
|
/// </summary>
|
||||||
|
private void MigrateNestTemplate()
|
||||||
|
{
|
||||||
|
var templatePath = Settings.Default.NestTemplatePath;
|
||||||
|
if (string.IsNullOrWhiteSpace(templatePath))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// A failed conversion keeps the setting populated so the user
|
||||||
|
// can still find their template file.
|
||||||
|
var converted = true;
|
||||||
|
if (File.Exists(templatePath) && !File.Exists(NestDefaults.DefaultPath))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var nest = new NestReader(templatePath).Read();
|
||||||
|
NestDefaults.FromNest(nest).Save(NestDefaults.DefaultPath);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
converted = false;
|
||||||
|
MessageBox.Show(
|
||||||
|
$"The nest template could not be converted to the new defaults file:\n{templatePath}\n\n{ex.Message}\n\nIt will no longer be loaded automatically. Set defaults under Tools > Nest Defaults.",
|
||||||
|
"Nest Template",
|
||||||
|
MessageBoxButtons.OK,
|
||||||
|
MessageBoxIcon.Warning
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!converted)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Settings.Default.NestTemplatePath = "";
|
||||||
|
Settings.Default.Save();
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
|
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
|
||||||
{
|
{
|
||||||
base.OnClosing(e);
|
base.OnClosing(e);
|
||||||
@@ -473,30 +540,7 @@ namespace OpenNest.Forms
|
|||||||
var windowState =
|
var windowState =
|
||||||
ActiveMdiChild != null ? ActiveMdiChild.WindowState : FormWindowState.Maximized;
|
ActiveMdiChild != null ? ActiveMdiChild.WindowState : FormWindowState.Maximized;
|
||||||
|
|
||||||
Nest nest;
|
var nest = CreateDefaultNest();
|
||||||
|
|
||||||
if (File.Exists(Properties.Settings.Default.NestTemplatePath))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var reader = new NestReader(Properties.Settings.Default.NestTemplatePath);
|
|
||||||
nest = reader.Read();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
MessageBox.Show(
|
|
||||||
$"Failed to load nest template:\n{ex.Message}\n\nA default nest will be created instead.",
|
|
||||||
"Template Error",
|
|
||||||
MessageBoxButtons.OK,
|
|
||||||
MessageBoxIcon.Warning
|
|
||||||
);
|
|
||||||
nest = CreateDefaultNest();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nest = CreateDefaultNest();
|
|
||||||
}
|
|
||||||
|
|
||||||
nest.DateCreated = DateTime.Now;
|
nest.DateCreated = DateTime.Now;
|
||||||
nest.DateLastModified = DateTime.Now;
|
nest.DateLastModified = DateTime.Now;
|
||||||
@@ -834,6 +878,25 @@ namespace OpenNest.Forms
|
|||||||
form.ShowDialog();
|
form.ShowDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void NestDefaults_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
using (var form = new NestDefaultsForm(NestDefaults.Load(NestDefaults.DefaultPath)))
|
||||||
|
{
|
||||||
|
if (form.ShowDialog(this) == DialogResult.OK)
|
||||||
|
form.GetDefaults().Save(NestDefaults.DefaultPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SaveCurrentAsDefaults_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (activeForm == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
NestDefaults
|
||||||
|
.FromPlate(activeForm.Nest.Units, activeForm.PlateView.Plate)
|
||||||
|
.Save(NestDefaults.DefaultPath);
|
||||||
|
}
|
||||||
|
|
||||||
private void MachineConfig_Click(object sender, EventArgs e)
|
private void MachineConfig_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var appDataPath = Path.Combine(
|
var appDataPath = Path.Combine(
|
||||||
|
|||||||
+364
@@ -0,0 +1,364 @@
|
|||||||
|
namespace OpenNest.Forms
|
||||||
|
{
|
||||||
|
partial class NestDefaultsForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.unitsLabel = new System.Windows.Forms.Label();
|
||||||
|
this.unitsCombo = new System.Windows.Forms.ComboBox();
|
||||||
|
this.widthLabel = new System.Windows.Forms.Label();
|
||||||
|
this.widthBox = new OpenNest.Controls.NumericUpDown();
|
||||||
|
this.lengthLabel = new System.Windows.Forms.Label();
|
||||||
|
this.lengthBox = new OpenNest.Controls.NumericUpDown();
|
||||||
|
this.partSpacingLabel = new System.Windows.Forms.Label();
|
||||||
|
this.partSpacingBox = new OpenNest.Controls.NumericUpDown();
|
||||||
|
this.edgeLeftLabel = new System.Windows.Forms.Label();
|
||||||
|
this.edgeLeftBox = new OpenNest.Controls.NumericUpDown();
|
||||||
|
this.edgeBottomLabel = new System.Windows.Forms.Label();
|
||||||
|
this.edgeBottomBox = new OpenNest.Controls.NumericUpDown();
|
||||||
|
this.edgeRightLabel = new System.Windows.Forms.Label();
|
||||||
|
this.edgeRightBox = new OpenNest.Controls.NumericUpDown();
|
||||||
|
this.edgeTopLabel = new System.Windows.Forms.Label();
|
||||||
|
this.edgeTopBox = new OpenNest.Controls.NumericUpDown();
|
||||||
|
this.quadrantLabel = new System.Windows.Forms.Label();
|
||||||
|
this.quadrantSelect1 = new OpenNest.Controls.QuadrantSelect();
|
||||||
|
this.saveButton = new System.Windows.Forms.Button();
|
||||||
|
this.cancelButton = new System.Windows.Forms.Button();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.widthBox)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.lengthBox)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.partSpacingBox)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.edgeLeftBox)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.edgeBottomBox)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.edgeRightBox)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.edgeTopBox)).BeginInit();
|
||||||
|
this.tableLayoutPanel1.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// tableLayoutPanel1
|
||||||
|
//
|
||||||
|
this.tableLayoutPanel1.ColumnCount = 2;
|
||||||
|
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||||
|
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.unitsLabel, 0, 0);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.unitsCombo, 1, 0);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.widthLabel, 0, 1);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.widthBox, 1, 1);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.lengthLabel, 0, 2);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.lengthBox, 1, 2);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.partSpacingLabel, 0, 3);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.partSpacingBox, 1, 3);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.edgeLeftLabel, 0, 4);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.edgeLeftBox, 1, 4);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.edgeBottomLabel, 0, 5);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.edgeBottomBox, 1, 5);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.edgeRightLabel, 0, 6);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.edgeRightBox, 1, 6);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.edgeTopLabel, 0, 7);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.edgeTopBox, 1, 7);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.quadrantLabel, 0, 8);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.quadrantSelect1, 1, 8);
|
||||||
|
this.tableLayoutPanel1.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||||
|
this.tableLayoutPanel1.RowCount = 9;
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
|
||||||
|
this.tableLayoutPanel1.Size = new System.Drawing.Size(410, 260);
|
||||||
|
this.tableLayoutPanel1.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// unitsLabel
|
||||||
|
//
|
||||||
|
this.unitsLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.unitsLabel.AutoSize = true;
|
||||||
|
this.unitsLabel.Location = new System.Drawing.Point(3, 9);
|
||||||
|
this.unitsLabel.Name = "unitsLabel";
|
||||||
|
this.unitsLabel.Size = new System.Drawing.Size(100, 16);
|
||||||
|
this.unitsLabel.TabIndex = 0;
|
||||||
|
this.unitsLabel.Text = "Units:";
|
||||||
|
//
|
||||||
|
// unitsCombo
|
||||||
|
//
|
||||||
|
this.unitsCombo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.unitsCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
this.unitsCombo.Items.AddRange(new object[] { "Inches", "Millimeters" });
|
||||||
|
this.unitsCombo.Location = new System.Drawing.Point(109, 5);
|
||||||
|
this.unitsCombo.Name = "unitsCombo";
|
||||||
|
this.unitsCombo.Size = new System.Drawing.Size(298, 24);
|
||||||
|
this.unitsCombo.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// widthLabel
|
||||||
|
//
|
||||||
|
this.widthLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.widthLabel.AutoSize = true;
|
||||||
|
this.widthLabel.Location = new System.Drawing.Point(3, 37);
|
||||||
|
this.widthLabel.Name = "widthLabel";
|
||||||
|
this.widthLabel.Size = new System.Drawing.Size(100, 16);
|
||||||
|
this.widthLabel.TabIndex = 2;
|
||||||
|
this.widthLabel.Text = "Plate width:";
|
||||||
|
//
|
||||||
|
// widthBox
|
||||||
|
//
|
||||||
|
this.widthBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.widthBox.DecimalPlaces = 4;
|
||||||
|
this.widthBox.Location = new System.Drawing.Point(109, 33);
|
||||||
|
this.widthBox.Maximum = new decimal(new int[] { 1000000, 0, 0, 0 });
|
||||||
|
this.widthBox.Minimum = new decimal(new int[] { 1, 0, 0, 196608 });
|
||||||
|
this.widthBox.Name = "widthBox";
|
||||||
|
this.widthBox.Size = new System.Drawing.Size(298, 22);
|
||||||
|
this.widthBox.Suffix = "";
|
||||||
|
this.widthBox.TabIndex = 3;
|
||||||
|
//
|
||||||
|
// lengthLabel
|
||||||
|
//
|
||||||
|
this.lengthLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.lengthLabel.AutoSize = true;
|
||||||
|
this.lengthLabel.Location = new System.Drawing.Point(3, 65);
|
||||||
|
this.lengthLabel.Name = "lengthLabel";
|
||||||
|
this.lengthLabel.Size = new System.Drawing.Size(100, 16);
|
||||||
|
this.lengthLabel.TabIndex = 4;
|
||||||
|
this.lengthLabel.Text = "Plate length:";
|
||||||
|
//
|
||||||
|
// lengthBox
|
||||||
|
//
|
||||||
|
this.lengthBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.lengthBox.DecimalPlaces = 4;
|
||||||
|
this.lengthBox.Location = new System.Drawing.Point(109, 61);
|
||||||
|
this.lengthBox.Maximum = new decimal(new int[] { 1000000, 0, 0, 0 });
|
||||||
|
this.lengthBox.Minimum = new decimal(new int[] { 1, 0, 0, 196608 });
|
||||||
|
this.lengthBox.Name = "lengthBox";
|
||||||
|
this.lengthBox.Size = new System.Drawing.Size(298, 22);
|
||||||
|
this.lengthBox.Suffix = "";
|
||||||
|
this.lengthBox.TabIndex = 5;
|
||||||
|
//
|
||||||
|
// partSpacingLabel
|
||||||
|
//
|
||||||
|
this.partSpacingLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.partSpacingLabel.AutoSize = true;
|
||||||
|
this.partSpacingLabel.Location = new System.Drawing.Point(3, 93);
|
||||||
|
this.partSpacingLabel.Name = "partSpacingLabel";
|
||||||
|
this.partSpacingLabel.Size = new System.Drawing.Size(100, 16);
|
||||||
|
this.partSpacingLabel.TabIndex = 6;
|
||||||
|
this.partSpacingLabel.Text = "Part spacing:";
|
||||||
|
//
|
||||||
|
// partSpacingBox
|
||||||
|
//
|
||||||
|
this.partSpacingBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.partSpacingBox.DecimalPlaces = 4;
|
||||||
|
this.partSpacingBox.Location = new System.Drawing.Point(109, 89);
|
||||||
|
this.partSpacingBox.Maximum = new decimal(new int[] { 1000000, 0, 0, 0 });
|
||||||
|
this.partSpacingBox.Name = "partSpacingBox";
|
||||||
|
this.partSpacingBox.Size = new System.Drawing.Size(298, 22);
|
||||||
|
this.partSpacingBox.Suffix = "";
|
||||||
|
this.partSpacingBox.TabIndex = 7;
|
||||||
|
//
|
||||||
|
// edgeLeftLabel
|
||||||
|
//
|
||||||
|
this.edgeLeftLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.edgeLeftLabel.AutoSize = true;
|
||||||
|
this.edgeLeftLabel.Location = new System.Drawing.Point(3, 121);
|
||||||
|
this.edgeLeftLabel.Name = "edgeLeftLabel";
|
||||||
|
this.edgeLeftLabel.Size = new System.Drawing.Size(100, 16);
|
||||||
|
this.edgeLeftLabel.TabIndex = 8;
|
||||||
|
this.edgeLeftLabel.Text = "Edge left:";
|
||||||
|
//
|
||||||
|
// edgeLeftBox
|
||||||
|
//
|
||||||
|
this.edgeLeftBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.edgeLeftBox.DecimalPlaces = 4;
|
||||||
|
this.edgeLeftBox.Location = new System.Drawing.Point(109, 117);
|
||||||
|
this.edgeLeftBox.Maximum = new decimal(new int[] { 1000000, 0, 0, 0 });
|
||||||
|
this.edgeLeftBox.Name = "edgeLeftBox";
|
||||||
|
this.edgeLeftBox.Size = new System.Drawing.Size(298, 22);
|
||||||
|
this.edgeLeftBox.Suffix = "";
|
||||||
|
this.edgeLeftBox.TabIndex = 9;
|
||||||
|
//
|
||||||
|
// edgeBottomLabel
|
||||||
|
//
|
||||||
|
this.edgeBottomLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.edgeBottomLabel.AutoSize = true;
|
||||||
|
this.edgeBottomLabel.Location = new System.Drawing.Point(3, 149);
|
||||||
|
this.edgeBottomLabel.Name = "edgeBottomLabel";
|
||||||
|
this.edgeBottomLabel.Size = new System.Drawing.Size(100, 16);
|
||||||
|
this.edgeBottomLabel.TabIndex = 10;
|
||||||
|
this.edgeBottomLabel.Text = "Edge bottom:";
|
||||||
|
//
|
||||||
|
// edgeBottomBox
|
||||||
|
//
|
||||||
|
this.edgeBottomBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.edgeBottomBox.DecimalPlaces = 4;
|
||||||
|
this.edgeBottomBox.Location = new System.Drawing.Point(109, 145);
|
||||||
|
this.edgeBottomBox.Maximum = new decimal(new int[] { 1000000, 0, 0, 0 });
|
||||||
|
this.edgeBottomBox.Name = "edgeBottomBox";
|
||||||
|
this.edgeBottomBox.Size = new System.Drawing.Size(298, 22);
|
||||||
|
this.edgeBottomBox.Suffix = "";
|
||||||
|
this.edgeBottomBox.TabIndex = 11;
|
||||||
|
//
|
||||||
|
// edgeRightLabel
|
||||||
|
//
|
||||||
|
this.edgeRightLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.edgeRightLabel.AutoSize = true;
|
||||||
|
this.edgeRightLabel.Location = new System.Drawing.Point(3, 177);
|
||||||
|
this.edgeRightLabel.Name = "edgeRightLabel";
|
||||||
|
this.edgeRightLabel.Size = new System.Drawing.Size(100, 16);
|
||||||
|
this.edgeRightLabel.TabIndex = 12;
|
||||||
|
this.edgeRightLabel.Text = "Edge right:";
|
||||||
|
//
|
||||||
|
// edgeRightBox
|
||||||
|
//
|
||||||
|
this.edgeRightBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.edgeRightBox.DecimalPlaces = 4;
|
||||||
|
this.edgeRightBox.Location = new System.Drawing.Point(109, 173);
|
||||||
|
this.edgeRightBox.Maximum = new decimal(new int[] { 1000000, 0, 0, 0 });
|
||||||
|
this.edgeRightBox.Name = "edgeRightBox";
|
||||||
|
this.edgeRightBox.Size = new System.Drawing.Size(298, 22);
|
||||||
|
this.edgeRightBox.Suffix = "";
|
||||||
|
this.edgeRightBox.TabIndex = 13;
|
||||||
|
//
|
||||||
|
// edgeTopLabel
|
||||||
|
//
|
||||||
|
this.edgeTopLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.edgeTopLabel.AutoSize = true;
|
||||||
|
this.edgeTopLabel.Location = new System.Drawing.Point(3, 205);
|
||||||
|
this.edgeTopLabel.Name = "edgeTopLabel";
|
||||||
|
this.edgeTopLabel.Size = new System.Drawing.Size(100, 16);
|
||||||
|
this.edgeTopLabel.TabIndex = 14;
|
||||||
|
this.edgeTopLabel.Text = "Edge top:";
|
||||||
|
//
|
||||||
|
// edgeTopBox
|
||||||
|
//
|
||||||
|
this.edgeTopBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.edgeTopBox.DecimalPlaces = 4;
|
||||||
|
this.edgeTopBox.Location = new System.Drawing.Point(109, 201);
|
||||||
|
this.edgeTopBox.Maximum = new decimal(new int[] { 1000000, 0, 0, 0 });
|
||||||
|
this.edgeTopBox.Name = "edgeTopBox";
|
||||||
|
this.edgeTopBox.Size = new System.Drawing.Size(298, 22);
|
||||||
|
this.edgeTopBox.Suffix = "";
|
||||||
|
this.edgeTopBox.TabIndex = 15;
|
||||||
|
//
|
||||||
|
// quadrantLabel
|
||||||
|
//
|
||||||
|
this.quadrantLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.quadrantLabel.AutoSize = true;
|
||||||
|
this.quadrantLabel.Location = new System.Drawing.Point(3, 233);
|
||||||
|
this.quadrantLabel.Name = "quadrantLabel";
|
||||||
|
this.quadrantLabel.Size = new System.Drawing.Size(100, 16);
|
||||||
|
this.quadrantLabel.TabIndex = 16;
|
||||||
|
this.quadrantLabel.Text = "Quadrant:";
|
||||||
|
//
|
||||||
|
// quadrantSelect1
|
||||||
|
//
|
||||||
|
this.quadrantSelect1.Anchor = System.Windows.Forms.AnchorStyles.None;
|
||||||
|
this.quadrantSelect1.BackColor = System.Drawing.Color.White;
|
||||||
|
this.quadrantSelect1.Location = new System.Drawing.Point(198, 225);
|
||||||
|
this.quadrantSelect1.Name = "quadrantSelect1";
|
||||||
|
this.quadrantSelect1.Quadrant = 1;
|
||||||
|
this.quadrantSelect1.Size = new System.Drawing.Size(120, 28);
|
||||||
|
this.quadrantSelect1.TabIndex = 17;
|
||||||
|
//
|
||||||
|
// saveButton
|
||||||
|
//
|
||||||
|
this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.saveButton.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||||
|
this.saveButton.Location = new System.Drawing.Point(243, 285);
|
||||||
|
this.saveButton.Name = "saveButton";
|
||||||
|
this.saveButton.Size = new System.Drawing.Size(90, 28);
|
||||||
|
this.saveButton.TabIndex = 1;
|
||||||
|
this.saveButton.Text = "Save";
|
||||||
|
this.saveButton.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// cancelButton
|
||||||
|
//
|
||||||
|
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
|
this.cancelButton.Location = new System.Drawing.Point(339, 285);
|
||||||
|
this.cancelButton.Name = "cancelButton";
|
||||||
|
this.cancelButton.Size = new System.Drawing.Size(90, 28);
|
||||||
|
this.cancelButton.TabIndex = 2;
|
||||||
|
this.cancelButton.Text = "Cancel";
|
||||||
|
this.cancelButton.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// NestDefaultsForm
|
||||||
|
//
|
||||||
|
this.AcceptButton = this.saveButton;
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
||||||
|
this.CancelButton = this.cancelButton;
|
||||||
|
this.ClientSize = new System.Drawing.Size(434, 322);
|
||||||
|
this.Controls.Add(this.tableLayoutPanel1);
|
||||||
|
this.Controls.Add(this.saveButton);
|
||||||
|
this.Controls.Add(this.cancelButton);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.MinimizeBox = false;
|
||||||
|
this.Name = "NestDefaultsForm";
|
||||||
|
this.ShowIcon = false;
|
||||||
|
this.ShowInTaskbar = false;
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||||
|
this.Text = "Nest Defaults";
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.widthBox)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.lengthBox)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.partSpacingBox)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.edgeLeftBox)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.edgeBottomBox)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.edgeRightBox)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.edgeTopBox)).EndInit();
|
||||||
|
this.tableLayoutPanel1.ResumeLayout(false);
|
||||||
|
this.tableLayoutPanel1.PerformLayout();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||||
|
private System.Windows.Forms.Label unitsLabel;
|
||||||
|
private System.Windows.Forms.ComboBox unitsCombo;
|
||||||
|
private System.Windows.Forms.Label widthLabel;
|
||||||
|
private OpenNest.Controls.NumericUpDown widthBox;
|
||||||
|
private System.Windows.Forms.Label lengthLabel;
|
||||||
|
private OpenNest.Controls.NumericUpDown lengthBox;
|
||||||
|
private System.Windows.Forms.Label partSpacingLabel;
|
||||||
|
private OpenNest.Controls.NumericUpDown partSpacingBox;
|
||||||
|
private System.Windows.Forms.Label edgeLeftLabel;
|
||||||
|
private OpenNest.Controls.NumericUpDown edgeLeftBox;
|
||||||
|
private System.Windows.Forms.Label edgeBottomLabel;
|
||||||
|
private OpenNest.Controls.NumericUpDown edgeBottomBox;
|
||||||
|
private System.Windows.Forms.Label edgeRightLabel;
|
||||||
|
private OpenNest.Controls.NumericUpDown edgeRightBox;
|
||||||
|
private System.Windows.Forms.Label edgeTopLabel;
|
||||||
|
private OpenNest.Controls.NumericUpDown edgeTopBox;
|
||||||
|
private System.Windows.Forms.Label quadrantLabel;
|
||||||
|
private OpenNest.Controls.QuadrantSelect quadrantSelect1;
|
||||||
|
private System.Windows.Forms.Button saveButton;
|
||||||
|
private System.Windows.Forms.Button cancelButton;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using OpenNest.Data;
|
||||||
|
using OpenNest.Geometry;
|
||||||
|
|
||||||
|
namespace OpenNest.Forms
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Edits the persisted nest defaults (Tools > Nest Defaults), written
|
||||||
|
/// to the JSON file used when creating a new nest.
|
||||||
|
/// </summary>
|
||||||
|
public partial class NestDefaultsForm : Form
|
||||||
|
{
|
||||||
|
public NestDefaultsForm(NestDefaults defaults)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
unitsCombo.SelectedIndex = defaults.Units == Units.Millimeters ? 1 : 0;
|
||||||
|
widthBox.Value = Clamp(widthBox, defaults.Size.Width);
|
||||||
|
lengthBox.Value = Clamp(lengthBox, defaults.Size.Length);
|
||||||
|
partSpacingBox.Value = Clamp(partSpacingBox, defaults.PartSpacing);
|
||||||
|
edgeLeftBox.Value = Clamp(edgeLeftBox, defaults.EdgeSpacing.Left);
|
||||||
|
edgeBottomBox.Value = Clamp(edgeBottomBox, defaults.EdgeSpacing.Bottom);
|
||||||
|
edgeRightBox.Value = Clamp(edgeRightBox, defaults.EdgeSpacing.Right);
|
||||||
|
edgeTopBox.Value = Clamp(edgeTopBox, defaults.EdgeSpacing.Top);
|
||||||
|
quadrantSelect1.Quadrant = defaults.Quadrant;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Units Units => unitsCombo.SelectedIndex == 1 ? Units.Millimeters : Units.Inches;
|
||||||
|
|
||||||
|
public NestDefaults GetDefaults()
|
||||||
|
{
|
||||||
|
return new NestDefaults
|
||||||
|
{
|
||||||
|
Units = Units,
|
||||||
|
Size = new Size((double)widthBox.Value, (double)lengthBox.Value),
|
||||||
|
Quadrant = quadrantSelect1.Quadrant,
|
||||||
|
PartSpacing = (double)partSpacingBox.Value,
|
||||||
|
EdgeSpacing = new Spacing(
|
||||||
|
(double)edgeLeftBox.Value,
|
||||||
|
(double)edgeBottomBox.Value,
|
||||||
|
(double)edgeRightBox.Value,
|
||||||
|
(double)edgeTopBox.Value
|
||||||
|
),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static decimal Clamp(NumericUpDown box, double value)
|
||||||
|
{
|
||||||
|
if (double.IsNaN(value) || double.IsInfinity(value))
|
||||||
|
return box.Minimum;
|
||||||
|
|
||||||
|
if (value < (double)box.Minimum)
|
||||||
|
return box.Minimum;
|
||||||
|
|
||||||
|
if (value > (double)box.Maximum)
|
||||||
|
return box.Maximum;
|
||||||
|
|
||||||
|
return (decimal)value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Generated
+9
-50
@@ -34,9 +34,6 @@
|
|||||||
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
||||||
this.numericUpDown1 = new OpenNest.Controls.NumericUpDown();
|
this.numericUpDown1 = new OpenNest.Controls.NumericUpDown();
|
||||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||||
this.textBox1 = new System.Windows.Forms.TextBox();
|
|
||||||
this.label3 = new System.Windows.Forms.Label();
|
|
||||||
this.button1 = new System.Windows.Forms.Button();
|
|
||||||
this.saveButton = new System.Windows.Forms.Button();
|
this.saveButton = new System.Windows.Forms.Button();
|
||||||
this.cancelButton = new System.Windows.Forms.Button();
|
this.cancelButton = new System.Windows.Forms.Button();
|
||||||
this.bottomPanel1 = new OpenNest.Controls.BottomPanel();
|
this.bottomPanel1 = new OpenNest.Controls.BottomPanel();
|
||||||
@@ -94,55 +91,20 @@
|
|||||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 297F));
|
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 297F));
|
||||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F));
|
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F));
|
||||||
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 1);
|
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
|
||||||
this.tableLayoutPanel1.Controls.Add(this.textBox1, 1, 0);
|
this.tableLayoutPanel1.Controls.Add(this.colorSchemeLabel, 0, 1);
|
||||||
this.tableLayoutPanel1.Controls.Add(this.label3, 0, 0);
|
this.tableLayoutPanel1.Controls.Add(this.colorSchemeCombo, 1, 1);
|
||||||
this.tableLayoutPanel1.Controls.Add(this.colorSchemeLabel, 0, 2);
|
this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 2);
|
||||||
this.tableLayoutPanel1.Controls.Add(this.colorSchemeCombo, 1, 2);
|
this.tableLayoutPanel1.Controls.Add(this.numericUpDown1, 1, 0);
|
||||||
this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 3);
|
|
||||||
this.tableLayoutPanel1.Controls.Add(this.numericUpDown1, 1, 1);
|
|
||||||
this.tableLayoutPanel1.Controls.Add(this.button1, 3, 0);
|
|
||||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(12, 12);
|
this.tableLayoutPanel1.Location = new System.Drawing.Point(12, 12);
|
||||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||||
this.tableLayoutPanel1.RowCount = 4;
|
this.tableLayoutPanel1.RowCount = 3;
|
||||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
|
||||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(684, 160);
|
this.tableLayoutPanel1.Size = new System.Drawing.Size(684, 160);
|
||||||
this.tableLayoutPanel1.TabIndex = 0;
|
this.tableLayoutPanel1.TabIndex = 0;
|
||||||
//
|
//
|
||||||
// textBox1
|
|
||||||
//
|
|
||||||
this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.tableLayoutPanel1.SetColumnSpan(this.textBox1, 2);
|
|
||||||
this.textBox1.Location = new System.Drawing.Point(154, 9);
|
|
||||||
this.textBox1.Name = "textBox1";
|
|
||||||
this.textBox1.Size = new System.Drawing.Size(427, 22);
|
|
||||||
this.textBox1.TabIndex = 1;
|
|
||||||
//
|
|
||||||
// label3
|
|
||||||
//
|
|
||||||
this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.label3.AutoSize = true;
|
|
||||||
this.label3.Location = new System.Drawing.Point(3, 12);
|
|
||||||
this.label3.Name = "label3";
|
|
||||||
this.label3.Size = new System.Drawing.Size(145, 16);
|
|
||||||
this.label3.TabIndex = 0;
|
|
||||||
this.label3.Text = "Nest Template Path:";
|
|
||||||
//
|
|
||||||
// button1
|
|
||||||
//
|
|
||||||
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.button1.Location = new System.Drawing.Point(588, 6);
|
|
||||||
this.button1.Margin = new System.Windows.Forms.Padding(4);
|
|
||||||
this.button1.Name = "button1";
|
|
||||||
this.button1.Size = new System.Drawing.Size(92, 28);
|
|
||||||
this.button1.TabIndex = 2;
|
|
||||||
this.button1.Text = "Browse...";
|
|
||||||
this.button1.UseVisualStyleBackColor = true;
|
|
||||||
this.button1.Click += new System.EventHandler(this.BrowseNestTemplatePath_Click);
|
|
||||||
//
|
|
||||||
// saveButton
|
// saveButton
|
||||||
//
|
//
|
||||||
this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
@@ -258,9 +220,6 @@
|
|||||||
private System.Windows.Forms.ToolTip toolTip1;
|
private System.Windows.Forms.ToolTip toolTip1;
|
||||||
private Controls.BottomPanel bottomPanel1;
|
private Controls.BottomPanel bottomPanel1;
|
||||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||||
private System.Windows.Forms.TextBox textBox1;
|
|
||||||
private System.Windows.Forms.Label label3;
|
|
||||||
private System.Windows.Forms.Button button1;
|
|
||||||
private System.Windows.Forms.DataGridView strategyGrid;
|
private System.Windows.Forms.DataGridView strategyGrid;
|
||||||
private System.Windows.Forms.GroupBox strategyGroupBox;
|
private System.Windows.Forms.GroupBox strategyGroupBox;
|
||||||
private System.Windows.Forms.Label colorSchemeLabel;
|
private System.Windows.Forms.Label colorSchemeLabel;
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ namespace OpenNest.Forms
|
|||||||
|
|
||||||
private void LoadSettings()
|
private void LoadSettings()
|
||||||
{
|
{
|
||||||
textBox1.Text = Settings.Default.NestTemplatePath;
|
|
||||||
checkBox1.Checked = Settings.Default.CreateNewNestOnOpen;
|
checkBox1.Checked = Settings.Default.CreateNewNestOnOpen;
|
||||||
numericUpDown1.Value = (decimal)Settings.Default.AutoSizePlateFactor;
|
numericUpDown1.Value = (decimal)Settings.Default.AutoSizePlateFactor;
|
||||||
|
|
||||||
@@ -92,7 +91,6 @@ namespace OpenNest.Forms
|
|||||||
|
|
||||||
private void SaveSettings()
|
private void SaveSettings()
|
||||||
{
|
{
|
||||||
Settings.Default.NestTemplatePath = textBox1.Text;
|
|
||||||
Settings.Default.CreateNewNestOnOpen = checkBox1.Checked;
|
Settings.Default.CreateNewNestOnOpen = checkBox1.Checked;
|
||||||
Settings.Default.AutoSizePlateFactor = (double)numericUpDown1.Value;
|
Settings.Default.AutoSizePlateFactor = (double)numericUpDown1.Value;
|
||||||
Settings.Default.ActiveColorScheme =
|
Settings.Default.ActiveColorScheme =
|
||||||
@@ -144,14 +142,5 @@ namespace OpenNest.Forms
|
|||||||
{
|
{
|
||||||
SaveSettings();
|
SaveSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BrowseNestTemplatePath_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
var dlg = new OpenFileDialog();
|
|
||||||
dlg.Filter = "Template File|*.nstdot";
|
|
||||||
|
|
||||||
if (dlg.ShowDialog() == DialogResult.OK)
|
|
||||||
textBox1.Text = dlg.FileName;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+2
@@ -158,6 +158,8 @@ namespace OpenNest.Properties {
|
|||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||||
|
// Legacy .nstdot nest-template path. No longer read by the app
|
||||||
|
// except by the one-time migration to defaults.json in MainForm.
|
||||||
public string NestTemplatePath {
|
public string NestTemplatePath {
|
||||||
get {
|
get {
|
||||||
return ((string)(this["NestTemplatePath"]));
|
return ((string)(this["NestTemplatePath"]));
|
||||||
|
|||||||
Reference in New Issue
Block a user