diff --git a/sources/numerotationcontextcommands.cpp b/sources/numerotationcontextcommands.cpp new file mode 100644 index 000000000..7d35fbe98 --- /dev/null +++ b/sources/numerotationcontextcommands.cpp @@ -0,0 +1,239 @@ +#include "numerotationcontextcommands.h" + +/** + * @brief Constructor + */ +NumerotationContextCommands::NumerotationContextCommands(Diagram *d, const NumerotationContext &nc): + diagram_ (d), + context_ (nc), + strategy_ (NULL) +{} + +/** + * @brief Destructor + */ +NumerotationContextCommands::~NumerotationContextCommands() { + if (strategy_) delete strategy_; +} + +/** + * @brief NumerotationContextCommands::next + * @return the next numerotation context + */ +NumerotationContext NumerotationContextCommands::next() { + NumerotationContext contextnum; + + for (int i=0; i next(context_, i); + } + return contextnum; +} + +/** + * @brief NumerotationContextCommands::toFinalString + * @return the string represented by the numerotation context + */ +QString NumerotationContextCommands::toRepresentedString() { + QString num; + if (context_.size()) { + for (int i=0; i toRepresentedString(str.at(1)); + } + return num; + } + return (diagram_ -> defaultConductorProperties.text); +} + +/** + * @brief NumerotationContextCommands::setNumStrategy + * apply the good strategy relative to @str + */ +void NumerotationContextCommands::setNumStrategy(const QString &str) { + if (strategy_) delete strategy_; + if (str == "unit") { + strategy_ = new UnitNum(diagram_); + return; + } + else if (str == "ten") { + strategy_ = new TenNum (diagram_); + return; + } + else if (str == "hundred") { + strategy_ = new HundredNum (diagram_); + return; + } + else if (str == "string") { + strategy_ = new StringNum (diagram_); + return; + } + else if (str == "folio") { + strategy_ = new FolioNum (diagram_); + return; + } +} + + + +/** + * Constructor + */ +NumStrategy::NumStrategy (Diagram *d): + diagram_ (d) +{} + +NumStrategy::~NumStrategy() {} + +/** + * @brief NumStrategy::nextString + * @return the next value of @nc at position @i + */ +NumerotationContext NumStrategy::nextString (const NumerotationContext &nc, const int i) const { + QStringList strl = nc.itemAt(i); + NumerotationContext newnc; + newnc.addValue(strl.at(0), strl.at(1), strl.at(2).toInt()); + return (newnc); +} + +/** + * @brief NumStrategy::nextNumber + * @return the next value of @nc at position @i + */ +NumerotationContext NumStrategy::nextNumber (const NumerotationContext &nc, const int i) const { + QStringList strl = nc.itemAt(i); + NumerotationContext newnc; + QString value = QString::number( (strl.at(1).toInt()) + (strl.at(2).toInt()) ); + newnc.addValue(strl.at(0), value, strl.at(2).toInt()); + return (newnc); +} + +/** + * Constructor + */ +UnitNum::UnitNum(Diagram *d): + NumStrategy(d) +{} + +/** + * @brief UnitNum::toRepresentedString + * @return the represented string of num + */ +QString UnitNum::toRepresentedString(const QString num) const { + return (num); +} + +/** + * @brief UnitNum::next + * @return the next NumerotationContext nc at position i + */ +NumerotationContext UnitNum::next (const NumerotationContext &nc, const int i) const { + return (nextNumber(nc, i)); +} + +/** + * Constructor + */ +TenNum::TenNum (Diagram *d): + NumStrategy (d) +{} + +/** + * @brief TenNum::toRepresentedString + * @return the represented string of num + */ +QString TenNum::toRepresentedString(const QString num) const { + int numint = num.toInt(); + QString numstr = num; + if (numint<10) numstr.prepend("0"); + return (numstr); +} + +/** + * @brief TenNum::next + * @return the next NumerotationContext nc at position i + */ +NumerotationContext TenNum::next (const NumerotationContext &nc, const int i) const { + return (nextNumber(nc, i)); +} + +/** + * Constructor + */ +HundredNum::HundredNum (Diagram *d): + NumStrategy (d) +{} + +/** + * @brief HundredNum::toRepresentedString + * @return the represented string of num + */ +QString HundredNum::toRepresentedString(const QString num) const { + int numint = num.toInt(); + QString numstr = num; + if (numint<100) { + if (numint<10) { + numstr.prepend("00"); + } + else numstr.prepend("0"); + } + return (numstr); +} + +/** + * @brief HundredNum::next + * @return the next NumerotationContext nc at position i + */ +NumerotationContext HundredNum::next (const NumerotationContext &nc, const int i) const { + return (nextNumber(nc, i)); +} + +/** + * Constructor + */ +StringNum::StringNum (Diagram *d): + NumStrategy (d) +{} + +/** + * @brief StringNum::toRepresentedString + * @return the represented string of num + */ +QString StringNum::toRepresentedString(const QString str) const { + return (str); +} + +/** + * @brief StringNum::next + * @return the next NumerotationContext nc at position i + */ +NumerotationContext StringNum::next (const NumerotationContext &nc, const int i) const { + return (nextString(nc, i)); +} + + +/** + * Constructor + */ +FolioNum::FolioNum (Diagram *d): + NumStrategy (d) +{} + +/** + * @brief FolioNum::toRepresentedString + * @return the represented string of num + */ +QString FolioNum::toRepresentedString(const QString str) const { + return (QString::number(diagram_ -> folioIndex() + 1)); +} + +/** + * @brief FolioNum::next + * @return the next NumerotationContext nc at position i + */ +NumerotationContext FolioNum::next (const NumerotationContext &nc, const int i) const { + return (nextString(nc, i)); +} + diff --git a/sources/numerotationcontextcommands.h b/sources/numerotationcontextcommands.h new file mode 100644 index 000000000..cf434bb82 --- /dev/null +++ b/sources/numerotationcontextcommands.h @@ -0,0 +1,83 @@ +#ifndef NUMEROTATIONCONTEXTCOMMANDS_H +#define NUMEROTATIONCONTEXTCOMMANDS_H + +#include "numerotationcontext.h" +#include "diagram.h" + +class NumStrategy; + +/** + * this class provide methods to handle content of NumerotationContext. + */ +class NumerotationContextCommands +{ + public: + NumerotationContextCommands (Diagram *, const NumerotationContext &); + ~NumerotationContextCommands (); + NumerotationContext next (); + QString toRepresentedString (); + + private: + void setNumStrategy (const QString &); + + Diagram *diagram_; + NumerotationContext context_; + NumStrategy *strategy_; +}; + +class NumStrategy +{ + public: + NumStrategy (Diagram *); + virtual ~NumStrategy (); + virtual QString toRepresentedString (const QString) const = 0; + virtual NumerotationContext next (const NumerotationContext &, const int) const = 0; + + protected: + NumerotationContext nextString (const NumerotationContext &, const int) const; + NumerotationContext nextNumber (const NumerotationContext &, const int) const; + + Diagram *diagram_; +}; + +class UnitNum: public NumStrategy +{ + public: + UnitNum (Diagram *); + QString toRepresentedString(const QString) const; + NumerotationContext next (const NumerotationContext &, const int) const; +}; + +class TenNum: public NumStrategy +{ + public: + TenNum (Diagram *); + QString toRepresentedString(const QString) const; + NumerotationContext next (const NumerotationContext &, const int) const; +}; + +class HundredNum: public NumStrategy +{ + public: + HundredNum (Diagram *); + QString toRepresentedString(const QString) const; + NumerotationContext next (const NumerotationContext &, const int) const; +}; + +class StringNum: public NumStrategy +{ + public: + StringNum (Diagram *); + QString toRepresentedString(const QString) const; + NumerotationContext next (const NumerotationContext &, const int) const; +}; + +class FolioNum: public NumStrategy +{ + public: + FolioNum (Diagram *); + QString toRepresentedString(const QString) const; + NumerotationContext next (const NumerotationContext &, const int) const; +}; + +#endif // NUMEROTATIONCONTEXTCOMMANDS_H