void TableFormat::writeWholeTable( std::ostream& out, const std::string& header, const Array<std::string>& columnNames, const Array<TableColumn>& columns ) const { /* compute the total width */ int pgWidth = 0; for (Array<TableColumn>::size_type i=0; i<columnNames.size(); i++) { int cw = defaultColumnWidth(); if (columnWidths_.size() != 0) cw = columnWidths_[i]; pgWidth += cw; } setPageWidth(std::max(pageWidth_, pgWidth)); /* write the header */ out << thickline() << std::endl; out << std::endl; int numBlanks = (pageWidth_ - header.length())/2; out << blanks(numBlanks) << header << std::endl; out << std::endl; /* write the column titles */ for (Array<std::string>::size_type i=0; i<columnNames.size(); i++) { int cw = defaultColumnWidth(); if (columnWidths_.size() != 0) cw = columnWidths_[i]; out << std::left << std::setw(cw) << columnNames[i]; } out << std::endl; /* ensure that all columns have the same number of rows */ int numRows = columns[0].numRows(); for (Array<TableColumn>::size_type i=1; i<columns.size(); i++) { TEUCHOS_ASSERT_EQUALITY(columns[i].numRows(), numRows); } /* write the table data */ for (int i=0; i<numRows; i++) { if (i % lineInterval_ == 0) out << std::left << thinline() << std::endl; writeRow(out, i, columns); } /* write the footer */ out << thickline() << std::endl; }
void do_page(const month_grid& m, bool left_half, bool right_half) { s_ps->black(); s_ps->font("Arial", 10); // s_ps->rectangle(X0, X0 + WIDTH, Y0, Y0 + HEIGHT); set_box(X0, RIGHT, Y0, TOP); thinline(); show_box(); // Line down the middle. vrule(X0 + WIDTH / 2); float column_width = WIDTH / 8; // Top row: day names. float top_row_height = 20; // Title. if (right_half) { // Right column; title & notes. float x = X0 + WIDTH - column_width; vrule(x); s_ps->printf(x + 10, s_y1 - 20, m.m_month_name); s_ps->printf(x + 10, s_y1 - 40, "%d", m.m_year); } if (left_half) { // Mini-title, for double-checking book layout. s_ps->printf(X0 + WIDTH / 2 - 90, s_y0 + 3, "%s %d", m.m_month_name, m.m_year); } for (int i = 0; i < 7; i++) { if (left_half == false && i < 4) continue; if (right_half == false && i >= 4) continue; static const char* day_name[7] = { "SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" }; float x = X0 + column_width * i; set_box(x, x + column_width, TOP - top_row_height, TOP); s_ps->gray(0.75f); fill_box(); s_ps->black(); show_box(); s_ps->font("Arial", 8); s_ps->printf(x + 5, TOP - top_row_height + 3, day_name[i]); } float row_height = (HEIGHT - top_row_height) / ROWS; // Days. for (int row = 0; row < ROWS; row++) { for (int col = 0; col < COLS; col++) { if (left_half == false && col < 4) continue; if (right_half == false && col >= 4) continue; int day_number = m.m_day_number[row][col]; if (day_number == 0) { // Not a day. continue; } // Show this day. float x = X0 + column_width * col; float y = Y0 + row_height * (ROWS - 1 - row); set_box(x, x + column_width, y, y + row_height); thickline(); show_box(); // Show lines. static const int LINES = 8; float line_height = row_height / LINES; for (int line = 0; line < LINES; line++) { thinline(); hrule(y + line_height * line); } // Show the day number. s_ps->printf(s_x1 - 11, s_y0 + 3, "%2d", day_number); } } }