minhhungit / ConsoleTableExt

A fluent library to print out a nicely formatted table in a console application C#
MIT License
333 stars 37 forks source link

Colour Support #1

Closed kiran94 closed 3 years ago

kiran94 commented 6 years ago

Can we implement Colour Support in the tables?

Making use of something like:

Console.ForegroundColor = ConsoleColor.Green
minhhungit commented 6 years ago

@kiran94 maybe in next version! I will implement more methods to help us format header, rows

minhhungit commented 6 years ago

@kiran94 But if you don't want to wait to next release, you can format it by manual. Remember that you can replace ExportAndWriteLine() method with your code, do something like this:

var builder = ConsoleTableBuilder.From(GetSampleTableData());
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(builder.Export());
Console.ResetColor();

FYI, ExportAndWriteLine() is just a wrapper method which help us write less code

public static void ExportAndWriteLine(this ConsoleTableBuilder builder)
{
    Console.WriteLine(builder.Export());
}

Hope this help

vanillajonathan commented 3 years ago

@minhhungit How is the formatting of header rows going?

minhhungit commented 3 years ago

@vanillajonathan please use Discussion for asking question Quick reply: there is sample here https://github.com/minhhungit/ConsoleTableExt/issues/8#issuecomment-770279435 You will need to use WithCharMapDefinition and WithHeaderCharMapDefinition

vanillajonathan commented 3 years ago

@minhhungit I meant formatting of header rows with colors, since this issue was about color support. So example if the data rows are with gray text then the text in the header rows could be in white text to stand out.

minhhungit commented 3 years ago

Ahh sorry, I did not notice it, at this time I have no idea how we should support color, will we color table border, cell content... ?

Right now if you really want to color the table, you can use builder.Export(), it will expose a StringBuilder You can then foreach line and format it by manual

Anyway, I will reopen this issue. If you have idea, please let me know.

vanillajonathan commented 3 years ago

The WithTitle method could have an overload that takes a second parameter of enum type ConsoleColor. Or there could be a SetTitleColor and a SetColumn color method.

minhhungit commented 3 years ago

yeah It is possible for those functions

minhhungit commented 3 years ago

Humm, I checked it, unlucky table is built from StringBuilder ( Export ), we can not inject code to change the color of text in StringBuilder So I think we have to return new object instead StringBuilder, using a difference type not StringBuilder can cause problem about performance

minhhungit commented 3 years ago

Right now I just can implement it like this (only support table title, other things like column name, border, cell content are more complex)

image

Code is pushed to branch https://github.com/minhhungit/ConsoleTableExt/tree/Feature/Coloring Have not merged to master yet

minhhungit commented 3 years ago

merged, now at version 3.1.2 we can use

.WithTitle("HERE IS YOUR TITLE", ConsoleColor.Yellow, ConsoleColor.DarkGray)