64 const std::string startFormattingCode(
"\x1B[");
65 const std::string endFormattingCode(
"m");
66 return (startFormattingCode + std::to_string(code) + endFormattingCode);
74 std::cout << std::endl << std::string(width,
'-') <<
"\r-" << title << std::endl;
89 m_columnTitles(columnTitles),
90 m_precision(precision)
102 if (m_columnTitles[m_elements.size() % m_columnTitles.size()] ==
"")
104 m_format.push_back(
"");
105 m_elements.push_back(
"");
113 if (column >= m_columnTitles.size())
116 return (m_columnTitles[column] ==
"");
123 if (m_widths.empty() || m_elements.empty())
126 const unsigned int currentElementIndex(m_elements.size() - 1);
127 const unsigned int column(currentElementIndex % m_widths.size());
128 m_widths[column] = std::max(
static_cast<unsigned int>(m_elements[currentElementIndex].length()), m_widths[column]);
135 if (m_columnTitles.empty())
138 this->PrintColumnTitles();
139 this->PrintHorizontalLine();
140 this->PrintTableElements();
147 for (
unsigned int i = 0, nColumns = m_columnTitles.size(); i < nColumns; ++i)
155 for (
unsigned int i = 0, nColumns = m_columnTitles.size(); i < nColumns; ++i)
163 if (m_columnTitles.empty())
166 const unsigned int nRows((m_elements.size() + m_columnTitles.size() - 1) / m_columnTitles.size());
167 const unsigned int nColumns(m_columnTitles.size());
168 if (nRows * nColumns != m_elements.size())
170 std::cout <<
"LArFormattingHelper::Table::PrintTableElements - Error: Number of table elements added doesn't fill a whole row" << std::endl;
174 for (
unsigned int i = 0; i < nRows * nColumns; i++)
175 this->PrintTableCell(m_elements[i], m_format[i], i);
182 if (m_columnTitles.empty())
185 const unsigned int column(index % m_widths.size());
187 const std::string separator(this->IsSeparatorColumn(column) ?
"" :
" ");
188 std::cout <<
"|" << format << separator << std::setw(m_widths[column]) << std::internal << value << separator
189 << std::resetiosflags(std::ios::adjustfield);
192 if (column == m_columnTitles.size() - 1)
193 std::cout <<
"|" << std::endl;
void PrintHorizontalLine() const
Print a horizontal line.
void CheckAndSetSeparatorColumn()
Check if the next table cell is in a separator column, if so add a blank element.
std::stringstream m_stringstream
The stringstream to print objects to.
const pandora::StringVector m_columnTitles
The vector of columns titles in the table.
std::vector< unsigned int > m_widths
The widths of each column (in units of number of characters)
void PrintTableCell(const std::string &value, const std::string &format, const unsigned int index) const
Print a table cell.
Table(const pandora::StringVector &columnTitles, const unsigned int precision=3)
Table constructor.
void Print() const
Print the table.
const unsigned int m_precision
The number of significant figures to use when displaying number types.
void UpdateColumnWidth()
Update the width of the last column in which an element was added.
bool IsSeparatorColumn(const unsigned int column) const
If the supplied column is a separator (vertical rule)
void PrintColumnTitles() const
Print the column titles.
void PrintTableElements() const
Print the table elements.
static void Reset(std::ostream &stream=std::cout)
Reset the formatting and text color of the standard output stream.
static void PrintRule(const unsigned int width=140)
Print a horizontal rule.
Style
Style code enumeration.
static void SetStyle(const Style style, std::ostream &stream=std::cout)
Set the format style (to standard output stream)
Color
Style code enumeration.
static void PrintHeader(const std::string &title="", const unsigned int width=140)
Print a header line of a given width.
static std::string GetFormatCharacter(const unsigned int code)
Get a formatting character.
static void ResetStyle(std::ostream &stream=std::cout)
Reset the style of the standard output stream.
static void SetColor(const Color color, std::ostream &stream=std::cout)
Set the text color (of standard output stream)
static void ResetColor(std::ostream &stream=std::cout)
Reset the text color of the standard output stream.
static void PrintFormatCharacter(const unsigned int code, std::ostream &stream=std::cout)
Print a formatting character to the standard output stream.
StatusCodeException class.
std::vector< std::string > StringVector