public void EnterVariation(IPgnReader iParser) { _states.Push(_lastNumber); if (_tmpStep != null) { _tmpStep.Parent = (IChessItem)_tmpStepTree; _tmpStepTree = _tmpStep; if (_tmpStepTree.Items == null) { _tmpStepTree.Items = new Variation(); } //_tmpStepTree.Items.Add(_tmpStep); _tmpStep = null; } else { IStepTree tmpTree = null; int i = 1; while (!(_tmpStepTree.Items[_tmpStepTree.Items.Count - i] is IStepTree)) { i++; } tmpTree = (IStepTree)_tmpStepTree.Items[_tmpStepTree.Items.Count - i]; tmpTree.Parent = (IChessItem)_tmpStepTree; _tmpStepTree = tmpTree; } if (_tmpStepTree.Items == null) { _tmpStepTree.Items = new Steps(); } }
public void ExitVariation(IPgnReader iParser) { if (iParser.State != Enums.PGNReaderState.Number) { StepParsed(iParser); } _tmpStepTree = (IStepTree)_tmpStepTree.Parent; _lastNumber = (string)_states.Pop(); }
private void MarkNode(IStepTree tree, TreeNode node, StringBuilder text) { foreach (IChessItem item in tree.Items) { TreeNode subnode = new TreeNode(); if (item is Step) { Step step = (Step)item; if (step.GameSide == Enums.GameSide.White) { text = new StringBuilder(); text.Append(item.ItemType).Append(": ").Append(step.Generator()); } if (step.GameSide == Enums.GameSide.Black) { text.Append(' ').Append(step.Generator()); subnode.Text = text.ToString(); node.Nodes.Add(subnode); } if (item is IStepTree) { IStepTree subtree = (IStepTree)item; if (subtree.HasChildren) { MarkNode(subtree, subnode, new StringBuilder()); } } } else { text = new StringBuilder(); text.Append(item.ItemType).Append(": ").Append(item.Value); subnode.Text = text.ToString(); node.Nodes.Add(subnode); } } }
public void NewGame(IPgnReader iParser) { _states = new Stack(); _tmpStepTree = new Record(); _ChessRecords.Add((Record)_tmpStepTree); }