interface.cpp 3.56 KB
Newer Older
1
2
3
#include "interface.hpp"
#include "ui_interface.h"

4
5
#include "structuresavingdialog.hpp"

6
7
#include "structurewriter.hpp"

8
9
10
11
12
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
      , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
13
14

    connect(ui->action_save_struct, &QAction::triggered, this, &MainWindow::afficher_interface_sauvegarde_structure);
15
16
17
18
19
20
21
}

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

22
23
/// Connections

24
25
26
27
28
29
30
31
32
void MainWindow::on_simSpeedSpinbox_valueChanged(int arg1)
{
    ui->simSpeedSlider->setValue(arg1);
}

void MainWindow::on_simSpeedSlider_valueChanged(int value)
{
    ui->simSpeedSpinbox->setValue(value);
}
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

void MainWindow::on_openPatternButton_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),"/home",tr("PatternFile (*.pat)"));
    if(fileName == ""){
        // L'utilisateur a annulé la recherche
    }
    // Indiquer qu'un nouveau pattern vient d'être ouvert
}

void MainWindow::on_openRuleButton_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),"/home",tr("RuleFile (*.rule)"));
    if(fileName == ""){
        // L'utilisateur a annulé la recherche
    }
    // Indiquer qu'une nouvelle règle vient d'être ouverte. La règle est sauvegardé, donc on peut lancer la simulation
}

void MainWindow::on_neighborhoodComboBox_currentTextChanged(const QString &arg1)
{
    if(arg1 == "Von Neumann"){
        ui->cusumNeighborhoodButton->setEnabled(false);
        // Utiliser la règle de voisinage VonNeumann
    }
    if(arg1 == "Moore"){
        ui->cusumNeighborhoodButton->setEnabled(false);
        // Utiliser la règle de voisinage Moore
    }
    if(arg1 == "Custom"){
        ui->cusumNeighborhoodButton->setEnabled(true);
    }
}

67
void MainWindow::on_widthSpinBox_valueChanged(int arg1)
68
69
70
71
{
    ui->validateGridDim->setEnabled(true);
}

72
void MainWindow::on_heightSpinBox_valueChanged(int arg1)
73
74
75
76
{
    ui->validateGridDim->setEnabled(true);
}

77
78
79
void MainWindow::afficher_interface_sauvegarde_structure(bool)
{
    StructureSavingDialog dialog(this);
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
    if (!dialog.exec())
        return;

    QString filename = QFileDialog::getSaveFileName(this, "Choisir un nom de fichier", QString(), "Format Cellulut (*.json);;Format Golly RLE (*.rle)");
    QFileInfo info(filename);
    printf("%s\n", info.suffix().toStdString().c_str());
    // on pourrait utiliser un Factory ici, mais c'est possiblement overkill, les possibilités d'évolution de format de fichier sont faibles et ne justifient pas l'effort

    Structure s = ui->grid_view->selected_cells();
    s.author = dialog.auteur().toStdString();
    s.title = dialog.titre().toStdString();
    s.desc = dialog.desc().toStdString();
    s.date = dialog.date().toString().toStdString();

    std::string save_data;
    if (info.suffix() == "json")
    {
        JSONStructureWriter writer;
        save_data = writer.save_structure(s);
    }
    else if (info.suffix() == "rle")
    {
        RLEStructureWriter writer;
        save_data = writer.save_structure(s);
    }

    QFile file(filename);
    if (!file.open(QIODevice::WriteOnly))
    {
        QMessageBox::information(this, "Impossible de créer le fichier",
                                 file.errorString());
        return;
    }

    QTextStream stream(&file);
    stream << QString::fromStdString(save_data);
116
117
}

118

119
120
121
122
123
void MainWindow::on_validateGridDim_clicked()
{
    // Appliquer la dimension à la grille
    ui->validateGridDim->setEnabled(false);
}
124
125
126
127
128
129
130

void MainWindow::on_nbrStateComboBox_currentTextChanged(const QString &arg1)
{
    unsigned val = arg1.toInt();

    ui->grid_view->set_current_pen(val);
}