parametragemodele.cpp 7.99 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");
Maxime Goret's avatar
Maxime Goret committed
53
54
55
56
    liste_regle_transition->addItem("Langston's Loop");
    liste_regle_transition->addItem("Nouvelle fonction de transition");

    connect(liste_regle_transition, SIGNAL(currentTextChanged(const QString&)), this, SLOT(paramRegle(const QString)));
57
58
59
60
61
62


    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&)));
63
64
65
66

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

67
    //connect(bouton_valide, SIGNAL(clicked()), SLOT(affParametrage()));
68

Maxime Goret's avatar
Maxime Goret committed
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
    //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*)));



86
87
    form_choix->addRow("Nombre d'états :", nb_etats);
    form_choix->addRow("Règle de transition :", liste_regle_transition);
88
    form_choix->addRow("Voisinage :", liste_voisinage);
89
    form_choix->addWidget(bouton_valide);
90

Maxime Goret's avatar
Maxime Goret committed
91
92
93
94
95
96
97
98
99


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



100
    general->addWidget(fenetre_init, 0, 0, 9, 1);
101
102

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

121
122
}

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

}
Maxime Goret's avatar
Maxime Goret committed
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
void NouveauModele::paramRegle(const QString& choix_regle) {


    if (choix_regle == "Nouvelle fonction de transition") {
        seuilValidator=new QIntValidator;
            seuilValidator->setRange(0,1);
            for(unsigned int i=0; i<8; i++) {
                numSeuilMin[i]=new QLineEdit;
                numSeuilMin[i]->setFixedWidth(22);
                numSeuilMin[i]->setMaxLength(1);
                numSeuilMin[i]->setText("-1");
                numSeuilMin[i]->setValidator(seuilValidator);
                form_init->addWidget(numSeuilMin[i]);
            }
    }
}
159

160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
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);
175
176
177
178
179
180
181
182
183
184
185
186
187

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

Maxime Goret's avatar
Maxime Goret committed
191
            }
192
        }
Maxime Goret's avatar
Maxime Goret committed
193
194
    QColor noir = Qt::black;
    grid->item(2,2)->setBackground(noir);
Maxime Goret's avatar
Maxime Goret committed
195

196
197
198
    connect(grid, SIGNAL(clicked(const QModelIndex&)), this, SLOT(modifGrille(const QModelIndex&)));
}

Maxime Goret's avatar
Maxime Goret committed
199
200


201
202
203
void NouveauModele::modifGrille(const QModelIndex& index){
    unsigned int i = index.row();
    unsigned int j = index.column();
204

205
    QColor rouge = Qt::red;
Maxime Goret's avatar
Maxime Goret committed
206
207
    QColor blanc = Qt::white;

Maxime Goret's avatar
Maxime Goret committed
208
    if (i == 2 && j == 2){
Maxime Goret's avatar
Maxime Goret committed
209
210
211
212
213
214
       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
215

216
217
}

218
219
220
221
222
void NouveauModele::changerVoisinage(const QString& choix_regle){

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

Maxime Goret's avatar
Maxime Goret committed
224
225


226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
    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
247

Maxime Goret's avatar
Maxime Goret committed
248
249
250
251
252
/*void choisirEtatCourant(QFormLayout* form_choix){
    QSpinBox* numEtatCourant = new QSpinBox;
    numEtatCourant->setRange(1,8);
    form_choix->addRow("Choisissez l'indice de l'tat courant : ", numEtatCourant);
}*/