parametragemodele.cpp 7.17 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

Maxime Goret's avatar
Maxime Goret committed
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
    //ajout regle :
    seuilMax = new QLabel("Seuil Max : ");
    seuilMin = new QLabel("Seuil Min : ");
    destination = new QLabel("Destination : ");
    etatCourant = new QLabel("Etat Courant : ");

    valid_Etat = new QCheckBox;

    etatDest = new QSpinBox;
    etatDest->setRange(1,8);



    //connect(etatDest, SIGNAL(toggled(bool)), this, SLOT(choisirEtatCourant(QFormLayout*)));



82
83
    form_choix->addRow("Nombre d'états :", nb_etats);
    form_choix->addRow("Règle de transition :", liste_regle_transition);
84
    form_choix->addRow("Voisinage :", liste_voisinage);
85
    form_choix->addWidget(bouton_valide);
86

Maxime Goret's avatar
Maxime Goret committed
87
88
89
90
91
92
93
94
95


    form_choix->addRow(seuilMin);
    form_choix->addRow(seuilMax);
    form_choix->addRow(destination);
    form_choix->addRow(etatCourant, valid_Etat);



96
    general->addWidget(fenetre_init, 0, 0, 9, 1);
97
98

    //définition de la frame contenant la grille de sélection du voisinage
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
    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);
    */
116

117
118
}

119
120
121
122
123
124
125
126
127
128
129
130
131
132
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();
    }
133
    //else if(choix_voisinage == "--- select ---"){
134
135
        //delete form_rayon;
        //delete grid;
136
    //}
137
138
139

}

140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
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);
155
156
157
158
159
160
161
162
163
164
165
166
167

            /*
            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
168
169
                grid->item(i, j)->setFlags(Qt::ItemIsEnabled);
                grid->item(i,j)->setBackground(Qt::white);
170

Maxime Goret's avatar
Maxime Goret committed
171
            }
172
        }
Maxime Goret's avatar
Maxime Goret committed
173
174
    QColor noir = Qt::black;
    grid->item(2,2)->setBackground(noir);
Maxime Goret's avatar
Maxime Goret committed
175

176
177
178
    connect(grid, SIGNAL(clicked(const QModelIndex&)), this, SLOT(modifGrille(const QModelIndex&)));
}

Maxime Goret's avatar
Maxime Goret committed
179
180


181
182
183
void NouveauModele::modifGrille(const QModelIndex& index){
    unsigned int i = index.row();
    unsigned int j = index.column();
184

185
    QColor rouge = Qt::red;
Maxime Goret's avatar
Maxime Goret committed
186
187
    QColor blanc = Qt::white;

Maxime Goret's avatar
Maxime Goret committed
188
    if (i == 2 && j == 2){
Maxime Goret's avatar
Maxime Goret committed
189
190
191
192
193
194
       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
195

196
197
}

198
199
200
201
202
void NouveauModele::changerVoisinage(const QString& choix_regle){

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

Maxime Goret's avatar
Maxime Goret committed
204
205


206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
    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
227

Maxime Goret's avatar
Maxime Goret committed
228
229
230
231
232
/*void choisirEtatCourant(QFormLayout* form_choix){
    QSpinBox* numEtatCourant = new QSpinBox;
    numEtatCourant->setRange(1,8);
    form_choix->addRow("Choisissez l'indice de l'tat courant : ", numEtatCourant);
}*/