class Style {
public:
// default constructor
Style();
// constructor
Style(const QString name, const double &oglow, const double &oghi,
const double &fglow, const double &fghi, const int &ibulow,
const int &ibuhi, const int &srmlow, const int &srmhi);
// copy constructor
Style(const Style &s);
// operators
Style operator=(const Style &s);
bool operator==(const Style &s) const;
bool operator<(const Style &s) const;
// destructor
~Style();
// return name of style
const QString &name() const;
void setName(const QString &name);
// return high end of OG
double OGHi() const;
void setOGHi(double hi);
// return low end of OG
double OGLow() const;
void setOGLow(double lo);
// return high end of FG
double FGHi() const;
void setFGHi(double hi);
// return low end of FG
double FGLow() const;
void setFGLow(double lo);
// return high end of IBU
int IBUHi() const;
void setIBUHi(int hi);
// return low end of IBU
int IBULow() const;
void setIBULow(int lo);
// return high end of SRM
int SRMHi() const;
void setSRMHi(int hi);
// return low end of SRM
int SRMLow() const;
void setSRMLow(int lo);
private:
friend class StyleModel;
QString name_;
double oglow_;
double oghi_;
double fglow_;
double fghi_;
int ibulow_;
int ibuhi_;
int srmlow_;
int srmhi_;
};
typedef QList\n";
html += "\n\n";
html += "\n";
html += table.arg("header").arg("5 bgcolor=\"#CCCCCC\" width=\"100%\"");
html += "\n" + header.arg(escape(title_)) + " |
\n";
html += "\n\n\n";
// recipe table
html += table.arg("recipe").arg(0);
html += "
\n\n";
html += th.arg(tr("Recipe"));
html += " | \n";
html += "" + escape(title_) + " | \n";
html += " | \n";
html += th.arg(tr("Style"));
html += " | \n";
html += "" + escape(style_.name()) + " | \n";
html += "
\n\n";
html += th.arg(tr("Brewer"));
html += " | \n";
html += "" + escape(brewer_) + " | \n";
html += " | \n";
html += th.arg(tr("Batch"));
html += " | \n";
html += "" + size_.toString(2) + " | \n";
html += "
\n\n" + th.arg(tr(method().toUtf8()));
html += "
\n\n\n\n\n";
// characteristics table
html += header.arg(tr("Recipe Characteristics"));
html += table.arg("characteristics").arg(0);
html += "
\n\n";
html += th.arg(tr("Recipe Gravity"));
html += " | \n";
html += "" + QString::number(og_, 'f', 3) + tr(" OG | \n");
html += " | \n";
html += th.arg(tr("Estimated FG"));
html += " | \n";
html += "" + QString::number(FGEstimate(), 'f', 3) + tr(" FG | \n");
html += "
\n\n";
html += th.arg(tr("Recipe Bitterness"));
html += " | \n";
html += "" + QString::number(ibu_, 'f', 0) + tr(" IBU | \n");
html += " | \n";
html += th.arg(tr("Alcohol by Volume"));
html += " | \n";
html += "" + QString::number(ABV() * 100.0, 'f', 1) + tr("% | \n");
html += "
\n\n";
html += th.arg(tr("Recipe Color"));
html += " | \n";
html += "" + QString::number(srm_, 'f', 0) + DEGREE + tr(" SRM | \n");
html += " | \n";
html += th.arg(tr("Alcohol by Weight"));
html += " | \n";
html += "" + QString::number(ABW() * 100.0, 'f', 1) + tr("% | \n");
html += "
\n\n\n\n\n";
// ingredients table
html += header.arg(tr("Ingredients"));
html += table.arg("ingredients").arg(0);
html += "
\n";
// grains
html += "\n" + th.arg(tr("Quantity"));
html += " | \n";
html += th.arg(tr("Grain"));
html += " | \n";
html += th.arg(tr("Type"));
html += " | \n";
html += th.arg(tr("Use"));
html += "
\n\n";
foreach (Grain grain, grains_) {
html += "\n" + grain.weight().toString(2) + " | \n";
html += " | \n";
html += "" + escape(grain.name()) + " | \n";
html += " | \n";
html += "" + grain.type() + " | \n";
html += " | \n";
html += "" + grain.use() + " | \n
\n\n";
}
// hops
html += "\n" + th.arg(tr("Quantity"));
html += " | \n";
html += th.arg(tr("Hop"));
html += " | \n";
html += th.arg(tr("Type"));
html += " | \n";
html += th.arg(tr("Time"));
html += "
\n\n";
foreach (Hop hop, hops_) {
html += "\n" + hop.weight().toString(2) + " | \n";
html += " | \n";
html += "" + escape(hop.name()) + " | \n";
html += " | \n";
html += "" + hop.type() + " | \n";
html += " | \n";
html += "" + QString::number(hop.time()) + tr(" minutes | \n
\n\n");
}
// misc ingredients
html += "\n" + th.arg(tr("Quantity"));
html += " | \n";
html += th.arg(tr("Misc"));
html += " | \n";
html += th.arg(tr("Notes"));
html += "
\n\n";
foreach (Misc misc, miscs_) {
html += "\n" + misc.quantity().toString(2) + " | \n";
html += " | \n";
html += "" + escape(misc.name()) + " | \n";
html += " | \n";
html += "" + misc.type() + " | \n";
html += " | \n";
html += "" + escape(misc.notes()) + " | \n
\n\n";
}
html += "\n\n\n\n";
// notes
// TODO: using replace() might be dangerous if we ever use richtext in notes
html += header.arg(tr("Recipe Notes")) + "\n";
html += "
" + escape(recipenotes_).replace('\n', "
\n") + "\n
\n\n";
html += header.arg(tr("Batch Notes")) + "\n";
html += "
" + escape(batchnotes_).replace('\n', "
\n") + "\n
\n";
html += "\n