diff options
| author | 2020-04-01 00:48:15 +0200 | |
|---|---|---|
| committer | 2020-04-01 00:48:15 +0200 | |
| commit | 4418146f8553c670be2548ad4e5c1d024e91e2ad (patch) | |
| tree | 89807162cc56575f8560655da8e614995dc39417 /result | |
| parent | 14b2b264097cebb05237164f7320ad4b4fbbfba0 (diff) | |
| download | OneRoll-4418146f8553c670be2548ad4e5c1d024e91e2ad.tar.gz OneRoll-4418146f8553c670be2548ad4e5c1d024e91e2ad.zip | |
New Api for string result subclass dice result.
Diffstat (limited to 'result')
| -rw-r--r-- | result/diceresult.h | 26 | ||||
| -rw-r--r-- | result/stringresult.cpp | 62 | ||||
| -rw-r--r-- | result/stringresult.h | 39 |
3 files changed, 76 insertions, 51 deletions
diff --git a/result/diceresult.h b/result/diceresult.h index 8f30340..0ee622c 100644 --- a/result/diceresult.h +++ b/result/diceresult.h @@ -39,58 +39,58 @@ public: /** * @brief ~DiceResult */ - virtual ~DiceResult(); + virtual ~DiceResult() override; /** * @brief getResultList * @return */ - QList<Die*>& getResultList(); + virtual QList<Die*>& getResultList(); /** * @brief insertResult */ - void insertResult(Die*); + virtual void insertResult(Die*); /** * @brief setResultList * @param list */ - void setResultList(QList<Die*> list); + virtual void setResultList(QList<Die*> list); /** * @brief getScalar * @return */ - virtual QVariant getResult(Dice::RESULT_TYPE); + virtual QVariant getResult(Dice::RESULT_TYPE) override; /** * @brief toString * @return */ - virtual QString toString(bool wl); + virtual QString toString(bool wl) override; /** * @brief isHomogeneous */ - bool isHomogeneous() const; + virtual bool isHomogeneous() const; /** * @brief setHomogeneous */ - void setHomogeneous(bool); + virtual void setHomogeneous(bool); Die::ArithmeticOperator getOperator() const; void setOperator(const Die::ArithmeticOperator& dieOperator); bool contains(Die* die, const std::function<bool(const Die*, const Die*)> equal); - void clear(); + void clear() override; - virtual Result* getCopy() const; + virtual Result* getCopy() const override; -private: +protected: qreal getScalarResult(); -private: +protected: QList<Die*> m_diceValues; bool m_homogeneous; - Die::ArithmeticOperator m_operator; + Die::ArithmeticOperator m_operator= Die::ArithmeticOperator::PLUS; }; Q_DECLARE_METATYPE(QList<Die*>) #endif // DICERESULT_H diff --git a/result/stringresult.cpp b/result/stringresult.cpp index b5c490c..201d1f3 100644 --- a/result/stringresult.cpp +++ b/result/stringresult.cpp @@ -1,33 +1,39 @@ #include "stringresult.h" +#include <QDebug> StringResult::StringResult() { m_highlight= true; m_resultTypes= static_cast<int>(Dice::RESULT_TYPE::STRING); } -void StringResult::setText(QString text) +void StringResult::addText(QString text) { - m_value= text; + m_value.append(text); } StringResult::~StringResult() {} bool StringResult::hasResultOfType(Dice::RESULT_TYPE resultType) const { + bool val= false; - if(resultType == Dice::RESULT_TYPE::STRING) + switch(resultType) { - return true; - } - else if(resultType == Dice::RESULT_TYPE::SCALAR) - { - bool ok= false; - getText().toInt(&ok); - return ok; + case Dice::RESULT_TYPE::STRING: + val= !isDigitOnly(); + break; + case Dice::RESULT_TYPE::SCALAR: + val= isDigitOnly(); + break; + case Dice::RESULT_TYPE::DICE_LIST: + val= (isDigitOnly() && m_value.size() > 1); + break; + default: + break; } - return false; + return val; } QString StringResult::getText() const { - return m_value; + return m_value.join(","); } QVariant StringResult::getResult(Dice::RESULT_TYPE type) { @@ -36,7 +42,7 @@ QVariant StringResult::getResult(Dice::RESULT_TYPE type) case Dice::RESULT_TYPE::STRING: return getText(); case Dice::RESULT_TYPE::SCALAR: - return getText().toInt(); + return getScalarResult(); default: return QVariant(); } @@ -61,11 +67,39 @@ bool StringResult::hasHighLight() const { return m_highlight; } + +void StringResult::finished() +{ + if(isDigitOnly()) + { + std::for_each(m_value.begin(), m_value.end(), [this](const QString& str) { + auto die= new Die(); + die->setMaxValue(m_stringCount); + die->setValue(str.toInt()); + insertResult(die); + }); + } +} + +void StringResult::setStringCount(int count) +{ + m_stringCount= count; +} + +bool StringResult::isDigitOnly() const +{ + return std::all_of(m_value.begin(), m_value.end(), [](const QString& str) { + bool ok= false; + str.toInt(&ok); + return ok; + }); +} + Result* StringResult::getCopy() const { auto copy= new StringResult(); copy->setPrevious(getPrevious()); copy->setHighLight(m_highlight); - copy->setText(m_value); + std::for_each(m_value.begin(), m_value.end(), [copy](const QString& str) { copy->addText(str); }); return copy; } diff --git a/result/stringresult.h b/result/stringresult.h index 0e469fe..f1029c7 100644 --- a/result/stringresult.h +++ b/result/stringresult.h @@ -1,12 +1,13 @@ #ifndef STRINGRESULT_H #define STRINGRESULT_H -#include "result.h" +#include "diceresult.h" #include <QString> /** * @brief The StringResult class stores command result for String. */ -class StringResult : public Result + +class StringResult : public DiceResult { public: /** @@ -16,36 +17,26 @@ public: /** * @brief StringResult */ - virtual ~StringResult(); - /** - * @brief setText - * @param text - */ - void setText(QString text); - /** - * @brief getText - * @return - */ + virtual ~StringResult() override; + void addText(QString text); + void finished(); QString getText() const; - /** - * @brief getScalar - * @return - */ - virtual QVariant getResult(Dice::RESULT_TYPE); - /** - * @brief toString - * @return - */ + virtual QVariant getResult(Dice::RESULT_TYPE) override; virtual QString toString(bool); virtual void setHighLight(bool); virtual bool hasHighLight() const; - virtual bool hasResultOfType(Dice::RESULT_TYPE resultType) const; - virtual Result* getCopy() const; + virtual bool hasResultOfType(Dice::RESULT_TYPE resultType) const override; + virtual Result* getCopy() const override; + + bool isDigitOnly() const; + + void setStringCount(int count); private: - QString m_value; + QStringList m_value; bool m_highlight; + int m_stringCount= 0; }; #endif // STRINGRESULT_H |