diff --git a/include/property.hpp b/include/property.hpp index 7a070938b3d63dd897b27a3cc9a0099fb5232aa9..42b72d62c7d6d58a4b6ddb6af6d71a9750fae942 100644 --- a/include/property.hpp +++ b/include/property.hpp @@ -159,6 +159,28 @@ public: std::string str; }; +/** +\class HelpProperty + +\brief Représente un bouton permettant l'affichage d'un manuel. +**/ +struct HelpProperty : public PropertyImpl<StringProperty> +{ +public: + //! \brief Constructeur par défaut. + HelpProperty() = default; + /** \brief Constructeur avec valeur initiale. + \param initval Valeur initiale. + **/ + HelpProperty(const std::string& initval) + : str(initval) + {} + +public: + //! \brief La chaîne de caractères contenant l'aide. + std::string str; +}; + /** \class IntegerProperty diff --git a/include/propertyvisitors.hpp b/include/propertyvisitors.hpp index 2af21eb06a7e97de73406039befa405f5c48c352..1651f9cce56b4d91a3b338d27fc26ac7c1ccdc87 100644 --- a/include/propertyvisitors.hpp +++ b/include/propertyvisitors.hpp @@ -59,6 +59,7 @@ private: void visit(IntegerProperty& prop); void visit(CoordinateProperty& prop); void visit(PropertyList& list); + void visit(HelpProperty&); private: std::stack<QWidget*> m_widget_hierarchy; @@ -88,6 +89,7 @@ private: void visit(IntegerProperty& prop); void visit(CoordinateProperty& prop); void visit(PropertyList& list); + void visit(HelpProperty&) {} private: std::stack<QVariant> m_current_hierarchy; @@ -114,6 +116,8 @@ private: void visit(IntegerProperty& prop); void visit(CoordinateProperty& prop); void visit(PropertyList& prop); + void visit(HelpProperty&) {} + private: std::stack<QJsonValue> m_current_hierarchy; }; diff --git a/include/transition_rules/totalistictransition.hpp b/include/transition_rules/totalistictransition.hpp index 7cac023b22b902f887505c4db12c7f943ce78fab..afbeabdacf2f2b56b5bccbf05265b744f5210939 100644 --- a/include/transition_rules/totalistictransition.hpp +++ b/include/transition_rules/totalistictransition.hpp @@ -130,6 +130,7 @@ private: private: mutable std::vector<TotalisticRuleEntry> m_entries; DEFINE_CONFIGURABLE_PROPERTY(StringProperty, rule_string, "Rule String"); + DEFINE_CONFIGURABLE_PROPERTY(HelpProperty, help_string, "All your base are belong to us"); }; #endif // TOTALISTICTRANSITIONRULE_HPP diff --git a/src/automaton.cpp b/src/automaton.cpp index db54b09fd3f2b68e863b9b842ac8a0a978500989..f353bdb5fea5fc6d03e04b0d21b37687711ec6a8 100644 --- a/src/automaton.cpp +++ b/src/automaton.cpp @@ -9,8 +9,8 @@ Automaton::~Automaton() { void Automaton::setAlphabet(const Alphabet& A) { alphabet = A; - for(int i=0; i<static_cast<int>(grid.get_rows()); ++i) { - for(int j=0; j<static_cast<int>(grid.get_col()); ++j) { + for(int i=0; i<static_cast<int>(grid.get_col()); ++i) { + for(int j=0; j<static_cast<int>(grid.get_rows()); ++j) { grid.set_cell({i,j}, 0); } } @@ -45,8 +45,8 @@ const Grid& Automaton::getGrid() const { void Automaton::setGrid(const Grid& G) { grid = G; unsigned int state; - for(int i=0; i<static_cast<int>(grid.get_rows()); ++i) { - for(int j=0; j<static_cast<int>(grid.get_col()); ++j) { + for(int i=0; i<static_cast<int>(grid.get_col()); ++i) { + for(int j=0; j<static_cast<int>(grid.get_rows()); ++j) { state = grid.get_state({i,j}); if(state >= alphabet.taille()) { grid.set_cell({i,j}, state%alphabet.taille()); @@ -57,8 +57,8 @@ void Automaton::setGrid(const Grid& G) { void Automaton::runOnce() { Grid tempGrid(grid); - for(int i=0; i<static_cast<int>(grid.get_rows()); ++i) { - for(int j=0; j<static_cast<int>(grid.get_col()); ++j) { + for(int i=0; i<static_cast<int>(grid.get_col()); ++i) { + for(int j=0; j<static_cast<int>(grid.get_rows()); ++j) { tempGrid.set_cell({i, j}, transitionRule->getState(grid.get_state({i,j}),neighbourhoodRule->getNeighborhood(grid, {i, j}))%alphabet.taille()); } } diff --git a/src/uibuildervisitor.cpp b/src/uibuildervisitor.cpp index 8529205f5cdee278461ec256d509efaca7aafcd7..05a1f576bf52d7d13ce8438b131711323d99ddf2 100644 --- a/src/uibuildervisitor.cpp +++ b/src/uibuildervisitor.cpp @@ -130,6 +130,17 @@ void UIBuilderVisitor::visit(CoordinateProperty &prop) [&prop](int i) { prop.c.y = i; }); } +void UIBuilderVisitor::visit(HelpProperty& prop) +{ + QPushButton* button = new QPushButton("Help", current_widget()); + add_widget("", button); + + QObject::connect(button, &QPushButton::clicked, + [&prop]() { + QMessageBox::information(NULL, "Help", QString::fromStdString(prop.str)); + }); +} + void UIBuilderVisitor::visit(PropertyList &list) { push_array_widget(list);