parametragemodele.cpp 7.85 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
    liste_regle_transition->addItem("Langston's Loop");
    liste_regle_transition->addItem("Nouvelle fonction de transition");

Maxime Goret's avatar
Maxime Goret committed
56

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&)));
Maxime Goret's avatar
Maxime Goret committed
63
    connect(liste_regle_transition, SIGNAL(currentTextChanged(const QString&)), this, SLOT(paramRegle(const QString)));
64
65
66
67

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

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

Maxime Goret's avatar
Maxime Goret committed
70
71
72
73
74
75
76
    //ajout regle :






77
78
    form_choix->addRow("Nombre d'états :", nb_etats);
    form_choix->addRow("Règle de transition :", liste_regle_transition);
79
    form_choix->addRow("Voisinage :", liste_voisinage);
80
    form_choix->addWidget(bouton_valide);
81

Maxime Goret's avatar
Maxime Goret committed
82
83


Maxime Goret's avatar
Maxime Goret committed
84

Maxime Goret's avatar
Maxime Goret committed
85
86
87



88
    general->addWidget(fenetre_init, 0, 0, 9, 1);
89
90

    //définition de la frame contenant la grille de sélection du voisinage
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
    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);
    */
108

109
110
}

111
112
113
114
115
116
117
118
119
120
121
122
123
124
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();
    }
125
    //else if(choix_voisinage == "--- select ---"){
126
127
        //delete form_rayon;
        //delete grid;
128
    //}
129
130

}
Maxime Goret's avatar
Maxime Goret committed
131
void NouveauModele::paramRegle(const QString& choix_regle) {
Maxime Goret's avatar
Maxime Goret committed
132
133
134
135
136
137
138
139
140
    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);
Maxime Goret's avatar
Maxime Goret committed
141
142
143
144
145
146
147
148
149
150
151
152
153
154


    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]);
            }
    }
Maxime Goret's avatar
Maxime Goret committed
155
156
157
158
159
    form_choix->addRow(seuilMin);
    form_choix->addRow(seuilMax);
    form_choix->addRow(destination, etatDest);
    form_choix->addRow(etatCourant, valid_Etat);
    connect(etatDest, SIGNAL(toggled(bool)), this, SLOT(choisirEtatCourant(bool)));
Maxime Goret's avatar
Maxime Goret committed
160
}
161

Maxime Goret's avatar
Maxime Goret committed
162
163
164
165
void choisirEtatCourant(bool checked){
     numEtatCourant = new QSpinBox*;

}
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
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);
181
182
183
184
185
186
187
188
189
190
191
192
193

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

Maxime Goret's avatar
Maxime Goret committed
197
            }
198
        }
Maxime Goret's avatar
Maxime Goret committed
199
200
    QColor noir = Qt::black;
    grid->item(2,2)->setBackground(noir);
Maxime Goret's avatar
Maxime Goret committed
201

202
203
204
    connect(grid, SIGNAL(clicked(const QModelIndex&)), this, SLOT(modifGrille(const QModelIndex&)));
}

Maxime Goret's avatar
Maxime Goret committed
205
206


207
208
209
void NouveauModele::modifGrille(const QModelIndex& index){
    unsigned int i = index.row();
    unsigned int j = index.column();
210

211
    QColor rouge = Qt::red;
Maxime Goret's avatar
Maxime Goret committed
212
213
    QColor blanc = Qt::white;

Maxime Goret's avatar
Maxime Goret committed
214
    if (i == 2 && j == 2){
Maxime Goret's avatar
Maxime Goret committed
215
216
217
218
219
220
       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
221

222
223
}

224
225
226
227
228
void NouveauModele::changerVoisinage(const QString& choix_regle){

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

Maxime Goret's avatar
Maxime Goret committed
230
231


232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
    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
253