private void SetDefaultHarnessOrder() { if (string.IsNullOrEmpty(HarnessOrder.Trim())) { HarnessOrder = string.Join(", ", Harnesses.Select(h => h.Letter.ToLower())); } }
private bool AnyDuplicateHarnessLetters(out string letters) { var dups = Harnesses.Select(h => h.Letter.ToLower()).GroupBy(s => s).Where(grp => grp.Count() > 1).Select(grp => grp.Key); if (dups.Any()) { letters = string.Join(", ", dups); return(true); } letters = null; return(false); }
public void Draw(Control drawingSurface) { int width = drawingSurface.ClientRectangle.Width / SquareSize; int height = drawingSurface.ClientRectangle.Height / SquareSize; if (AnyDuplicateHarnessLetters(out string letters)) { throw new ArgumentException($"Can't have duplicate harness letter: {letters}"); } SetDefaultHarnessOrder(); var harnessGroups = GetHarnessGroups(); var allHarnesses = Harnesses.ToDictionary(row => row.Letter.ToLower()); ValidateHarnessLetters(harnessGroups, allHarnesses); _warpSquares = new HashSet <Point>(); using (Graphics g = drawingSurface.CreateGraphics()) { for (int y = 1; y < height; y++) { int index = (y - 1) % harnessGroups.Count; foreach (var harnessLetter in harnessGroups[index]) { var pattern = allHarnesses[harnessLetter].GetPattern(width); for (int x = 1; x < width; x++) { if (pattern.Contains(x)) { DrawBox(g, x, y, WarpColor); _warpSquares.Add(new Point(x, y)); } else { if (!HasWarp(x, y)) { DrawBox(g, x, y, WeftColor); } } } } } } }
public void AlertUnusedHarnesses(DataGridView dataGridView) { SetDefaultHarnessOrder(); var harnessesDefined = Harnesses.Select(h => h.Letter.ToLower()); var harnessesInUse = HarnessOrder.ToCharArray().Select(c => c.ToString().ToLower()); var unused = harnessesDefined.Except(harnessesInUse); foreach (DataGridViewRow row in dataGridView.Rows) { if (row.IsNewRow) { continue; } row.ErrorText = null; if (unused.Contains(row.Cells["colLetter"].Value.ToString().ToLower())) { row.ErrorText = "Your pattern doesn't use this harness"; } } }