colorlabel.cpp 5.45 KB
Newer Older
1
#include "colorlabel.hpp"
Yann Boucher's avatar
Yann Boucher committed
2
3
4
5
6
7
8
#include "ui_colorlabel.h"
#include "state.hpp"
#include "stateColor.hpp"
#include "alphabet.hpp"
#include "interface.hpp"
#include <stdlib.h>
#include <string>
9
#include <cassert>
Yann Boucher's avatar
Yann Boucher committed
10
11
#include <QListWidget>
#include <QColorDialog>
12
#include <QMessageBox>
Yann Boucher's avatar
Yann Boucher committed
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

#include "constantes.hpp"

ColorLabel::ColorLabel(const Alphabet &in_a, QWidget *parent) :
      QDialog(parent),
      ui(new Ui::ColorLabel)
{
    ui->setupUi(this);

    ui->color_label->setAutoFillBackground(true);

    connect(ui->generate_button, SIGNAL(clicked()), this, SLOT(generateState()));
    connect(ui->random_button, SIGNAL(clicked()), this, SLOT(randomGenerator()));
    connect(ui->daltonian_button, SIGNAL(clicked()), this, SLOT(daltonianMode())); // Pas sûr pour cette ligne, mon but ici est d'aller chercher la valeur
    // présente dans nbrStatesComboBox, c'est à dire la valeur du nombre d'états que l'on peut modifier sur l'interface interface.ui
    connect(ui->reset_button, SIGNAL(clicked()), this, SLOT(resetMode()));
    connect(ui->remove_button, SIGNAL(clicked()), this, SLOT(removeState()));
    connect(ui->pick_button, SIGNAL(clicked()), this, SLOT(pickColor()));
    connect(ui->state_list, &QListWidget::currentRowChanged, this, [this](int id)
            {
                current_id = id;
                if (id >= 0)
                    loadStateID(id);
            });

    a = in_a;
    current_id = 0;
    ui->state_list->clear();
    for (unsigned i = 0; i < a.taille(); ++i)
        ui->state_list->addItem(QString::fromStdString(a.getState(i).getStateLabel()));
    loadStateID(0);
}

ColorLabel::~ColorLabel()
{
    delete ui;
}

void ColorLabel::generateState(){
    if(a.taille() >= MAX_ETATS) // On vérifie qu'il reste encore de la place dans l'alphabet
    {
54
        QMessageBox::warning(this, "Error", "Reached the maximal amount of states");
Yann Boucher's avatar
Yann Boucher committed
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
    }
    else {
        std::string string_name_state = ui->state_label->text().toStdString(); // On passe notre QString en string pour pouvoir utiliser le constructeur
        state newstate = state(stateColor(0,0,0),string_name_state); // Création de notre nouvel état
        a.newEtat(newstate); // Ajout du nouvel état dans l'alphabet
        ui->state_list->addItem(ui->state_label->text()); // Ajout du nouvel état dans la liste
    }
}


void ColorLabel::randomGenerator(){
    unsigned int r = rand() % 256; // On génère aléatoirement nos couleurs
    unsigned int g = rand() % 256;
    unsigned int b = rand() % 256;

    a.setState(current_id, state(stateColor(r, g, b), a.getState(current_id).getStateLabel()));

    QPalette pal = ui->color_label->palette();
    pal.setColor(QPalette::Window, QColor(r, g, b));
    ui->color_label->setPalette(pal);
}


void ColorLabel::daltonianMode(){
    ui->state_list->clear(); // On vide toujours la liste quand on active le mode Daltonien
    a.clearAlphabet();

    // Création des états à partir du constructeur
    state black = state(stateColor(0,0,0),"Black");
    state white = state(stateColor(255,255,255),"White");
    state blue = state(stateColor(0,0,255),"Blue");
    state pink = state(stateColor(255,0,255),"Pink");
    state red = state(stateColor(255,0,0),"Red");
    state green = state(stateColor(0,255,0),"Green");
    state orange = state(stateColor(255,127,0),"Orange");
    state grey = state(stateColor(127,127,127),"Grey");

    std::vector<state> daltonianstates;
    daltonianstates.resize(8, state{stateColor(0, 0, 0)});
    daltonianstates[0]=black;
    daltonianstates[1]=white;
    daltonianstates[2]=blue;
    daltonianstates[3]=pink;
    daltonianstates[4]=red;
    daltonianstates[5]=green;
    daltonianstates[6]=orange;
    daltonianstates[7]=grey;

    for(unsigned int i=0; i< daltonianstates.size() ; i++){ // Boucle qui crée le nombre d'états en fonction du nombre désiré
        a.newEtat(daltonianstates[i]); // Crée et ajoute l'état dans l'alphabet
        ui->state_list->addItem(QString::fromStdString(daltonianstates[i].getStateLabel())); // Ajoute l'état dans la liste
    }
}

void ColorLabel::resetMode(){
    ui->state_list->clear(); // On vide la liste
    ui->state_list->addItem("Default state");
    a.clearAlphabet();
    a.newEtat(state{stateColor{255, 255, 255}}); //On recrée toujours l'état par défaut
}

void ColorLabel::removeState(){
    if (a.taille() > 1)
    {
        ui->state_list->takeItem(a.taille()-1); // On retire le dernier élément ajouté
        a.deleleLastState();
    }
}

void ColorLabel::loadStateID(unsigned int current_id){
    assert(current_id < a.taille());

    state state = a.getState(current_id);
    ui->state_label->setText(QString::fromStdString(state.getStateLabel())); // On modifie le state_label en fonction du nom de l'état

    QColor color = QColor(state.getColor().getRed(), state.getColor().getGreen(), state.getColor().getBlue());
    QPalette pal = ui->color_label->palette();
    pal.setColor(QPalette::Window, color);
    ui->color_label->setPalette(pal);
}

void ColorLabel::pickColor()
{
    QColor color = QColorDialog::getColor();
    a.setState(current_id, state(stateColor(color.red(), color.green(), color.blue()), a.getState(current_id).getStateLabel()));

    QPalette pal = ui->color_label->palette();
    pal.setColor(QPalette::Window, color);
    ui->color_label->setPalette(pal);
}
Yann Boucher's avatar
Yann Boucher committed
145
146
147
148
149
150
151

void ColorLabel::on_state_label_textEdited(const QString &arg1)
{
    state s = a.getState(current_id);
    a.setState(current_id, state(s.getColor(), arg1.toStdString()));
    ui->state_list->item(current_id)->setText(arg1);
}