#include ".\divisional_state_area_report_generator.h"
void Xport_report_suite::divisional_state_area_report_generator::create_header(Xport::document& doc) const
{
using namespace Xport;
*doc.title() << "Divisional State Area Report";
element hdr(Xport::div, "id_heading");
markup::iterator it = hdr.insert(element(img, "id_left_hdr_img"));
it->attribute(src, "../img/us_regions.png");
hdr << (element(h1) << "US Divisional Area Report");
it = hdr.insert(element(img, "id_right_hdr_img"));
it->attribute(src, "../img/us_regions.png");
*doc.body() << hdr;
}
void Xport_report_suite::divisional_state_area_report_generator::create_report_body(Xport::document& doc) const
{
using namespace Xport;
int divsn = new_england;
for (; divsn <= pacific; ++divsn) {
std::ostringstream sDivision;
sDivision << "Division" << divsn;
element tbl(table, sDivision.str());
create_division_table(tbl, divsn);
doc.body()->insert(tbl);
}
}
void Xport_report_suite::divisional_state_area_report_generator::create_division_table(Xport::element& tbl, int dvsn) const
{
using namespace Xport;
std::vector<state_info> siv;
us_state_report_generator::get_divisional_state_data(dvsn, siv, sf_area, descending);
std::vector<state_info>::const_iterator it = siv.begin();
create_table_header(tbl, dvsn);
int rows = 0;
long total_area = 0;
for (; it != siv.end(); ++it, ++rows) {
markup::iterator mit = tbl.insert(element(tr));
*mit << (element(td) << it->name());
*mit << (element(td) << it->abbr());
*mit << (element(td) << numeric_format(it->area()));
std::ostringstream sArea_rank;
sArea_rank << it->area_rank();
*mit << (element(td) << sArea_rank.str());
total_area += it->area();
}
if (!tbl.empty()) {
element footer_row(tr, "", "tbl_footer");
footer_row << (element(td) << "Total Square Area");
footer_row << element(td);
footer_row << (element(td) << numeric_format(total_area) << " square miles.");
footer_row << element(td);
tbl.insert(footer_row);
markup::iterator mit = tbl.begin();
assert(mit != tbl.end());
++mit;
assert(mit != tbl.end());
mit = mit->insert(element(td, "", "img_cell"));
std::ostringstream attr_val;
attr_val << rows + 2;
mit->attribute(rowspan, attr_val.str());
mit = mit->insert(element(img));
attr_val.str("");
attr_val << "../img/division_" << dvsn << ".png";
mit->attribute(src, attr_val.str());
}
}
void Xport_report_suite::divisional_state_area_report_generator::create_table_header(Xport::element& tbl, int dvsn) const
{
using namespace Xport;
markup::iterator it_row = tbl.insert(element(tr));
element hdr(th, "", "tbl_hdr");
hdr << us_state_report_generator::get_division_name(dvsn);
hdr.attribute(colspan, "5");
*it_row << hdr;
it_row = tbl.insert(element(tr, "", "titles"));
*it_row << (element(th) << "State");
*it_row << (element(th) << "Abbr");
*it_row << (element(th) << "Area (sq miles)");
*it_row << (element(th) << "Area (Rank)");
}
void Xport_report_suite::divisional_state_area_report_generator::create_footer(Xport::document& doc) const
{
using namespace Xport;
element lnk(a);
lnk << "Wikipedia";
lnk.attribute(href, "http://en.wikipedia.org/wiki/Wiki");
*doc.body() << (element(Xport::div, "id_aknowledgement") << "Statistics and images courtesy of " << lnk);
}
void Xport_report_suite::divisional_state_area_report_generator::create_stylesheet(Xport::document& doc, Xport::stylesheet& ss) const
{
using namespace Xport;
stylesheet::iterator it = ss.insert(stylesheet_rule("body"));
*it << declaration(margin, "0px")
<< declaration(background_color, "#eff0d1");
it = ss.insert(stylesheet_rule("#id_heading"));
*it << declaration(background_color, "#ccff99")
<< declaration(css::height, "150px")
<< declaration(border_bottom, "5px solid red")
<< declaration(margin_top, "0px");
it = ss.insert(stylesheet_rule("#id_left_hdr_img"));
*it << declaration(position, "absolute")
<< declaration(css::left, "50px")
<< declaration(css::top, "20px")
<< declaration(css::width, "100px")
<< declaration(css::border, "thin solid red");
it = ss.insert(stylesheet_rule("#id_heading h1"));
*it << declaration(text_align, "center")
<< declaration(padding_top, "50px")
<< declaration(margin_top, "0px");
it = ss.insert(stylesheet_rule("#id_right_hdr_img"));
*it << declaration(position, "absolute")
<< declaration(css::width, "100px")
<< declaration(right, "50px")
<< declaration(css::top, "20px")
<< declaration(css::border, "thin solid red");
it = ss.insert(stylesheet_rule("table"));
*it << declaration(css::clear, "right")
<< declaration(css::width, "70%")
<< declaration(css::border, "3px ridge green")
<< declaration(margin_right, "auto")
<< declaration(margin_left, "auto")
<< declaration(margin_top, "30px")
<< declaration(border_collapse, "collapse")
<< declaration(background_color, "white");
it = ss.insert(stylesheet_rule(".titles th"));
*it << declaration(text_align, "left")
<< declaration(border_bottom, "4px solid blue")
<< declaration(background_color, "#ffffcc")
<< declaration(padding_left, "10px")
<< declaration(line_height, "150%");
it = ss.insert(stylesheet_rule(".tbl_hdr"));
*it << declaration(border_bottom, "4px solid blue")
<< declaration(font_size, "x-large")
<< declaration(line_height, "150%")
<< declaration(css::color, "blue")
<< declaration(background_color, "#ccffff");
it = ss.insert(stylesheet_rule(".tbl_footer"));
*it << declaration(background_color, "#99ffcc");
it = ss.insert(stylesheet_rule("td"));
*it << declaration(padding_left, "10px")
<< declaration(border_bottom, "1px solid gray");
it = ss.insert(stylesheet_rule("td.img_cell"));
*it << declaration(border_left, "4px solid blue")
<< declaration(css::width, "220px")
<< declaration(background_color, "#ffffff");
it = ss.insert(stylesheet_rule(".img_cell img"));
*it << declaration(css::width, "200px")
<< declaration(css::height, "200px");
it = ss.insert(stylesheet_rule("#id_aknowledgement"));
*it << declaration(margin_right, "auto")
<< declaration(margin_left, "auto")
<< declaration(margin_top, "30px")
<< declaration(css::width, "100%")
<< declaration(background_color, "#cc99cc")
<< declaration(padding, "10px")
<< declaration(css::border, "4px double, #cc3366")
<< declaration(text_align, "center");
element css_link(Xport::link);
css_link.attribute(rel, "stylesheet");
css_link.attribute(type, "text/css");
std::ostringstream file_name;
file_name << report_name() << ".css";
css_link.attribute(href, file_name.str());
*doc.head() << css_link;
}