Exemplo n.º 1
0
        public void RenderNextProperty(ColloredStringBuilder stream, string propertyValue, int elementNr, bool isSelected, bool focused)
        {
            if (elementNr != 0)
            {
                stream.Append(VerticalLineSeperator);
                if (DrawSpace)
                {
                    stream.Append(" ");
                }
            }
            if (focused)
            {
                stream.Append(propertyValue, FocusedItemForgroundStyle, FocusedItemBackgroundStyle);
            }
            else if (isSelected)
            {
                stream.Append(propertyValue, SelectedItemForgroundStyle, SelectedItemBackgroundStyle);
            }
            else
            {
                if (id % 2 != 0)
                {
                    stream.Append(propertyValue, AlternatingTextStyle, AlternatingTextBackgroundStyle);
                }
                else
                {
                    stream.Append(propertyValue);
                }
            }

            if (DrawSpace)
            {
                stream.Append(" ");
            }
        }
Exemplo n.º 2
0
        public int RenderHeader(ColloredStringBuilder stream, List <string> columnHeader)
        {
            _width = columnHeader.Sum(s => s.Length) + columnHeader.Count;
            if (DrawSpace)
            {
                _width += columnHeader.Count * 2;
                _width -= 2;
            }

            stream.Append(UpperLeftBound);

            if (DrawSpace)
            {
                stream.Append(" ");
            }
            DrawHorizontalLineEx(stream, columnHeader, '┬');

            if (DrawSpace)
            {
                stream.Append(" ");
            }

            stream.Append(UpperRightBound);
            stream.AppendLine();
            stream.Append(VerticalLineSeperator);

            if (DrawSpace)
            {
                stream.Append(" ");
            }

            for (int index = 0; index < columnHeader.Count; index++)
            {
                var propName = columnHeader[index];
                if (DrawSpace && index != 0)
                {
                    stream.Append(" ");
                }

                stream.Append(propName);

                if (DrawSpace)
                {
                    stream.Append(" ");
                }
                if (index + 1 < columnHeader.Count)
                {
                    stream.Append(VerticalLineSeperator);
                }
            }

            stream.Append(VerticalLineSeperator);
            stream.AppendLine();
            stream.Append('├');
            DrawHorizontalLineEx(stream, columnHeader, '┼');
            stream.Append('┤');

            //DrawHorizontalLine(stream, '├', '┤');
            return(_width);
        }
Exemplo n.º 3
0
 public void RenderFooter(ColloredStringBuilder stream, List <string> columnHeader)
 {
     stream.Append(LowerLeftBound);
     DrawHorizontalLineEx(stream, columnHeader, '┴');
     stream.Append(LowerRightBound);
     //DrawHorizontalLine(stream, LowerLeftBound, LowerRightBound);
 }
Exemplo n.º 4
0
        private void DrawHorizontalLine(ColloredStringBuilder stream, char start, char end)
        {
            stream.Append(start);

            if (DrawSpace)
            {
                stream.Append(" ");
            }

            for (int i = 0; i < _width - 1; i++)
            {
                stream.Append(HorizontalLineSeperator);
            }

            if (DrawSpace)
            {
                stream.Append(" ");
            }

            stream.Append(end);
        }
Exemplo n.º 5
0
        public void BeginRenderProperty(ColloredStringBuilder stream, int elementNr, int maxElements, bool isSelected, bool focused)
        {
            id = elementNr;
            if (isSelected)
            {
                stream.Append('x');
            }
            else if (focused)
            {
                stream.Append('>');
            }
            else
            {
                stream.Append(VerticalLineSeperator);
            }

            if (DrawSpace)
            {
                stream.Append(" ");
            }
        }
Exemplo n.º 6
0
        private void RenderOnBottom(ColloredStringBuilder stream, string value)
        {
            stream.Append(VerticalLineSeperator);
            if (DrawSpace)
            {
                stream.Append(" ");
            }
            stream.Append(value);
            var toEnd = _width - value.Length;

            for (int i = 0; i < toEnd - 1; i++)
            {
                stream.Append(" ");
            }

            if (DrawSpace)
            {
                stream.Append(" ");
            }

            stream.AppendLine(VerticalLineSeperator.ToString());
            DrawHorizontalLine(stream, LowerLeftBound, LowerRightBound);
        }
Exemplo n.º 7
0
        private void DrawHorizontalLineEx(ColloredStringBuilder stream, List <string> headerInfos, char midChar)
        {
            var localCounter  = 0;
            var elemntCounter = 0;

            if (DrawSpace)
            {
                stream.Append(" ");
            }
            for (int i = 0; i < _width - 1; i++)
            {
                var targetChar = HorizontalLineSeperator;

                if (headerInfos.Count - 1 > elemntCounter)
                {
                    var element = headerInfos[elemntCounter];

                    var lengthWithExt = element.Length;
                    if (localCounter >= lengthWithExt)
                    {
                        elemntCounter++;
                        targetChar   = (midChar);
                        localCounter = 0;
                    }
                    else
                    {
                        localCounter++;
                    }
                }
                stream.Append(targetChar);
            }
            if (DrawSpace)
            {
                stream.Append(" ");
            }
        }
Exemplo n.º 8
0
 public void EndRenderProperty(ColloredStringBuilder stream, int elementNr, bool isSelected, bool focused)
 {
     stream.Append(VerticalLineSeperator);
 }
Exemplo n.º 9
0
 public void RenderAdditionalInfos(ColloredStringBuilder stream, StringBuilder additional)
 {
     RenderOnBottom(stream, additional.ToString());
 }
Exemplo n.º 10
0
        public void RenderSummary(ColloredStringBuilder stream, int sum)
        {
            var summery = sum + " items";

            RenderOnBottom(stream, summery);
        }
Exemplo n.º 11
0
        public void RenderGrid()
        {
            var stream = new ColloredStringBuilder();

            SourceList.CollectionChanged -= SourceListOnCollectionChanged;

            //For Native type Support we need to wrap the Type into a Anonymos one



            if (ObserveList)
            {
                SourceList.CollectionChanged += SourceListOnCollectionChanged;
            }

            var size   = 0;
            var fod    = SourceList.FirstOrDefault();
            var length = SourceList.Count;

            if (fod == null)
            {
                return;
            }

            Target = fod.GetType();
            if (Target.IsPrimitive)
            {
                SourceList = new ObservableCollection <object>(SourceList.Select(s => new { s }));
                Target     = fod.GetType();
            }

            var props =
                Target.GetProperties().Select(s =>
            {
                var name = s.Name;
                if (RenderTypeName)
                {
                    name = string.Format("{0} {{{1}}}", name, s.PropertyType.ToString());
                }

                var valueInformations = new ValueInformations()
                {
                    GetValue       = s.GetValue,
                    MaxContentSize = SourceList.Max(e =>
                    {
                        var value = s.GetValue(e);
                        if (value != null)
                        {
                            return(value.ToString().Length);
                        }
                        return(Null.ToString().Length);
                    }),
                    Name = name,
                };

                return(valueInformations);
            }).ToList();


            if (RenderRowNumber)
            {
                int fakeId = 0;
                //fake new Column
                props.Insert(0, new ValueInformations()
                {
                    Name           = "Nr",
                    MaxContentSize = length.ToString().Length,
                    GetValue       = o => fakeId++
                });
            }

            foreach (var valueInfo in props)
            {
                valueInfo.Name = AlignValueToSize(valueInfo.Name, valueInfo.MaxSize);
                size          += valueInfo.Name.Length;
            }

            var headerInfos = props.Select(s => s.Name).ToList();

            this.ConsolePropertyGridStyle.RenderHeader(stream, headerInfos);

            stream.AppendLine();

            if (Console.WindowWidth < size)
            {
                Console.WindowWidth = size + 30;
            }

            for (int i = 0; i < length; i++)
            {
                var item = SourceList[i];

                var selected = SelectedItems != null && SelectedItems.Contains(item);
                var focused  = FocusedItem == item;

                this.ConsolePropertyGridStyle.BeginRenderProperty(stream, i, length.ToString().Length, selected, focused);

                for (int index = 0; index < props.Count; index++)
                {
                    var propertyInfo = props[index];
                    var value        = propertyInfo.GetValue(item) ?? Null;
                    var norm         = AlignValueToSize(value.ToString(), propertyInfo.MaxSize);
                    this.ConsolePropertyGridStyle.RenderNextProperty(stream, norm, index, selected, focused);
                }
                this.ConsolePropertyGridStyle.EndRenderProperty(stream, i, selected, focused);
                stream.AppendLine();
            }


            this.ConsolePropertyGridStyle.RenderFooter(stream, headerInfos);
            stream.AppendLine();

            if (RenderSum)
            {
                this.ConsolePropertyGridStyle.RenderSummary(stream, length);
                stream.AppendLine();
            }

            if (_extraInfos.Length > 0)
            {
                this.ConsolePropertyGridStyle.RenderAdditionalInfos(stream, _extraInfos);
                stream.AppendLine();
            }

            if (!PersistendAdditionalInfos)
            {
                _extraInfos.Clear();
            }

            if (ClearConsole)
            {
                Console.Clear();
            }
            stream.Render();
        }