From 120add8ca2f3a7e075b415a611bcd09034bd6200 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 3 Nov 2016 17:31:39 +0100 Subject: -Add new operator node --- node/filternode.cpp | 6 ++++++ node/filternode.h | 11 +++++++++++ 2 files changed, 17 insertions(+) create mode 100644 node/filternode.cpp create mode 100644 node/filternode.h diff --git a/node/filternode.cpp b/node/filternode.cpp new file mode 100644 index 0000000..433f3c7 --- /dev/null +++ b/node/filternode.cpp @@ -0,0 +1,6 @@ +#include "filternode.h" + +FilterNode::FilterNode() +{ + +} diff --git a/node/filternode.h b/node/filternode.h new file mode 100644 index 0000000..b87dff7 --- /dev/null +++ b/node/filternode.h @@ -0,0 +1,11 @@ +#ifndef FILTERNODE_H +#define FILTERNODE_H + + +class FilterNode +{ +public: + FilterNode(); +}; + +#endif // FILTERNODE_H \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 9d389e561339e4fd7a68d60f593ad233e3941d13 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 3 Nov 2016 17:36:21 +0100 Subject: -Add FilterNode to dice system. --- diceparser.cpp | 25 +++++++++++++----- diceparser.h | 2 +- diceparser.pri | 6 +++-- node/filternode.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ node/filternode.h | 30 +++++++++++++++++++-- parsingtoolbox.cpp | 1 + result/stringresult.cpp | 19 ++++++++++++-- result/stringresult.h | 1 + 8 files changed, 141 insertions(+), 13 deletions(-) diff --git a/diceparser.cpp b/diceparser.cpp index b6081a7..87a972c 100644 --- a/diceparser.cpp +++ b/diceparser.cpp @@ -27,6 +27,7 @@ #include "node/startingnode.h" #include "node/scalaroperatornode.h" +#include "node/filternode.h" #include "node/numbernode.h" #include "node/keepdiceexecnode.h" #include "node/sortresult.h" @@ -65,6 +66,8 @@ DiceParser::DiceParser() m_OptionOp->insert(QStringLiteral("m"),Merge); m_OptionOp->insert(QStringLiteral("i"),ifOperator); m_OptionOp->insert(QStringLiteral("p"),Painter); + m_OptionOp->insert(QStringLiteral("f"),Filter); + m_aliasList = new QList(); @@ -832,15 +835,9 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous)//, bool ascending = m_parsingToolbox->readAscending(str); if(m_parsingToolbox->readNumber(str,myNumber)) { - /* if(!hasDice) - { - previous = addRollDiceNode(DEFAULT_FACES_NUMBER,previous); - }*/ node = m_parsingToolbox->addSort(previous,ascending); - KeepDiceExecNode* nodeK = new KeepDiceExecNode(); nodeK->setDiceKeepNumber(myNumber); - node->setNextNode(nodeK); node = nodeK; found = true; @@ -875,6 +872,22 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous)//, } } break; + case Filter: + { + Validator* validator = m_parsingToolbox->readCompositeValidator(str); + if(NULL!=validator) + { + m_parsingToolbox->isValidValidator(previous,validator); + + FilterNode* filterNode = new FilterNode(); + filterNode->setValidator(validator); + + previous->setNextNode(filterNode); + node = filterNode; + found = true; + } + } + break; case Sort: { bool ascending = m_parsingToolbox->readAscending(str); diff --git a/diceparser.h b/diceparser.h index 6baef6a..fb56685 100644 --- a/diceparser.h +++ b/diceparser.h @@ -82,7 +82,7 @@ public: /** * @brief The OptionOperator enum gathering all options availables for result. */ - enum OptionOperator {KeepAndExplose,Keep,Reroll,Explosing,Sort,Count,RerollAndAdd,Merge,ifOperator,Painter}; + enum OptionOperator {KeepAndExplose,Keep,Reroll,Explosing,Sort,Count,RerollAndAdd,Merge,ifOperator,Painter,Filter}; /** * @brief The CommandOperator enum */ diff --git a/diceparser.pri b/diceparser.pri index ef975a0..124ac62 100644 --- a/diceparser.pri +++ b/diceparser.pri @@ -16,7 +16,8 @@ SOURCES += $$PWD/diceparser.cpp \ $$PWD/result/stringresult.cpp \ $$PWD/compositevalidator.cpp \ $$PWD/dicealias.cpp \ - $$PWD/operationcondition.cpp + $$PWD/operationcondition.cpp \ + $$PWD/node/filternode.cpp HEADERS += \ @@ -33,7 +34,8 @@ HEADERS += \ $$PWD/result/stringresult.h \ $$PWD/compositevalidator.h \ $$PWD/dicealias.h \ - $$PWD/operationcondition.h + $$PWD/operationcondition.h \ + $$PWD/node/filternode.h HEADERS += \ diff --git a/node/filternode.cpp b/node/filternode.cpp index 433f3c7..8fe99c3 100644 --- a/node/filternode.cpp +++ b/node/filternode.cpp @@ -1,6 +1,76 @@ #include "filternode.h" FilterNode::FilterNode() + : m_diceResult(new DiceResult()),m_eachValue(false) { + m_result = m_diceResult; +} + +FilterNode::~FilterNode() +{ + if(NULL!=m_validator) + { + delete m_validator; + } +} +void FilterNode::setValidator(Validator* validator) +{ + m_validator = validator; +} +void FilterNode::run(ExecutionNode* previous) +{ + m_previousNode = previous; + if(NULL==previous) + { + return; + } + DiceResult* previousDiceResult = static_cast(previous->getResult()); + m_result->setPrevious(previousDiceResult); + if(NULL!=previousDiceResult) + { + QList diceList=previousDiceResult->getResultList(); + QList diceList2; + + + for(Die* tmp : diceList) + { + if(m_validator->hasValid(tmp,m_eachValue)) + { + diceList2.append(tmp); + } + else + { + tmp->setHighlighted(false); + } + } + + m_diceResult->setResultList(diceList2); + if(NULL!=m_nextNode) + { + m_nextNode->run(this); + } + } +} + +QString FilterNode::toString(bool wl) const +{ + if(wl) + { + return QString("%1 [label=\"FilterNode\"]").arg(m_id); + } + else + { + return m_id; + } +} +qint64 FilterNode::getPriority() const +{ + qint64 priority=0; + if(NULL!=m_nextNode) + { + priority = m_nextNode->getPriority(); + } + + return priority; } diff --git a/node/filternode.h b/node/filternode.h index b87dff7..ca08c3b 100644 --- a/node/filternode.h +++ b/node/filternode.h @@ -1,11 +1,37 @@ #ifndef FILTERNODE_H #define FILTERNODE_H +#include "executionnode.h" -class FilterNode +#include "validator.h" +#include "result/diceresult.h" + +class FilterNode : public ExecutionNode { public: FilterNode(); + virtual ~FilterNode(); + + virtual void run(ExecutionNode* previous); + /** + * @brief setValidator + */ + virtual void setValidator(Validator* ); + /** + * @brief toString + * @return + */ + virtual QString toString(bool withLabel)const; + /** + * @brief getPriority + * @return + */ + virtual qint64 getPriority() const; + +private: + DiceResult* m_diceResult; + Validator* m_validator; + bool m_eachValue; }; -#endif // FILTERNODE_H \ No newline at end of file +#endif // FILTERNODE_H diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp index 212c006..a52743d 100644 --- a/parsingtoolbox.cpp +++ b/parsingtoolbox.cpp @@ -38,6 +38,7 @@ ParsingToolBox::ParsingToolBox() m_logicOp->insert("<",BooleanCondition::LesserThan); m_logicOp->insert("=",BooleanCondition::Equal); m_logicOp->insert(">",BooleanCondition::GreaterThan); + m_logicOp->insert("!=",BooleanCondition::Different); //m_logicOperation = ; diff --git a/result/stringresult.cpp b/result/stringresult.cpp index 2dff0ac..be8050d 100644 --- a/result/stringresult.cpp +++ b/result/stringresult.cpp @@ -13,7 +13,21 @@ StringResult::~StringResult() { } +bool StringResult::hasResultOfType(RESULT_TYPE resultType) const +{ + if(resultType & Result::STRING) + { + return true; + } + else if(resultType & Result::SCALAR) + { + bool ok=false; + getText().toInt(&ok); + return ok; + } + return false; +} QString StringResult::getText() const { return m_value; @@ -26,10 +40,11 @@ QVariant StringResult::getResult(RESULT_TYPE type) case STRING: return getText(); break; + case SCALAR: + return getText().toInt(); + break; } - - return QVariant(); } QString StringResult::toString(bool wl) diff --git a/result/stringresult.h b/result/stringresult.h index cdd7de2..2effea7 100644 --- a/result/stringresult.h +++ b/result/stringresult.h @@ -40,6 +40,7 @@ public: virtual void setHighLight(bool ); virtual bool hasHighLight() const; + virtual bool hasResultOfType(RESULT_TYPE resultType) const; private: QString m_value; bool m_highlight; -- cgit v1.2.3-70-g09d2 From 3469ef7a412d82c2ea8c341ea58aa9b3d8aba22e Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 3 Nov 2016 17:37:58 +0100 Subject: -Add differentThan logical operator --- booleancondition.cpp | 8 ++++++++ booleancondition.h | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/booleancondition.cpp b/booleancondition.cpp index 83076e0..585620a 100644 --- a/booleancondition.cpp +++ b/booleancondition.cpp @@ -58,6 +58,9 @@ qint64 BooleanCondition::hasValid(Die* b,bool recursive,bool unhighlight) const case LesserOrEqual: sum+= (value<=m_value)?1:0; break; + case Different: + sum+= (value!=m_value)?1:0; + break; } } if((unhighlight)&&(sum==0)) @@ -101,6 +104,9 @@ QString BooleanCondition::toString() case LesserOrEqual: str.append(QStringLiteral("<=")); break; + case Different: + str.append(QStringLiteral("!=")); + break; } return QStringLiteral("[%1%2]").arg(str).arg(m_value); } @@ -118,5 +124,7 @@ quint64 BooleanCondition::getValidRangeSize(quint64 faces) const return faces-(m_value-1); case LesserOrEqual: return m_value; + case Different: + return faces-1; } } diff --git a/booleancondition.h b/booleancondition.h index 55a6b12..fa178b2 100644 --- a/booleancondition.h +++ b/booleancondition.h @@ -31,7 +31,7 @@ class BooleanCondition : public Validator { public: - enum LogicOperator { Equal, GreaterThan, LesserThan, GreaterOrEqual, LesserOrEqual}; + enum LogicOperator { Equal, GreaterThan, LesserThan, GreaterOrEqual, LesserOrEqual, Different}; BooleanCondition(); virtual qint64 hasValid(Die* b,bool recursive, bool unhighlight = false) const; -- cgit v1.2.3-70-g09d2 From 8d0cec6bdc94099560bcb9136cb026742a318958 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Fri, 4 Nov 2016 10:56:45 +0100 Subject: add window class for mobile --- mobile/mainwindow.cpp | 6 ------ mobile/mainwindow.h | 17 ----------------- 2 files changed, 23 deletions(-) delete mode 100644 mobile/mainwindow.cpp delete mode 100644 mobile/mainwindow.h diff --git a/mobile/mainwindow.cpp b/mobile/mainwindow.cpp deleted file mode 100644 index ec0bd08..0000000 --- a/mobile/mainwindow.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "mainwindow.h" - -MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) -{ - -} diff --git a/mobile/mainwindow.h b/mobile/mainwindow.h deleted file mode 100644 index df67bfe..0000000 --- a/mobile/mainwindow.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include - -class MainWindow : public QMainWindow -{ - Q_OBJECT -public: - explicit MainWindow(QWidget *parent = 0); - -signals: - -public slots: -}; - -#endif // MAINWINDOW_H \ No newline at end of file -- cgit v1.2.3-70-g09d2 From dab42401e3d483a90d2bd5e7442f601c99a32742 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Fri, 4 Nov 2016 11:33:38 +0100 Subject: fix compilation with cmake --- cli/CMakeLists.txt | 1 + irc/CMakeLists.txt | 1 + mobile/CMakeLists.txt | 2 ++ 3 files changed, 4 insertions(+) diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 680d1b8..a0cafe7 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -89,6 +89,7 @@ SET( dice_sources ../node/scalaroperatornode.cpp ../node/sortresult.cpp ../node/startingnode.cpp + ../node/filternode.cpp ../node/ifnode.cpp main.cpp ../highlightdice.cpp diff --git a/irc/CMakeLists.txt b/irc/CMakeLists.txt index af77dfb..c7e9841 100644 --- a/irc/CMakeLists.txt +++ b/irc/CMakeLists.txt @@ -68,6 +68,7 @@ add_executable( ../node/sortresult.cpp ../node/startingnode.cpp ../node/ifnode.cpp + ../node/filternode.cpp botircdiceparser.cpp main.cpp) diff --git a/mobile/CMakeLists.txt b/mobile/CMakeLists.txt index 0ccff18..d4de8ab 100644 --- a/mobile/CMakeLists.txt +++ b/mobile/CMakeLists.txt @@ -88,8 +88,10 @@ SET( diceGui_sources ../node/sortresult.cpp ../node/startingnode.cpp ../node/ifnode.cpp + ../node/filternode.cpp main.cpp maincontroler.cpp + commandmodel.cpp ../highlightdice.cpp ) qt5_add_resources(RESOURCE_ADDED mobile.qrc) -- cgit v1.2.3-70-g09d2 From 4d9a0daf0d6f33af72a5fb11150bad22768cae52 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Fri, 4 Nov 2016 11:34:56 +0100 Subject: -fix computation while there is arithmetic operator after if operator. --- diceparser.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/diceparser.cpp b/diceparser.cpp index 87a972c..39c9b98 100644 --- a/diceparser.cpp +++ b/diceparser.cpp @@ -1002,6 +1002,8 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous)//, nodeif->setInstructionFalse(falseNode); nodeif->setValidator(validator); previous->setNextNode(nodeif); + node = nodeif; + found = true; } } } -- cgit v1.2.3-70-g09d2 From b977d3e2a2765f5b91ac7bf5c34ea8891969cda9 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Fri, 4 Nov 2016 11:36:19 +0100 Subject: Node after ifNode is ran as child of the allowed branch. --- node/ifnode.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/node/ifnode.cpp b/node/ifnode.cpp index 8605dcf..8cf667c 100644 --- a/node/ifnode.cpp +++ b/node/ifnode.cpp @@ -86,10 +86,10 @@ void IfNode::run(ExecutionNode *previous) } } - /* if(NULL!=m_nextNode) + if(NULL!=m_nextNode) { - m_nextNode->run(this); - }*/ + m_nextNode->run(previousLoop); + } } void IfNode::setValidator(Validator* val) -- cgit v1.2.3-70-g09d2