Exemple #1
0
 private void DisplayAnswer(ref AnswerDisplayInfo answerInfo)
 {
     this.virtualConsole.Write(answerInfo.row, answerInfo.col, answerInfo.fulltext, ref answerInfo.style);
 }
Exemple #2
0
        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);
        }