private void ChangeAllChildNodesSelection(TreeNode node, bool isChecked) { foreach (TreeNode childNode in node.Nodes) { OpeningMove move = (OpeningMove)childNode.Tag; childNode.Checked = isChecked; move.Selected = isChecked; if (childNode.Nodes.Count > 0) { ChangeAllChildNodesSelection(childNode, isChecked); } } }
private OpeningMove AddMove(ChessMove move) { try { if (TrvRepertoires.SelectedNode != null) { if (TrvRepertoires.SelectedNode.Tag.GetType() == typeof(OpeningMove)) { var moveColor = chessboard1.Turn == ChessColor.White ? ChessColor.Black : ChessColor.White; var currentMove = (OpeningMove)TrvRepertoires.SelectedNode.Tag; var moveIndex = currentMove.MoveIndex + (moveColor == ChessColor.Black ? 0 : 1); var newMove = new OpeningMove(new OpeningHalfMove(move), moveColor, moveIndex, chessboard1.GetFEN()) { Name = currentMove.Name, ECO = currentMove.ECO }; var newNode = new TreeNode(newMove.ToString()) { Tag = newMove }; TrvRepertoires.SelectedNode.Nodes.Add(newNode); TrvRepertoires.SelectedNode = newNode; currentMove.Children.Add(newMove); chessOpeningInfo1.Enabled = true; return(newMove); } else if (TrvRepertoires.SelectedNode.Tag.GetType() == typeof(OpeningRepertoire)) { var moveColor = chessboard1.Turn == ChessColor.White ? ChessColor.Black : ChessColor.White; var newOpening = new OpeningMove(new OpeningHalfMove(move), moveColor, 1, chessboard1.GetFEN()); var newNode = new TreeNode(newOpening.ToString()) { Tag = newOpening }; TrvRepertoires.SelectedNode.Nodes.Add(newNode); TrvRepertoires.SelectedNode = newNode; this.SelectedRepertoire.Moves.Add(newOpening); chessOpeningInfo1.Enabled = true; ShowOpeningInfo(newOpening); } } } catch (Exception ex) { chessboard1.UndoMove(); ShowError(ex); } return(null); }
private void ShowOpeningInfo(OpeningMove opening) { try { chessOpeningInfo1.OpeningName = opening.Name; chessOpeningInfo1.Eco = opening.ECO; chessOpeningInfo1.OpeningMove = opening.Move.ToSAN; chessOpeningInfo1.MoveAnnotation = opening.MoveAnnotation; chessOpeningInfo1.Comment = opening.Comment; chessOpeningInfo1.SelectName(); chessOpeningInfo1.GameCount = opening.MoveStat.GameCount; chessOpeningInfo1.WhitePercent = opening.MoveStat.WhiteStat; chessOpeningInfo1.NullPercent = opening.MoveStat.NullStat; } catch (Exception ex) { ShowError(ex); } }
private TreeNode SearchExistingNode(ChessMove move) { try { if (TrvRepertoires.SelectedNode != null) { foreach (TreeNode childNode in TrvRepertoires.SelectedNode.Nodes) { OpeningMove childMove = (OpeningMove)childNode.Tag; if (childMove.Move == new OpeningHalfMove(move)) { return(childNode); } } } } catch (Exception ex) { chessboard1.UndoMove(); ShowError(ex); } return(null); }
private void ContexMenuItemClicked(ToolStripItem clickedItem) { try { switch (clickedItem.Name) { case _ctxMnuLoadNewBook: break; case _ctxMnuRename: CtxMnuRepertoire.Hide(); var newNameDlg = new FrmRenameBook(this.Book.Name); if (newNameDlg.ShowDialog() == DialogResult.OK) { this.Book.Name = newNameDlg.NewName; TrvRepertoires.Nodes[0].Text = newNameDlg.NewName; } break; case _selectAllChildren: _updatingSelection = true; ChangeAllChildNodesSelection(TrvRepertoires.SelectedNode, !TrvRepertoires.SelectedNode.Checked); TrvRepertoires.SelectedNode.Checked = !TrvRepertoires.SelectedNode.Checked; TrvRepertoires.SelectedNode.ExpandAll(); _updatingSelection = false; break; case _expandAllChildren: if (TrvRepertoires.SelectedNode.IsExpanded) { TrvRepertoires.SelectedNode.Collapse(); } else { TrvRepertoires.SelectedNode.ExpandAll(); } break; case _ctxMnuDelete: CtxMnuRepertoire.Hide(); if (MessageBox.Show(Translate("Msg_SureToDelete"), Translate("Msg_Confirmation"), MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { try { TreeNode selectedNode = TrvRepertoires.SelectedNode; TreeNode parentNode = selectedNode.Parent; OpeningMove parentMove = (OpeningMove)parentNode.Tag; OpeningMove selectedMove = (OpeningMove)selectedNode.Tag; parentMove.Children.Remove(selectedMove); parentNode.Nodes.Remove(selectedNode); NodeSelected(parentNode); } catch (Exception ex) { ShowError(ex); } } break; } } catch (Exception ex) { ShowError(ex); } }
public List<OpeningMove> FindMoves() { var output = new Dictionary<string, OpeningMove>(); for(int i = 0; i < Book.Length; i++) { var line = Book[i]; string nextMove = line[MovesMade + 1]; int from = Notation.TextToTile(nextMove.Substring(0, 2)); int to = Notation.TextToTile(nextMove.Substring(2, 2)); OpeningMove move = null; if (output.ContainsKey(nextMove)) { move = output[nextMove]; } else { move = new OpeningMove(); move.From = from; move.To = to; output[nextMove] = move; } move.SampleCount++; if (line[0] == "D") move.Draws++; else if (line[0] == "B") move.BlackWins++; else if (line[0] == "W") move.WhiteWins++; } return output.Select(x => x.Value).ToList(); }