parametragemodele.cpp 6.42 KB
Newer Older
1
2
3
4
5
6
7
#include"parametragemodele.h"


NouveauModele::NouveauModele(QWidget* parent) : QWidget() {
    this->setWindowTitle("Paramétrage d'un nouveau modèle");
    this->setMinimumSize(850, 550);

8
9
10
11
12
    general = new QGridLayout;
    this->setLayout(general);

    //définition de la frame paramétrage du modèle

13
    fenetre_init = new QWidget;
14
    fenetre_init->setStyleSheet("background-color: rgb(204, 209, 209)");
15
    fenetre_init->setFixedWidth(300);
16
    label_init = new QLabel("Configuration du modèle :");
17
18
19

    form_init = new QGridLayout(fenetre_init);

20
    form_choix = new QFormLayout;
21
22

    form_init->addWidget(label_init, 0, 0, 1, 2);
23
    form_init->addLayout(form_choix, 1, 0, 8, 2);
24

25
    // nb d'états
26
    nb_etats = new QSpinBox;
27
    nb_etats->setRange(1, 8);
28

29
    //choisir un voisinage
30
    liste_voisinage = new QComboBox;
31

32
33
    liste_voisinage->addItem("--- select ---");
    /*
34
    liste_voisinage->addItem("Voisinage de Moore");
35
    liste_voisinage->addItem("Voisinage de von Neumann");
36
37
    liste_voisinage->addItem("Voisinage arbitraire");

38
39
40
41
    //liste_voisinage->setPlaceholderText("--- select ---");
    liste_voisinage->setCurrentIndex(-1);
    */

42
43
44
    connect(liste_voisinage, SIGNAL(currentTextChanged(const QString&)), this, SLOT(paramVoisinage(const QString&)));

    //choisir une règle de transition
45
    liste_regle_transition = new QComboBox;
46
47
48
    //liste_regle_transition->setPlaceholderText("--- select ---");

    //liste_regle_transition->addItem("--- select ---");
49
    liste_regle_transition->addItem("Life Game");
50
    liste_regle_transition->addItem("Langston's Loop");
51
52
    liste_regle_transition->addItem("Brian's brain");
    liste_regle_transition->addItem("Circulaire de Griffeath");
53
54
55
56
57
58


    liste_regle_transition->setCurrentIndex(-1);

    //connect(liste_regle_transition, SIGNAL(currentIndexChanged(int)), liste_voisinage, SLOT(setCurrentIndex(int)));
    connect(liste_regle_transition, SIGNAL(currentTextChanged(const QString&)), this, SLOT(changerVoisinage(const QString&)));
59
60
61
62

    bouton_valide = new QPushButton("Valider");
    bouton_valide->setFixedWidth(50);

63
    //connect(bouton_valide, SIGNAL(clicked()), SLOT(affParametrage()));
64

65
66
    form_choix->addRow("Nombre d'états :", nb_etats);
    form_choix->addRow("Règle de transition :", liste_regle_transition);
67
    form_choix->addRow("Voisinage :", liste_voisinage);
68
    form_choix->addWidget(bouton_valide);
69

70
    general->addWidget(fenetre_init, 0, 0, 9, 1);
71
72

    //définition de la frame contenant la grille de sélection du voisinage
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
    fenetre_param = new QWidget;
    fenetre_param->setFixedWidth(500);
    label_param = new QLabel("Paramétrer votre choix :");

    form_param = new QGridLayout(fenetre_param);
    form_rayon = new QFormLayout;
    rayon = new QSpinBox;

    general->addWidget(label_param, 0, 1, 1, 1);
    general->addWidget(fenetre_param, 1, 1, 8, 1);

    /*
    form_param->addWidget(label_param, 0, 0, 1, 1);
    form_param->addLayout(form_rayon, 1, 0, 8, 1);

    general->addWidget(fenetre_param, 0, 1, 9, 1);
    */
90

91
92
}

93
94
95
96
97
98
99
100
101
102
103
104
105
106
void NouveauModele::paramVoisinage(const QString& choix_voisinage){
    if(choix_voisinage == "Voisinage de von Neumann" || choix_voisinage == "Voisinage de Moore"){
        delete form_rayon;
        delete grid;
        form_rayon = new QFormLayout;
        rayon = new QSpinBox;

        form_rayon->addRow("Rayon du voisinage :", rayon);
        form_param->addLayout(form_rayon, 0, 0, 1, 1);
        //form_param->addLayout(form_rayon, 1, 0, 8, 1);
    }
    else if(choix_voisinage == "Voisinage arbitraire") {
        this->affGrille();
    }
107
    //else if(choix_voisinage == "--- select ---"){
108
109
        //delete form_rayon;
        //delete grid;
110
    //}
111
112
113

}

114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
void NouveauModele::affGrille() {
    delete grid;
    grid = new QTableWidget(5, 5);
    form_param->addWidget(grid, 0, 0, 8, 1);

    grid->horizontalHeader()->setVisible(false); //Pas de nom pour les colonnes.
    grid->verticalHeader()->setVisible(false);
    grid->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //Pas de barre pour scroller.
    grid->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    for(unsigned int i=0; i<5; i++){
        for(unsigned int j=0; j<5; j++)
        {
            grid->setRowHeight(j,80);
            grid->setColumnWidth(j, 80);
129
130
131
132
133
134
135
136
137
138
139
140
141

            /*
            int x = i-3;
            int y = -1*(j-2);
            std::string co = "(";
            co += x;
            co += ",";
            co += y;
            co += ")";
            QString coordonnees = co;
            */

            grid->setItem(i, j, new QTableWidgetItem);
Maxime Goret's avatar
Maxime Goret committed
142
143
                grid->item(i, j)->setFlags(Qt::ItemIsEnabled);
                grid->item(i,j)->setBackground(Qt::white);
144

Maxime Goret's avatar
Maxime Goret committed
145
            }
146
        }
Maxime Goret's avatar
Maxime Goret committed
147
148
    QColor noir = Qt::black;
    grid->item(2,2)->setBackground(noir);
Maxime Goret's avatar
Maxime Goret committed
149

150
151
152
    connect(grid, SIGNAL(clicked(const QModelIndex&)), this, SLOT(modifGrille(const QModelIndex&)));
}

Maxime Goret's avatar
Maxime Goret committed
153
154


155
156
157
void NouveauModele::modifGrille(const QModelIndex& index){
    unsigned int i = index.row();
    unsigned int j = index.column();
158

159
    QColor rouge = Qt::red;
Maxime Goret's avatar
Maxime Goret committed
160
161
    QColor blanc = Qt::white;

Maxime Goret's avatar
Maxime Goret committed
162
    if (i == 2 && j == 2){
Maxime Goret's avatar
Maxime Goret committed
163
164
165
166
167
168
       return;
    }else if (grid->item(i,j)->background() == blanc){
         grid->item(i,j)->setBackground(rouge);
    }else if(grid->item(i,j)->background() == rouge){
         grid->item(i,j)->setBackground(blanc);
    }
Maxime Goret's avatar
Maxime Goret committed
169

170
171
}

172
173
174
175
176
void NouveauModele::changerVoisinage(const QString& choix_regle){

    delete liste_voisinage;
    form_choix->removeRow(2);
    liste_voisinage = new QComboBox();
177

Maxime Goret's avatar
Maxime Goret committed
178
179


180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
    if(choix_regle == "Life Game"){
        //liste_voisinage->addItem("--- select ---");
        liste_voisinage->addItem("Voisinage de von Neumann");
        liste_voisinage->addItem("Voisinage arbitraire");
        liste_voisinage->setCurrentIndex(-1);
    }
    else if(choix_regle == "Langston's Loop"){
        liste_voisinage->addItem("Voisinage de Moore");
        liste_voisinage->addItem("Voisinage arbitraire");
        liste_voisinage->setCurrentIndex(-1);
    }
    else if(choix_regle == "Brian's brain" || choix_regle == "Circulaire de Griffeath"){
        //liste_voisinage->addItem("--- select ---");
        liste_voisinage->addItem("Voisinage de Moore");
        liste_voisinage->addItem("Voisinage de von Neumann");
        liste_voisinage->addItem("Voisinage arbitraire");
        liste_voisinage->setCurrentIndex(-1);
    }
    form_choix->insertRow(2, "Voisinage :", liste_voisinage);
    connect(liste_voisinage, SIGNAL(currentTextChanged(const QString&)), this, SLOT(paramVoisinage(const QString&)));
}
Maxime Goret's avatar
Maxime Goret committed
201