#include ".\regional_state_density_report_generator.h" void Xport_report_suite::regional_state_density_report_generator::create_header(Xport::document& doc) const { using namespace Xport; *doc.title() << "Regional State Density Report"; element lnk(a); lnk << "Wikipedia"; lnk.attribute(href, "http://en.wikipedia.org/wiki/Wiki"); *doc.body() << ((element(Xport::div, "id_header") << (element(h1) << "US Regional State Density Report") << (element(p) << "Statistics and images courtesy of " << lnk))); } void Xport_report_suite::regional_state_density_report_generator::create_report_body(Xport::document& doc) const { using namespace Xport; int rgn = northeast; for (; rgn <= west; ++rgn) { element tbl(table); create_region_table(tbl, rgn); *doc.body() << tbl; } } void Xport_report_suite::regional_state_density_report_generator::create_region_table(Xport::element& tbl, int rgn) const { using namespace Xport; create_table_header(tbl, rgn); std::vector<state_info> siv; us_state_report_generator::get_regional_state_data(rgn, siv, sf_density, descending); std::vector<state_info>::const_iterator it = siv.begin(); for (; it != siv.end(); ++it) { element row(tr); row << (element(td) << it->name()); row << (element(td) << it->abbr()); row << (element(td, "", "density") << numeric_format(it->density(), 2)); row << (element(td, "", "density_rank") << numeric_format(it->density_rank())); tbl << row; } if (tbl.size() > 1) { markup::iterator it = tbl.begin(); ++it; it = it->push_back(element(td, "", "img_cell")); it->attribute(rowspan, numeric_format(static_cast<int>(tbl.size()) - 1)); it = it->insert(element(img)); std::ostringstream path; path << "../img/region_" << rgn << ".png"; it->attribute(src, path.str()); } } void Xport_report_suite::regional_state_density_report_generator::create_table_header(Xport::element& tbl, int rgn) const { using namespace Xport; element row1(tr, "", "region_name"); element heading(th, "", "region_name"); heading.attribute(colspan, "5"); heading << get_region_name(rgn); row1 << heading; element row2(tr, "", "titles"); row2 << (element(th) << "State"); row2 << (element(th) << "Abbr"); row2 << (element(th) << "Density (sq mile)"); row2 << (element(th) << "Density Rank"); tbl << row1 << row2; } void Xport_report_suite::regional_state_density_report_generator::create_footer(Xport::document& doc) const { using namespace Xport; element footer(Xport::div, "id_footer"); element para(p); element lnk(a); lnk.attribute(href, "http://www.xportpro.com"); lnk << "Xport"; para << "Report and stylesheet created by " << lnk; *doc.body() << (footer << para); } void Xport_report_suite::regional_state_density_report_generator::create_stylesheet(Xport::document& doc, Xport::stylesheet& ss) const { using namespace Xport; stylesheet::iterator it = ss.insert(stylesheet_rule("#id_header")); *it << declaration(position, "relative") << declaration(css::width, "70%") << declaration(css::height, "100px") << declaration(background_color, "#b59f85") << declaration(border_left, "20px solid #826039") << declaration(border_bottom, "20px solid #826039") << declaration(border_top, "2px solid #826039") << declaration(border_right, "2px solid #826039") << declaration(margin_left, "auto") << declaration(margin_right, "auto") << declaration(margin_bottom, "70px"); it = ss.insert(stylesheet_rule("#id_header h1")); *it << declaration(text_align, "center") << declaration(padding_top, "25px") << declaration(css::margin, "0px"); it = ss.insert(stylesheet_rule("#id_header p")); *it << declaration(position, "absolute") << declaration(right, "10px") << declaration(bottom, "5px") << declaration(css::margin, "0px"); it = ss.insert(stylesheet_rule("table")); *it << declaration(css::width, "60%") << declaration(margin_left, "auto") << declaration(margin_right, "auto") << declaration(border_left, "20px solid #826039") << declaration(border_top, "2px solid #826039") << declaration(border_right, "2px solid #826039") << declaration(border_bottom, "2px solid #826039") << declaration(margin_bottom, "50px") << declaration(border_collapse, "collapse"); it = ss.insert(stylesheet_rule("tr.region_name th")); *it << declaration(border_bottom, "2px solid #826039") << declaration(line_height, "200%") << declaration(background_color, "#cacafa"); it = ss.insert(stylesheet_rule("tr.titles th")); *it << declaration(text_align, "left") << declaration(padding_left, "10px") << declaration(background_color, "#b08804") << declaration(border_bottom, "2x solid #826039"); it = ss.insert(stylesheet_rule("td.img_cell")); *it << declaration(css::width, "220px") << declaration(border_left, "2px solid #826039") << declaration(background_color, "white"); it = ss.insert(stylesheet_rule("td.img_cell img")); *it << declaration(css::width, "200px") << declaration(css::height, "200px"); it = ss.insert(stylesheet_rule("td")); *it << declaration(background_color, "#ebcbc2") << declaration(line_height, "150%") << declaration(padding_left, "10px") << declaration(line_height, "150%"); it = ss.insert(stylesheet_rule("td.density")); *it << declaration(padding_left, "20px") << declaration(font_weight, "bold"); it = ss.insert(stylesheet_rule("td.density_rank")); *it << declaration(padding_left, "30px") << declaration(font_weight, "bold"); it = ss.insert(stylesheet_rule("#id_footer")); *it << declaration(css::width, "50%") << declaration(css::height, "40px") << declaration(margin_left, "auto") << declaration(margin_right, "auto") << declaration(background_color, "#cacafa") << declaration(css::border, "5px ridge #826039"); it = ss.insert(stylesheet_rule("#id_footer p")); *it << declaration(text_align, "center") << declaration(padding_top, "10px") << declaration(css::margin, "0px"); element css_link(Xport::link); css_link.attribute(rel, "stylesheet"); css_link.attribute(type, "text/css"); std::ostringstream filename; filename << report_name() << ".css"; css_link.attribute(href, filename.str()); *doc.head() << css_link; }