private void DisplayAnswer(ref AnswerDisplayInfo answerInfo) { this.virtualConsole.Write(answerInfo.row, answerInfo.col, answerInfo.fulltext, ref answerInfo.style); }
public AnswerDisplayInfo?DisplayMessage(string message, MessageType messageType = MessageType.message, int askLength = 0, bool?useErrorLine = null) { int dispRow; Style style; CheckAndNormalizeTextLineNumbers(); switch (messageType) { case MessageType.description: dispRow = (useErrorLine ?? false) ? messageTextLine : descriptionTextLine; style = styles[StyleIndex.Description]; break; case MessageType.error: dispRow = (useErrorLine ?? true) ? messageTextLine : descriptionTextLine; style = styles[StyleIndex.Error]; break; case MessageType.ask: dispRow = (useErrorLine ?? true) ? messageTextLine : descriptionTextLine; style = styles[StyleIndex.Question]; break; case MessageType.message: dispRow = (useErrorLine ?? true) ? messageTextLine : descriptionTextLine; style = styles[StyleIndex.Message]; break; default: throw new ArgumentException("DisplayMessage(): Invalid MessageType parameter!", nameof(messageType)); } int backWidth = virtualConsole.cols; int leftMargin = 0; // TODO: ! int rightMargin = 0; // TODO: ! backWidth -= (leftMargin + rightMargin); if (string.IsNullOrWhiteSpace(message)) { // Clear message this.virtualConsole.Write(dispRow, leftMargin, new string(' ', backWidth), ref style); return(null); } else { this.virtualConsole.Write(dispRow, leftMargin, new string(' ', backWidth), ref style); message = message.Trim(); if (messageType == MessageType.ask) { askLength = Math.Min(Math.Max(askLength, 1), 12); int freeSpace = (backWidth - askLength) - message.Length; if (freeSpace > 2) { message += " : "; } else if (freeSpace > 1) { message += ": "; } else if (freeSpace > 0) { message += ":"; } if (message.Length > (backWidth - askLength)) { message = message.Substring(0, (backWidth - askLength)); } int displayPosition = (backWidth - askLength - message.Length) / 2; var answerInfo = new AnswerDisplayInfo(dispRow, leftMargin + displayPosition + message.Length, askLength, ref style); this.virtualConsole.Write(dispRow, leftMargin + displayPosition, message, ref style); DisplayAnswer(ref answerInfo); return(answerInfo); } else { if (message.Length < backWidth) { string padText = new string(' ', (backWidth - message.Length) / 2); message = padText + message + padText; if (message.Length < backWidth) { message += ' '; } } if (message.Length > backWidth) { message = message.Substring(0, backWidth); } } } this.virtualConsole.Write(dispRow, leftMargin + ((backWidth - message.Length) / 2), message, ref style); return(null); }