internal void AppendToLog(string text, LogItemType type) { if (InvokeRequired) { if (AppendToLogDelegater == null) { AppendToLogDelegater = new AppendToLogDelegate(AppendToLog); } Invoke(AppendToLogDelegater, new object[] { text, type }); } else { Color colText; // TODO let the user configure the colours switch (type) { case LogItemType.Action: colText = Color.Black; break; case LogItemType.Start: colText = Color.Turquoise; break; case LogItemType.Finish: colText = Color.Brown; break; case LogItemType.Pass: colText = Color.Green; break; case LogItemType.Fail: colText = Color.Red; break; case LogItemType.Disabled: colText = Color.LightGray; break; case LogItemType.NA: colText = Color.Purple; break; case LogItemType.Debug: colText = Color.SlateGray; break; case LogItemType.Information: colText = Color.Navy; break; case LogItemType.Warning: colText = Color.LightPink; break; case LogItemType.Error: colText = Color.DeepPink; break; default: throw GUI.ApeException("Implement support for LogItemType." + type.ToString()); } string TextToAdd; Lines += 1; if (Lines == 1) { TextToAdd = text; } else { TextToAdd = "\n" + text; } // Append the line and set its colour to be correct int TextLengthBeforeAppend = rtbLogViewer.TextLength; rtbLogViewer.AppendText(TextToAdd); rtbLogViewer.SelectionStart = TextLengthBeforeAppend; rtbLogViewer.SelectionLength = TextToAdd.Length; rtbLogViewer.SelectionColor = colText; rtbLogViewer.ScrollToCaret(); // If we have more than 40 lines if (Lines > 40) { // Remove the first line currently in the rich text box rtbLogViewer.SelectionStart = 0; rtbLogViewer.SelectionLength = rtbLogViewer.Text.IndexOf('\n') + 1; rtbLogViewer.ReadOnly = false; rtbLogViewer.SelectedText = ""; rtbLogViewer.ReadOnly = true; Lines -= 1; rtbLogViewer.SelectionStart = rtbLogViewer.TextLength; } } }