Example #1
0
        public void Update()
        {
            Console.Clear();

            var leftPane  = new List <string>();
            int paneWidth = (Console.WindowWidth - 1) / 2;

            IEnumerator <Tuple <string, string> > inputEnum = m_inputs.GetEnumerator();

            while (true)
            {
                if (!inputEnum.MoveNext())
                {
                    break;
                }

                var sb = new StringBuilder("> ");
                for (int i = 0; i < inputEnum.Current.Item1.Length; i++)
                {
                    char c = inputEnum.Current.Item1[i];
                    if (sb.Length < paneWidth && c != '\n')
                    {
                        sb.Append(c);
                    }
                    else
                    {
                        leftPane.Add(sb.ToString());
                        sb.Clear();
                        sb.Append("...> ");
                        if (c != '\n')
                        {
                            sb.Append(c);
                        }
                    }
                }
                if (sb.Length > 0)
                {
                    leftPane.Add(sb.ToString());
                    sb.Clear();
                }

                if (inputEnum.Current.Item2 != null)
                {
                    for (int i = 0; i < inputEnum.Current.Item2.Length; i++)
                    {
                        char c = inputEnum.Current.Item2[i];
                        if (sb.Length < paneWidth && c != '\n')
                        {
                            sb.Append(c);
                        }
                        else
                        {
                            leftPane.Add(sb.ToString());
                            sb.Clear();
                            if (c != '\n')
                            {
                                sb.Append(c);
                            }
                        }
                    }
                    if (sb.Length > 0)
                    {
                        leftPane.Add(sb.ToString());
                    }
                }
            }

            var visibleInput = leftPane.Reverse <string>().Take(Console.WindowHeight - 1).Reverse <string>();
            var visibleStack = m_stack.Get(Math.Min(m_stack.Count, Console.WindowHeight - 1)).GetEnumerator();

            for (int i = 0; i < Console.WindowHeight - 1; i++)
            {
                bool haveStack = visibleStack.MoveNext();
                Console.Out.WriteLine("{0,-" + paneWidth.ToString() + "}" + s_verticalBar + "{1,-" + paneWidth.ToString() + "}",
                                      visibleInput.ElementAtOrDefault(i, string.Empty),
                                      haveStack ? string.Format("{0}: {1}", i + 1, visibleStack.Current.ToString()) : string.Empty);
            }

            Console.Out.Write("> ");
        }