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(" "); } }
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); }
public void RenderFooter(ColloredStringBuilder stream, List <string> columnHeader) { stream.Append(LowerLeftBound); DrawHorizontalLineEx(stream, columnHeader, '┴'); stream.Append(LowerRightBound); //DrawHorizontalLine(stream, LowerLeftBound, LowerRightBound); }
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); }
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(" "); } }
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); }
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(" "); } }
public void EndRenderProperty(ColloredStringBuilder stream, int elementNr, bool isSelected, bool focused) { stream.Append(VerticalLineSeperator); }
public void RenderAdditionalInfos(ColloredStringBuilder stream, StringBuilder additional) { RenderOnBottom(stream, additional.ToString()); }
public void RenderSummary(ColloredStringBuilder stream, int sum) { var summery = sum + " items"; RenderOnBottom(stream, summery); }
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(); }