mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-10-27 02:41:06 -04:00
feat(desktop): slim the set editor to drawing, material, quantity and note
The member grid shows one Material column (name, grade, thickness and units, such as "Steel A36 0.25 in"), Qty and Note; Cut type appears only when the set mixes cut types. Move Up/Down are gone: member order only breaks ties (materials are grouped and sorted on release, nests list drawings by name), and the stored order is kept as it was. The dialog opens at 1040 px instead of 1264, with the library pane unchanged and still resizable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b376d217dd
commit
6a556b75ab
4 files changed
+103
-103
No files matched your search
@@ -322,7 +322,7 @@ public class DrawingSetFormsTests
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Editor_EditsQuantityOrderAndMembers_AndAsksBeforeDiscarding()
|
||||
public void Editor_EditsQuantityAndMembers_KeepsTheirOrder_AndAsksBeforeDiscarding()
|
||||
{
|
||||
StaTestThread.Run(
|
||||
() =>
|
||||
@@ -358,9 +358,10 @@ public class DrawingSetFormsTests
|
||||
grid.EditingControl!.Text = "12";
|
||||
Assert.True(grid.EndEdit());
|
||||
Assert.Equal("", grid.Rows[0].ErrorText);
|
||||
grid.CurrentCell = grid.Rows[2].Cells["drawingColumn"];
|
||||
Field<Button>(editor, "upButton").PerformClick();
|
||||
grid.CurrentCell = grid.Rows[2].Cells["drawingColumn"];
|
||||
// Member order changes nothing a release makes, so there is no Move Up/Down.
|
||||
Assert.Null(typeof(EditDrawingSetForm).GetField("upButton", BindingFlags.Instance | BindingFlags.NonPublic));
|
||||
Assert.Null(typeof(EditDrawingSetForm).GetField("downButton", BindingFlags.Instance | BindingFlags.NonPublic));
|
||||
grid.CurrentCell = grid.Rows[1].Cells["drawingColumn"];
|
||||
Field<Button>(editor, "removeButton").PerformClick();
|
||||
Assert.True(save.Enabled);
|
||||
|
||||
@@ -415,7 +416,7 @@ public class DrawingSetFormsTests
|
||||
|
||||
var edit = Assert.Single(edits);
|
||||
Assert.Equal((a.Id, 2, "Newer notes"), (edit.Listed.Id, edit.Listed.Revision, edit.Listed.Notes));
|
||||
Assert.Equal("Synthetic Aluminum", grid.Rows[0].Cells["materialColumn"].Value);
|
||||
Assert.Equal("Synthetic Aluminum Grade A 0.125 in", grid.Rows[0].Cells["materialColumn"].Value);
|
||||
Assert.Equal("", grid.Rows[0].Cells["warningColumn"].Value);
|
||||
Assert.Contains("revision 3", Field<Label>(editor, "statusLabel").Text);
|
||||
// Members are listed by id, so the set has nothing new to save.
|
||||
@@ -425,6 +426,58 @@ public class DrawingSetFormsTests
|
||||
"The set editor edit drawing test did not complete.");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Editor_ShowsMaterialInOneColumn_AndCutTypeOnlyWhenMixed()
|
||||
{
|
||||
StaTestThread.Run(
|
||||
() =>
|
||||
{
|
||||
var library = new FakeLibrary();
|
||||
var a = library.Add("SYN-A", "Synthetic Steel", 0.25);
|
||||
var b = library.Add("SYN-B", "", 0);
|
||||
var c = library.Add("SYN-C", "Synthetic Steel", 6);
|
||||
c.MaterialGrade = "";
|
||||
c.Units = Units.Millimeters;
|
||||
c.CutType = CutType.Waterjet;
|
||||
var sets = new InMemoryDrawingSets();
|
||||
var created = Run(sets.CreateAsync(new DrawingSetRecord
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
Name = "Synthetic kit",
|
||||
Members = new[] { a, b }.Select(d => new DrawingSetMember { DrawingId = d.Id, Quantity = 1, Drawing = d }).ToList(),
|
||||
}));
|
||||
|
||||
using var editor = new EditDrawingSetForm(new DrawingSetEditSession(sets, created, "Synthetic operator"), library, Server);
|
||||
editor.ShowMessage = (text, _, _) => throw new Xunit.Sdk.XunitException(text);
|
||||
editor.Show();
|
||||
var grid = Field<DataGridView>(editor, "memberGrid");
|
||||
|
||||
Assert.Equal(new[] { "drawingColumn", "materialColumn", "quantityColumn", "warningColumn" },
|
||||
grid.Columns.Cast<DataGridViewColumn>().Where(col => col.Visible).OrderBy(col => col.DisplayIndex).Select(col => col.Name));
|
||||
Assert.Equal("Synthetic Steel Grade A 0.25 in", grid.Rows[0].Cells["materialColumn"].Value);
|
||||
// Grade A alone: no material name or thickness to show.
|
||||
Assert.Equal("Grade A", grid.Rows[1].Cells["materialColumn"].Value);
|
||||
Assert.Equal("Qty", grid.Columns["quantityColumn"].HeaderText);
|
||||
|
||||
// Another cut type in the set brings the column back.
|
||||
var libraryGrid = Field<DataGridView>(editor, "libraryGrid");
|
||||
PumpUntil(() => libraryGrid.Rows.Count == 3, "the editor's library pane");
|
||||
libraryGrid.ClearSelection();
|
||||
libraryGrid.Rows[2].Selected = true;
|
||||
editor.AddSelectedDrawings();
|
||||
Assert.Equal(3, grid.Rows.Count);
|
||||
Assert.True(grid.Columns["cutTypeColumn"].Visible);
|
||||
Assert.Equal("Synthetic Steel 6 mm", grid.Rows[2].Cells["materialColumn"].Value);
|
||||
Assert.Equal("Waterjet", grid.Rows[2].Cells["cutTypeColumn"].Value);
|
||||
|
||||
grid.CurrentCell = grid.Rows[2].Cells["drawingColumn"];
|
||||
Field<Button>(editor, "removeButton").PerformClick();
|
||||
Assert.False(grid.Columns["cutTypeColumn"].Visible);
|
||||
},
|
||||
TestTimeout,
|
||||
"The set editor columns test did not complete.");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void History_ListsRevisionsNewestFirst_AndTheSelectedRevisionsMembers()
|
||||
{
|
||||
|
||||
+13
-71
@@ -18,7 +18,6 @@ namespace OpenNest.Forms
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
System.Windows.Forms.DataGridViewCellStyle rightAligned = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle quantityStyle = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle libraryRightAligned = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
layoutTable = new System.Windows.Forms.TableLayoutPanel();
|
||||
@@ -52,17 +51,12 @@ namespace OpenNest.Forms
|
||||
memberGrid = new System.Windows.Forms.DataGridView();
|
||||
drawingColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
materialColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
gradeColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
thicknessColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
unitsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
cutTypeColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
quantityColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
warningColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
memberButtons = new System.Windows.Forms.FlowLayoutPanel();
|
||||
editDrawingButton = new System.Windows.Forms.Button();
|
||||
removeButton = new System.Windows.Forms.Button();
|
||||
upButton = new System.Windows.Forms.Button();
|
||||
downButton = new System.Windows.Forms.Button();
|
||||
bottomTable = new System.Windows.Forms.TableLayoutPanel();
|
||||
summaryLabel = new System.Windows.Forms.Label();
|
||||
historyButton = new System.Windows.Forms.Button();
|
||||
@@ -109,7 +103,7 @@ namespace OpenNest.Forms
|
||||
layoutTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
layoutTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
layoutTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
layoutTable.Size = new System.Drawing.Size(1264, 641);
|
||||
layoutTable.Size = new System.Drawing.Size(1040, 641);
|
||||
layoutTable.TabIndex = 0;
|
||||
//
|
||||
// detailsTable
|
||||
@@ -193,11 +187,11 @@ namespace OpenNest.Forms
|
||||
splitContainer.Name = "splitContainer";
|
||||
splitContainer.Panel1.Controls.Add(libraryGroup);
|
||||
splitContainer.Panel2.Controls.Add(memberGroup);
|
||||
splitContainer.Size = new System.Drawing.Size(1248, 470);
|
||||
splitContainer.SplitterDistance = 450;
|
||||
splitContainer.Size = new System.Drawing.Size(1024, 470);
|
||||
splitContainer.SplitterDistance = 440;
|
||||
splitContainer.SplitterWidth = 6;
|
||||
splitContainer.Panel1MinSize = 320;
|
||||
splitContainer.Panel2MinSize = 420;
|
||||
splitContainer.Panel2MinSize = 380;
|
||||
splitContainer.TabIndex = 1;
|
||||
//
|
||||
// libraryGroup
|
||||
@@ -424,7 +418,7 @@ namespace OpenNest.Forms
|
||||
memberGrid.AllowUserToDeleteRows = false;
|
||||
memberGrid.AllowUserToOrderColumns = false;
|
||||
memberGrid.ContextMenuStrip = memberMenu;
|
||||
memberGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { drawingColumn, materialColumn, gradeColumn, thicknessColumn, unitsColumn, cutTypeColumn, quantityColumn, warningColumn });
|
||||
memberGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { drawingColumn, materialColumn, cutTypeColumn, quantityColumn, warningColumn });
|
||||
memberGrid.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
memberGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnKeystrokeOrF2;
|
||||
memberGrid.Margin = new System.Windows.Forms.Padding(0);
|
||||
@@ -447,7 +441,7 @@ namespace OpenNest.Forms
|
||||
drawingColumn.Name = "drawingColumn";
|
||||
drawingColumn.ReadOnly = true;
|
||||
drawingColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
drawingColumn.Width = 150;
|
||||
drawingColumn.Width = 140;
|
||||
//
|
||||
// materialColumn
|
||||
//
|
||||
@@ -455,33 +449,8 @@ namespace OpenNest.Forms
|
||||
materialColumn.Name = "materialColumn";
|
||||
materialColumn.ReadOnly = true;
|
||||
materialColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
materialColumn.Width = 100;
|
||||
//
|
||||
// gradeColumn
|
||||
//
|
||||
gradeColumn.HeaderText = "Grade";
|
||||
gradeColumn.Name = "gradeColumn";
|
||||
gradeColumn.ReadOnly = true;
|
||||
gradeColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
gradeColumn.Width = 60;
|
||||
//
|
||||
// thicknessColumn
|
||||
//
|
||||
rightAligned.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
|
||||
thicknessColumn.DefaultCellStyle = rightAligned;
|
||||
thicknessColumn.HeaderText = "Thickness";
|
||||
thicknessColumn.Name = "thicknessColumn";
|
||||
thicknessColumn.ReadOnly = true;
|
||||
thicknessColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
thicknessColumn.Width = 70;
|
||||
//
|
||||
// unitsColumn
|
||||
//
|
||||
unitsColumn.HeaderText = "Units";
|
||||
unitsColumn.Name = "unitsColumn";
|
||||
unitsColumn.ReadOnly = true;
|
||||
unitsColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
unitsColumn.Width = 50;
|
||||
materialColumn.ToolTipText = "Material, grade, thickness and units";
|
||||
materialColumn.Width = 150;
|
||||
//
|
||||
// cutTypeColumn
|
||||
//
|
||||
@@ -489,6 +458,8 @@ namespace OpenNest.Forms
|
||||
cutTypeColumn.Name = "cutTypeColumn";
|
||||
cutTypeColumn.ReadOnly = true;
|
||||
cutTypeColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||
cutTypeColumn.ToolTipText = "Shown when the set mixes cut types";
|
||||
cutTypeColumn.Visible = false;
|
||||
cutTypeColumn.Width = 65;
|
||||
//
|
||||
// quantityColumn
|
||||
@@ -517,8 +488,6 @@ namespace OpenNest.Forms
|
||||
memberButtons.AutoSize = true;
|
||||
memberButtons.Controls.Add(editDrawingButton);
|
||||
memberButtons.Controls.Add(removeButton);
|
||||
memberButtons.Controls.Add(upButton);
|
||||
memberButtons.Controls.Add(downButton);
|
||||
memberButtons.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
memberButtons.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
|
||||
memberButtons.Margin = new System.Windows.Forms.Padding(6, 0, 0, 0);
|
||||
@@ -540,7 +509,7 @@ namespace OpenNest.Forms
|
||||
// removeButton
|
||||
//
|
||||
removeButton.Enabled = false;
|
||||
removeButton.Margin = new System.Windows.Forms.Padding(0, 0, 0, 3);
|
||||
removeButton.Margin = new System.Windows.Forms.Padding(0);
|
||||
removeButton.Name = "removeButton";
|
||||
removeButton.Size = new System.Drawing.Size(100, 28);
|
||||
removeButton.TabIndex = 1;
|
||||
@@ -548,28 +517,6 @@ namespace OpenNest.Forms
|
||||
removeButton.UseVisualStyleBackColor = true;
|
||||
removeButton.Click += RemoveButton_Click;
|
||||
//
|
||||
// upButton
|
||||
//
|
||||
upButton.Enabled = false;
|
||||
upButton.Margin = new System.Windows.Forms.Padding(0, 12, 0, 3);
|
||||
upButton.Name = "upButton";
|
||||
upButton.Size = new System.Drawing.Size(100, 28);
|
||||
upButton.TabIndex = 2;
|
||||
upButton.Text = "Move Up";
|
||||
upButton.UseVisualStyleBackColor = true;
|
||||
upButton.Click += UpButton_Click;
|
||||
//
|
||||
// downButton
|
||||
//
|
||||
downButton.Enabled = false;
|
||||
downButton.Margin = new System.Windows.Forms.Padding(0, 0, 0, 3);
|
||||
downButton.Name = "downButton";
|
||||
downButton.Size = new System.Drawing.Size(100, 28);
|
||||
downButton.TabIndex = 3;
|
||||
downButton.Text = "Move Down";
|
||||
downButton.UseVisualStyleBackColor = true;
|
||||
downButton.Click += DownButton_Click;
|
||||
//
|
||||
// bottomTable
|
||||
//
|
||||
bottomTable.AutoSize = true;
|
||||
@@ -662,11 +609,11 @@ namespace OpenNest.Forms
|
||||
//
|
||||
AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
||||
CancelButton = cancelButton;
|
||||
ClientSize = new System.Drawing.Size(1264, 641);
|
||||
ClientSize = new System.Drawing.Size(1040, 641);
|
||||
Controls.Add(layoutTable);
|
||||
Font = new System.Drawing.Font("Segoe UI", 9.75F);
|
||||
MinimizeBox = false;
|
||||
MinimumSize = new System.Drawing.Size(1000, 480);
|
||||
MinimumSize = new System.Drawing.Size(840, 480);
|
||||
Name = "EditDrawingSetForm";
|
||||
ShowIcon = false;
|
||||
ShowInTaskbar = false;
|
||||
@@ -733,16 +680,11 @@ namespace OpenNest.Forms
|
||||
private System.Windows.Forms.DataGridView memberGrid;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn drawingColumn;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn materialColumn;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn gradeColumn;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn thicknessColumn;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn unitsColumn;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn cutTypeColumn;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn quantityColumn;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn warningColumn;
|
||||
private System.Windows.Forms.FlowLayoutPanel memberButtons;
|
||||
private System.Windows.Forms.Button removeButton;
|
||||
private System.Windows.Forms.Button upButton;
|
||||
private System.Windows.Forms.Button downButton;
|
||||
private System.Windows.Forms.TableLayoutPanel bottomTable;
|
||||
private System.Windows.Forms.Label summaryLabel;
|
||||
private System.Windows.Forms.Button historyButton;
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace OpenNest.Forms
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates or edits one drawing set through <see cref="DrawingSetEditSession"/>: name,
|
||||
/// customer, notes and the ordered members with a quantity each. The drawing library is
|
||||
/// customer, notes and the members with a quantity each. The drawing library is
|
||||
/// browsed in the left pane (every active drawing, a page at a time through
|
||||
/// <see cref="DrawingLibraryBrowseSession"/>); Add to Set, a double-click or Enter adds the
|
||||
/// selected drawings at the entered quantity, and a drawing already in the set is greyed
|
||||
@@ -22,7 +22,8 @@ namespace OpenNest.Forms
|
||||
/// the button) reads the member's current library record and edits its details there, so
|
||||
/// a drawing without a material or thickness can be fixed in place. History lists a saved
|
||||
/// set's revisions. Saving adds a revision on the server, guarded by the revision the set
|
||||
/// was read at.
|
||||
/// was read at. Members keep the order they were added in: nothing a release makes depends
|
||||
/// on it (materials are grouped and sorted, nests list drawings by name), so it is not edited.
|
||||
/// </summary>
|
||||
public partial class EditDrawingSetForm : Form
|
||||
{
|
||||
@@ -131,7 +132,7 @@ namespace OpenNest.Forms
|
||||
e.Cancel = true;
|
||||
}
|
||||
|
||||
// A programmatic EndEdit (Save, Remove, Move) commits without validating, so check again.
|
||||
// A programmatic EndEdit (Save, Remove, Edit Drawing) commits without validating, so check again.
|
||||
private void MemberGrid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
|
||||
{
|
||||
if (e.ColumnIndex != quantityColumn.Index)
|
||||
@@ -309,19 +310,6 @@ namespace OpenNest.Forms
|
||||
Populate(index);
|
||||
}
|
||||
|
||||
private void UpButton_Click(object sender, EventArgs e) => MoveSelected(-1);
|
||||
|
||||
private void DownButton_Click(object sender, EventArgs e) => MoveSelected(1);
|
||||
|
||||
private void MoveSelected(int offset)
|
||||
{
|
||||
var index = SelectedIndex();
|
||||
if (index < 0 || !memberGrid.EndEdit() || !session.Move(index, offset))
|
||||
return;
|
||||
Populate(index + offset);
|
||||
UpdateCommands();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the drawings selected in the library pane, in list order, at the entered
|
||||
/// quantity, skipping those already in the set.
|
||||
@@ -446,19 +434,21 @@ namespace OpenNest.Forms
|
||||
private void Populate(int select)
|
||||
{
|
||||
memberGrid.Rows.Clear();
|
||||
// Most sets are cut one way; the column appears only when the cut type tells members apart.
|
||||
cutTypeColumn.Visible = session.Members
|
||||
.Where(m => m.Drawing != null).Select(m => m.Drawing.CutType).Distinct().Skip(1).Any();
|
||||
foreach (var member in session.Members)
|
||||
{
|
||||
var drawing = member.Drawing;
|
||||
var index = memberGrid.Rows.Add(
|
||||
drawing?.Name ?? member.DrawingId.ToString(),
|
||||
drawing?.MaterialName ?? "",
|
||||
drawing?.MaterialGrade ?? "",
|
||||
drawing == null ? "" : drawing.Thickness.ToString("0.####", CultureInfo.CurrentCulture),
|
||||
drawing?.Units.ToString() ?? "",
|
||||
MaterialText(drawing),
|
||||
drawing?.CutType.ToString() ?? "",
|
||||
member.Quantity,
|
||||
Warning(drawing));
|
||||
memberGrid.Rows[index].Tag = member;
|
||||
var row = memberGrid.Rows[index];
|
||||
row.Tag = member;
|
||||
row.Cells[warningColumn.Index].ToolTipText = (string)row.Cells[warningColumn.Index].Value;
|
||||
}
|
||||
|
||||
if (select >= 0 && select < memberGrid.Rows.Count)
|
||||
@@ -473,6 +463,18 @@ namespace OpenNest.Forms
|
||||
: $"{session.Members.Count:N0} drawing{(session.Members.Count == 1 ? "" : "s")}, {parts:N0} part{(parts == 1 ? "" : "s")} per set";
|
||||
}
|
||||
|
||||
/// <summary>Material, grade, thickness and units in one line, such as "Steel A36 0.25 in".</summary>
|
||||
internal static string MaterialText(DrawingLibraryRecord drawing)
|
||||
{
|
||||
if (drawing == null)
|
||||
return "";
|
||||
var thickness = drawing.Thickness > 0
|
||||
? $"{drawing.Thickness.ToString("0.####", CultureInfo.CurrentCulture)} {UnitsHelper.GetShortString(drawing.Units)}"
|
||||
: "";
|
||||
return string.Join(" ", new[] { drawing.MaterialName, drawing.MaterialGrade, thickness }
|
||||
.Where(s => !string.IsNullOrWhiteSpace(s)).Select(s => s.Trim()));
|
||||
}
|
||||
|
||||
private static string Warning(DrawingLibraryRecord drawing)
|
||||
{
|
||||
if (drawing == null)
|
||||
@@ -493,8 +495,6 @@ namespace OpenNest.Forms
|
||||
UpdateAddCommand();
|
||||
editDrawingButton.Enabled = !saving && !editing && index >= 0;
|
||||
removeButton.Enabled = !saving && index >= 0;
|
||||
upButton.Enabled = !saving && index > 0;
|
||||
downButton.Enabled = !saving && index >= 0 && index < session.Members.Count - 1;
|
||||
saveButton.Enabled = !saving && error == null && session.IsChanged;
|
||||
if (!saving)
|
||||
statusLabel.Text = error == null ? "" : char.ToUpper(error[0], CultureInfo.CurrentCulture) + error[1..];
|
||||
|
||||
@@ -414,16 +414,21 @@ a set shows its notes.
|
||||
|
||||
- **New Set...** and **Edit...** open the set editor
|
||||
(`OpenNest.Data.DrawingSetEditSession`): name, customer, notes and the member
|
||||
grid (drawing, material, grade, thickness, units, cut type, quantity, note).
|
||||
grid: drawing, material (name, grade, thickness and units in one column, such
|
||||
as "Steel A36 0.25 in"), quantity per set and a note. A cut type column
|
||||
appears only when the set mixes cut types.
|
||||
The editor's left pane browses the library in place, with no second dialog:
|
||||
every active drawing (never filtered to a nest), searched, sorted and paged
|
||||
like the Drawing Library dialog. Select one or several and choose **Add to Set**,
|
||||
double-click or press Enter to add them at the entered **Qty per set**.
|
||||
Drawings already in the set are greyed; one picked again is skipped and
|
||||
named, so there is one member per drawing. Quantities are edited
|
||||
in the grid (1 to 100,000); **Remove**, **Move Up** and **Move Down** change
|
||||
the list. The note column flags drawings archived in the library (skipped on
|
||||
release unless included) and drawings with no material or thickness (cannot be
|
||||
in the grid (1 to 100,000) and **Remove** drops a member. Members stay in
|
||||
the order they were added (and stored in that order); nothing a release
|
||||
makes depends on it, since materials are grouped and sorted and nests list
|
||||
drawings by name, so the editor has no Move Up/Down. Drag the divider to
|
||||
widen the library pane. The note column flags drawings archived in the
|
||||
library (skipped on release unless included) and drawings with no material or thickness (cannot be
|
||||
released until set; double-click to open
|
||||
[Edit Drawing](#edit-drawing-desktop)).
|
||||
- **Save** adds a revision guarded by the revision the set was read at; a 409 is
|
||||
|
||||
Reference in new issue
Block a user