From b03fd11b73748f73d9d10423794e6e4ff7c05ddc Mon Sep 17 00:00:00 2001
From: Yann Boucher <yann.boucher@etu.utc.fr>
Date: Wed, 9 Jun 2021 23:16:09 +0200
Subject: [PATCH] =?UTF-8?q?R=C3=A9solution=20d'un=20bug=20dans=20Automaton?=
 =?UTF-8?q?,=20qui=20inversait=20colonnes=20et=20lignes?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 include/property.hpp                          | 22 +++++++++++++++++++
 include/propertyvisitors.hpp                  |  4 ++++
 .../transition_rules/totalistictransition.hpp |  1 +
 src/automaton.cpp                             | 12 +++++-----
 src/uibuildervisitor.cpp                      | 11 ++++++++++
 5 files changed, 44 insertions(+), 6 deletions(-)

diff --git a/include/property.hpp b/include/property.hpp
index 7a07093..42b72d6 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 2af21eb..1651f9c 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 7cac023..afbeabd 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 db54b09..f353bdb 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 8529205..05a1f57 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);
-- 
GitLab