parametragemodele.cpp 13.4 KB
Newer Older
1
#include"parametragemodele.h"
Maxime Goret's avatar
Maxime Goret committed
2
#include <autocell.h>
3
#include <Automate.h>
Maxime Goret's avatar
merge    
Maxime Goret committed
4
#include <autosql.h>
Maxime Goret's avatar
Merge    
Maxime Goret committed
5

6
7
8

NouveauModele::NouveauModele(QWidget* parent) : QWidget() {
    this->setWindowTitle("Paramétrage d'un nouveau modèle");
Maxime Goret's avatar
Maxime Goret committed
9
    this->setMinimumSize(850, 650);
10

11
12
13
14
15
    general = new QGridLayout;
    this->setLayout(general);

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

16
    fenetre_init = new QWidget;
17
    fenetre_init->setStyleSheet("background-color: rgb(204, 209, 209)");
Maxime Goret's avatar
Maxime Goret committed
18
    fenetre_init->setFixedWidth(410);
19
    label_init = new QLabel("Configuration du modèle :");
20
21
22

    form_init = new QGridLayout(fenetre_init);

23
    form_choix = new QFormLayout;
24
25

    form_init->addWidget(label_init, 0, 0, 1, 2);
26
    form_init->addLayout(form_choix, 1, 0, 8, 2);
27

28
29
    // infos sur l'automate
    QString nomDefaut = "Nouvel automate";
Leon Do Castelo's avatar
Leon Do Castelo committed
30
    nom_automate = new QLineEdit(nomDefaut);
31
    QString auteurDefaut = "Anonym";
Leon Do Castelo's avatar
Leon Do Castelo committed
32
    auteur = new QLineEdit(auteurDefaut);
33
    QString anneeDefaut = "2000";
Leon Do Castelo's avatar
Leon Do Castelo committed
34
    annee = new QLineEdit(anneeDefaut);
35
    QString descDefaut = "Nouvel automate créé par l'utilisateur";
Leon Do Castelo's avatar
Leon Do Castelo committed
36
    description = new QLineEdit(descDefaut);
37
    // nb d'états
Leon Do Castelo's avatar
Leon Do Castelo committed
38
    nb_etats = new QSpinBox;
Leon Do Castelo's avatar
Leon Do Castelo committed
39
    nb_etats->setRange(2, 8);
Maxime Goret's avatar
Maxime Goret committed
40
    nom_modele = new QLineEdit("Nouveau modèle");
Maxime Goret's avatar
Merge    
Maxime Goret committed
41
    etat = new QLabel("Nombre d'états :");
42

43
    //choisir un voisinage
44
    liste_voisinage = new QComboBox;
45

46

Maxime Goret's avatar
Maxime Goret committed
47
48

    liste_voisinage->setPlaceholderText("--- select ---");
49
    liste_voisinage->setCurrentIndex(-1);
Maxime Goret's avatar
Maxime Goret committed
50

51

52
53
54
    connect(liste_voisinage, SIGNAL(currentTextChanged(const QString&)), this, SLOT(paramVoisinage(const QString&)));

    //choisir une règle de transition
Maxime Goret's avatar
Maxime Goret committed
55

56
    //connect(liste_regle_transition, SIGNAL(currentIndexChanged(int)), liste_voisinage, SLOT(setCurrentIndex(int)));
Maxime Goret's avatar
Merge    
Maxime Goret committed
57

58
59

    bouton_valide = new QPushButton("Valider");
Maxime Goret's avatar
Maxime Goret committed
60

Maxime Goret's avatar
Maxime Goret committed
61
62
63
64
    layoutvalid = new QHBoxLayout;

    boutonEtat = new QPushButton("Etats");

Maxime Goret's avatar
Merge    
Maxime Goret committed
65
66
67
68
    layoutEtat = new QHBoxLayout;
    layoutEtat->addWidget(etat);
    layoutEtat->addWidget(nb_etats);

Maxime Goret's avatar
Merge    
Maxime Goret committed
69

Maxime Goret's avatar
merge    
Maxime Goret committed
70
71
72
73
74
75


    valider_Etat = new QPushButton("Valider le nombre d'états");



Maxime Goret's avatar
Merge    
Maxime Goret committed
76

Maxime Goret's avatar
Maxime Goret committed
77
    connect(boutonEtat, SIGNAL(clicked()), this, SLOT(parametrerEtats()));
Maxime Goret's avatar
Merge    
Maxime Goret committed
78

Maxime Goret's avatar
Maxime Goret committed
79
    connect(bouton_valide, SIGNAL(clicked()), this, SLOT(validerParametrage()));
Maxime Goret's avatar
merge    
Maxime Goret committed
80
81
    connect(valider_Etat, SIGNAL(clicked()), this, SLOT(changerEtatDefault()));

82

Maxime Goret's avatar
Maxime Goret committed
83
    //ajout regle :
Maxime Goret's avatar
Maxime Goret committed
84
    form_choix->addRow("Nom du modèle : ", nom_modele);
85
86
87
88
    form_choix->addRow("Nom automate :", nom_automate);
    form_choix->addRow("Auteur :", auteur);
    form_choix->addRow("Année :", annee);
    form_choix->addRow("Description :", description);
Maxime Goret's avatar
Merge    
Maxime Goret committed
89
    form_choix->addRow(layoutEtat);
Maxime Goret's avatar
merge    
Maxime Goret committed
90
91
92
93
94
95
96
    form_choix->addRow(valider_Etat);



    //form_choix->addRow("Etat défaut :", etat_default);


Maxime Goret's avatar
Maxime Goret committed
97

98
    general->addWidget(fenetre_init, 0, 0, 9, 1);
99
100

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

Maxime Goret's avatar
Maxime Goret committed
119

120
121
}

Romain De Laage De Bellefaye's avatar
Romain De Laage De Bellefaye committed
122
void NouveauModele::parametrerEtats() {
Luning Yang's avatar
Luning Yang committed
123
    paramAlpha.reset(new ParamAlpha(nb_etats->value(), this));
Romain De Laage De Bellefaye's avatar
Romain De Laage De Bellefaye committed
124
125
126
	paramAlpha->show();
}

127
128
void NouveauModele::paramVoisinage(const QString& choix_voisinage){
    if(choix_voisinage == "Voisinage de von Neumann" || choix_voisinage == "Voisinage de Moore"){
Maxime Goret's avatar
Maxime Goret committed
129
        if (form_rayon != nullptr) delete form_rayon;
Maxime Goret's avatar
Maxime Goret committed
130
131
        if (grid != nullptr) delete grid;

Maxime Goret's avatar
Maxime Goret committed
132
133
134
        grid = new QTableWidget;
        grid = nullptr;

135
136
137
138
139
140
141
142
143
144
        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();
    }
145
    //else if(choix_voisinage == "--- select ---"){
146
147
        //delete form_rayon;
        //delete grid;
148
    //}
149
150

}
Maxime Goret's avatar
Maxime Goret committed
151

Maxime Goret's avatar
Maxime Goret committed
152
153


154
void NouveauModele::affGrille() {
Maxime Goret's avatar
Maxime Goret committed
155
    if (grid != nullptr) delete grid;
Maxime Goret's avatar
Maxime Goret committed
156
    grid = new QTableWidget(5,5);
Maxime Goret's avatar
Maxime Goret committed
157
    form_param->addWidget(grid, 0, 0, 7, 3);
158
159
160
161
162
163
164
165
166

    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++)
        {
Maxime Goret's avatar
Maxime Goret committed
167
168
            grid->setRowHeight(j,80);
            grid->setColumnWidth(j,80);
169
170
171
172
173
174
175
176
177
178
179
180
181

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

Maxime Goret's avatar
Maxime Goret committed
185
            }
186
        }
Maxime Goret's avatar
Maxime Goret committed
187
188
    QColor noir = Qt::black;
    grid->item(2,2)->setBackground(noir);
Maxime Goret's avatar
Maxime Goret committed
189

190
191
192
    connect(grid, SIGNAL(clicked(const QModelIndex&)), this, SLOT(modifGrille(const QModelIndex&)));
}

Maxime Goret's avatar
Maxime Goret committed
193
194


195
196
197
void NouveauModele::modifGrille(const QModelIndex& index){
    unsigned int i = index.row();
    unsigned int j = index.column();
198

199
    QColor rouge = Qt::red;
Maxime Goret's avatar
Maxime Goret committed
200
201
    QColor blanc = Qt::white;

Maxime Goret's avatar
Maxime Goret committed
202
    if (i == 2 && j == 2){
Maxime Goret's avatar
Maxime Goret committed
203
204
205
206
207
208
       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
209

210
211
}

Maxime Goret's avatar
Maxime Goret committed
212
void NouveauModele::changerVoisinage(){
213

Leon Do Castelo's avatar
Leon Do Castelo committed
214
215
216
    Fonction* automateFonction = new Fonction(Automate::getInstance().getEnsemble().getEtat(etat_default->value()));
    Automate::getInstance().setFonction(automateFonction);
    
Maxime Goret's avatar
Maxime Goret committed
217
    //delete liste_voisinage;
Maxime Goret's avatar
Maxime Goret committed
218
    form_choix->removeRow(7);
219
    liste_voisinage = new QComboBox();
Maxime Goret's avatar
Maxime Goret committed
220
    layoutvalid = new QHBoxLayout;
221

Maxime Goret's avatar
Maxime Goret committed
222
223


Maxime Goret's avatar
Maxime Goret committed
224
225
226
227
228
229
230
231
232

    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(7, "Voisinage :", liste_voisinage);

233
234
    connect(liste_voisinage, SIGNAL(currentTextChanged(const QString&)), this, SLOT(paramVoisinage(const QString&)));
}
Maxime Goret's avatar
Maxime Goret committed
235

Maxime Goret's avatar
Maxime Goret committed
236
237
238
239
240
241
242
243
244
245
246
247
248

void NouveauModele::choisirEtatCourant(const QString& validEtat){

    if (validEtat == "Oui"){

        if (fin != nullptr) delete fin;
        if (next != nullptr) delete next;
        if (layouth5 != nullptr) delete layouth5;
        if (layouth6 != nullptr) delete layouth6;
        if (layoutv2 != nullptr) delete layoutv2;
        if (etatCourant2 != nullptr) delete etatCourant2;
        if (numEtatCourant != nullptr) delete numEtatCourant;

Maxime Goret's avatar
Maxime Goret committed
249

Maxime Goret's avatar
Maxime Goret committed
250
251
252
253
254
255
256
257
        layouth6 = new QHBoxLayout;
        layouth5 = new QHBoxLayout;
        layoutv2 = new QVBoxLayout;


        fin = new QPushButton("Terminer");
        next = new QPushButton("Règle suivante");

Maxime Goret's avatar
Maxime Goret committed
258
        form_choix->insertRow(9,layoutv2);
Maxime Goret's avatar
Maxime Goret committed
259
260
261
262
263
264
        layoutv2->addLayout(layouth5);
        layoutv2->addLayout(layouth6);

        etatCourant2 = new QLabel("Etat Courant : ");

        numEtatCourant = new QSpinBox;
Maxime Goret's avatar
Maxime Goret committed
265
        numEtatCourant->setRange(0,nb_etats->value()-1);
Maxime Goret's avatar
Maxime Goret committed
266
267
268
269
270
271

        layouth5->addWidget(etatCourant2);
        layouth5->addWidget(numEtatCourant);

        layouth6->addWidget(fin);
        layouth6->addWidget(next);
Maxime Goret's avatar
Maxime Goret committed
272
273


Maxime Goret's avatar
Maxime Goret committed
274
        connect(next, SIGNAL(clicked()), this, SLOT(addRegle()));
Maxime Goret's avatar
Maxime Goret committed
275
276
        connect(fin, SIGNAL(clicked()), this, SLOT(validation()));

Maxime Goret's avatar
Maxime Goret committed
277
278
279
280
281
282
283
284
285
286
287
288

    }else{


       if (fin != nullptr) delete fin;
       if (next != nullptr) delete next;
       if (layouth5 != nullptr) delete layouth5;
       if (layouth6 != nullptr) delete layouth6;
       if (layoutv2 != nullptr) delete layoutv2;
       if (etatCourant2 != nullptr) delete etatCourant2;
       if (numEtatCourant != nullptr) delete numEtatCourant;

Maxime Goret's avatar
Maxime Goret committed
289

Maxime Goret's avatar
Maxime Goret committed
290
291
292
293
294
295
296
297
298
299
300
301
302
       numEtatCourant = new QSpinBox;
       numEtatCourant = nullptr;

       layouth6 = new QHBoxLayout;
       layouth5 = new QHBoxLayout;
       layoutv2 = new QVBoxLayout;


       etatCourant2 = new QLabel("Etat Courant non pris en compte ");

       fin = new QPushButton("Terminer");
       next = new QPushButton("Règle suivante");

Maxime Goret's avatar
Maxime Goret committed
303
       form_choix->insertRow(9,layoutv2);
Maxime Goret's avatar
Maxime Goret committed
304
305
       layoutv2->addLayout(layouth5);
       layoutv2->addLayout(layouth6);
Maxime Goret's avatar
Maxime Goret committed
306
307


Maxime Goret's avatar
Maxime Goret committed
308
       layouth5->addWidget(etatCourant2);
Maxime Goret's avatar
Maxime Goret committed
309

Maxime Goret's avatar
Maxime Goret committed
310
311
312
       layouth6->addWidget(fin);
       layouth6->addWidget(next);

Maxime Goret's avatar
Maxime Goret committed
313

Maxime Goret's avatar
Maxime Goret committed
314
       connect(next, SIGNAL(clicked()), this, SLOT(addRegle()));
Maxime Goret's avatar
Maxime Goret committed
315
316
       connect(fin, SIGNAL(clicked()), this, SLOT(validation()));

Maxime Goret's avatar
Maxime Goret committed
317
318
319
320
321
322

    }


}

Maxime Goret's avatar
Maxime Goret committed
323
void NouveauModele::paramRegle() {
Maxime Goret's avatar
merge    
Maxime Goret committed
324

Maxime Goret's avatar
Maxime Goret committed
325
326
327
328
329
    seuilMax = new QLabel("Seuil Max : ");
    seuilMin = new QLabel("Seuil Min : ");
    destination = new QLabel("Destination : ");
    etatCourant = new QLabel("Etat Courant : ");

Maxime Goret's avatar
merge    
Maxime Goret committed
330
    etatDest = new QSpinBox;
Leon Do Castelo's avatar
Leon Do Castelo committed
331
    etatDest->setRange(0, nb_etats->value()-1);
Maxime Goret's avatar
Maxime Goret committed
332
333
334
335
336
337

    valid_Etat = new QComboBox;
    valid_Etat->addItem("Oui");
    valid_Etat->addItem("Non");
    valid_Etat->setCurrentIndex(-1);

Maxime Goret's avatar
merge    
Maxime Goret committed
338

Maxime Goret's avatar
Maxime Goret committed
339
340
341
342
343
344
345
346
347
348
349
        seuilValidator=new QIntValidator;

        if(layouth1 != nullptr) delete layouth1;
        if(layouth2 != nullptr) delete layouth2;
        if(layouth3 != nullptr) delete layouth3;
        if(layouth4 != nullptr) delete layouth4;
        if(layoutv != nullptr) delete layoutv;
        if(layouth5 != nullptr) delete layouth5;
        if(layouth6 != nullptr) delete layouth6;
        if(layoutv2 != nullptr) delete layoutv2;

Maxime Goret's avatar
Maxime Goret committed
350

Maxime Goret's avatar
Merge    
Maxime Goret committed
351
        layoutv = new QVBoxLayout;
Maxime Goret's avatar
Maxime Goret committed
352
353
354
355
356
        layouth1 = new QHBoxLayout;
        layouth2 = new QHBoxLayout;
        layouth3 = new QHBoxLayout;
        layouth4 = new QHBoxLayout;

Maxime Goret's avatar
Maxime Goret committed
357
358
359
        layouth6 = new QHBoxLayout;
        layouth5 = new QHBoxLayout;
        layoutv2 = new QVBoxLayout;
Maxime Goret's avatar
Merge    
Maxime Goret committed
360

Maxime Goret's avatar
Maxime Goret committed
361

Maxime Goret's avatar
Maxime Goret committed
362
        form_choix->insertRow(8,layoutv);
Maxime Goret's avatar
Maxime Goret committed
363
364
365
        layoutv->addLayout(layouth1);
        layoutv->addLayout(layouth2);
        layoutv->addLayout(layouth3);
Maxime Goret's avatar
Maxime Goret committed
366
        layoutv->addLayout(layouth4);
Maxime Goret's avatar
Maxime Goret committed
367
368
369
370
371
372



        seuilValidator->setRange(0,1);

        layouth1->addWidget(seuilMin);
373
        for(int i=0; i<8; i++) {
Maxime Goret's avatar
Maxime Goret committed
374
375
376
377
378
379
380
381
382
383
384
385
            numSeuilMin[i]=new QLineEdit;
            numSeuilMin[i]->setFixedWidth(22);
            numSeuilMin[i]->setMaxLength(2);
            numSeuilMin[i]->setText("-1");
            numSeuilMin[i]->setValidator(seuilValidator);
            if (i<nb_etats->value()){
            layouth1->addWidget(numSeuilMin[i]);
            }
         }


         layouth2->addWidget(seuilMax);
386
         for(int i=0; i<8; i++) {
Maxime Goret's avatar
Maxime Goret committed
387
388
389
390
391
392
393
394
395
396
397
398
399
400
             numSeuilMax[i]=new QLineEdit;
             numSeuilMax[i]->setFixedWidth(22);
             numSeuilMax[i]->setMaxLength(2);
             numSeuilMax[i]->setText("-1");
             numSeuilMax[i]->setValidator(seuilValidator);
             if (i<nb_etats->value()){
             layouth2->addWidget(numSeuilMax[i]);
             }
         }
         layouth3->addWidget(destination);
         layouth3->addWidget(etatDest);

         layouth4->addWidget(etatCourant);
         layouth4->addWidget(valid_Etat);
Maxime Goret's avatar
Merge    
Maxime Goret committed
401

Maxime Goret's avatar
Maxime Goret committed
402
         connect(valid_Etat, SIGNAL(currentTextChanged(const QString&)), this, SLOT(choisirEtatCourant(const QString&)));
Maxime Goret's avatar
Maxime Goret committed
403

Maxime Goret's avatar
Maxime Goret committed
404
405
406
407
408
}



void NouveauModele::addRegle(){
Maxime Goret's avatar
Maxime Goret committed
409
410

    paramRegle();
Maxime Goret's avatar
Maxime Goret committed
411
412
}

Leon Do Castelo's avatar
Leon Do Castelo committed
413
414
415
416
417
418
419
void NouveauModele::validerParametrage(){

    Automate::getInstance().setTitle(nom_automate->text().toStdString());
    Automate::getInstance().setAuthor(auteur->text().toStdString());
    Automate::getInstance().setDesc(description->text().toStdString());
    Automate::getInstance().setYear(annee->text().toInt());

Leon Do Castelo's avatar
Leon Do Castelo committed
420
421
    Fonction* automateFonction = new Fonction(Automate::getInstance().getEnsemble().getEtat(etat_default->value()));

Leon Do Castelo's avatar
Leon Do Castelo committed
422
    /*
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
	Automate::getInstance().setTitle(nom_automate->value().toStdString());
	Automate::getInstance().setAuthor(auteur->value().toStdString());
	Automate::getInstance().setYear(anneee->value().toInt());
	Automate::getInstance().setDescription(description->value().toStdString());
	Automate::getInstance().setFonction(fonction.get());
	if (liste_voisinage->currentText().toStdString() == "Voisinage de von Neumann") {
		RegleVoisinageNeumann *regle_voisins = new RegleVoisinageNeumann;
		regle_voisins->setr(rayon.value());
		Automate::getInstance().setRegleVoisinage(rayon_voisins);
	}
	else if (liste_voisinage->currentText().toStdString() == "Voisinage de Moore") {
		RegleVoisinageMoore *regle_voisins = new RegleVoisinageMoore;
		regle_voisins->setr(rayon.value());
		Automate::getInstance().setRegleVoisinage(rayon_voisins);
	}
	else if (liste_voisinage->currentText().toStdString() == "Voisinage arbitraire") {
		//todo
	}
	Database::saveAutomaton(Automate::getInstance());
Maxime Goret's avatar
Maxime Goret committed
442
443
444
445
    if(nvAutocell != nullptr) delete nvAutocell;

    nvAutocell = new AutoCell;

Leon Do Castelo's avatar
Leon Do Castelo committed
446
447
    nvAutocell->show();*/
}
Maxime Goret's avatar
Maxime Goret committed
448

Maxime Goret's avatar
Merge    
Maxime Goret committed
449

Maxime Goret's avatar
merge    
Maxime Goret committed
450
451
452
453
454
455
456
457
458
459
460
461
462


void NouveauModele::changerEtatDefault(){
    etat_default = new QSpinBox;
    etat_default->setRange(0,(nb_etats->value())-1);

    valider_EtatDefault = new QPushButton("Valider l'état de défaut");

    form_choix->removeRow(6);
    form_choix->addRow("Etat défaut : ",etat_default);
    form_choix->addRow(valider_EtatDefault);
    connect(valider_EtatDefault, SIGNAL(clicked()), this, SLOT(parametrerEtats()));
}
Maxime Goret's avatar
Maxime Goret committed
463
464
465
466
467

void NouveauModele::validation(){
    bouton_valide = new QPushButton("Valider");
    form_choix->addRow(bouton_valide);
}