private void CopyToClipboard() { StringBuilder result = new StringBuilder(); var dataCube = cube.GetCurrentState(); for (var side = CubeSide.Left; side <= CubeSide.Back; side++) { result.Append('('); foreach (var coords in CoordsHelper.EnumerateSide(side, cube.Size)) { result.Append(dataCube[coords][side]); } result.Append(')'); } Clipboard.SetText(result.ToString()); }
private bool PasteFromClipboard() { string text = Clipboard.GetText(); if (text.Length == 0) { return(false); } var dataCube = RubiksCube.GetDefaultCube(cube.Size); // cune has 6 sides int[][] sides = new int[6][]; int index = 0; for (int i = 0; i < sides.Length; i++) { int openBracket = text.IndexOf('(', index); if (openBracket == -1) { return(false); } int closeBracket = text.IndexOf(')', openBracket + 1); if (closeBracket == -1) { return(false); } index = closeBracket + 1; string colors = text.Substring( openBracket + 1, closeBracket - openBracket - 1); colors = new string(colors.ToCharArray() .Where(ch => char.IsDigit(ch)).ToArray()); // cube side has 3x3 elements if (colors.Length != cube.Size * cube.Size) { return(false); } sides[i] = new int[colors.Length]; for (int j = 0; j < colors.Length; j++) { char digit = colors[j]; if (digit < '1' || digit > '6') { return(false); } sides[i][j] = (int)(digit - '0'); } } // check that remainder part of text is whitespace chars for (; index < text.Length; index++) { if (!char.IsWhiteSpace(text[index])) { return(false); } } for (int i = 0; i < sides.Length; i++) { var side = (CubeSide)i; int j = 0; foreach (var coords in CoordsHelper.EnumerateSide(side, cube.Size)) { dataCube[coords][side] = sides[i][j]; j++; } } cube.ReplaceCube(dataCube); return(true); }