interface.hpp 4.43 KB
Newer Older
1
2
3
4
5
6
7
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP

#include <QMainWindow>


#include <QGraphicsScene>
8
#include <QFileDialog>
9
10

#include "property.hpp"
11
#include "simulation.hpp"
12

13
14
class Structure;

15
16
17
18
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

19
//! \brief Fenêtre principale de l'application.
20
21
22
23
24
25
26
27
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

28
private slots:
29
    //! \brief Connection entre le slider et le spinBox pour la vitesse d'exectution de la simulation
30
31
    void on_simSpeedSpinbox_valueChanged(int arg1);

32
    //! \brief Connection entre le slider et le spinBox pour la vitesse d'exectution de la simulation
33
34
    void on_simSpeedSlider_valueChanged(int value);

35
36
37
38
39
40
    //! \brief Ouverture d'un pattern depuis le navigateur de fichier
    void on_openPatternButton_clicked();

    //! \brief Ouverture d'une règle depuis le navigateur de fichier
    void on_openRuleButton_clicked();

41
42
    //! \brief Envoie un signal lors du changement de voisinage.
    void on_neighborhood_list_currentTextChanged(const QString &);
43
44
45
46

    //! \brief Envoie le signal que la dimension de la grille a été modifié
    void on_validateGridDim_clicked();

47
48
    //! \brief Active le bouton pour valider la dimension de la grille lors d'une modification dans le Line Edit
    void on_widthSpinBox_valueChanged(int arg1);
49

50
51
    //! \brief Active le bouton pour valider la dimension de la grille lors d'une modification dans le Line Edit
    void on_heightSpinBox_valueChanged(int arg1);
52

53
    //! \brief Affiche l'interface pour sauvegarder la sélection actuelle comme une structure
54
55
    //! \returns Le nom du fichier choisi
    QString afficher_interface_sauvegarde_structure();
56

57
58
    void on_nbrStateComboBox_currentTextChanged(const QString &arg1);

59
60
61
    //! \brief Créer une nouvelle grille ayant des états aléatoire
    void on_randomPatternButton_clicked();

62
63
64
    //! \brief Applique l'état sélectionné aux cellules sélectionnées de la GridView
    void on_drawCellButton_clicked();

65
66
67
    //! \brief Copie la structure choisie dans la bibliothèque dans le presse-papier du GridView
    void copy_structure_clicked(const Structure& s);

68
69
    void on_saveRuleButton_clicked();

70
71
    void on_customize_button_clicked();

72
73
    void on_savePatternButton_clicked();

Anthony Noir's avatar
Anthony Noir committed
74
75
76
77
78
79
    void on_nextButton_clicked();

    void on_prevButton_clicked();

    void on_playPauseButton_clicked();

Anthony Noir's avatar
reset    
Anthony Noir committed
80
81
    void on_resetButton_clicked();

Anthony Noir's avatar
Anthony Noir committed
82
83
    void on_recordSpinBox_valueChanged(int arg1);

84
85
86
87
88
89
90
private:
    //! \brief Initialiser la liste des transitions et voisinages disponibles
    void init_transition_neighborhood_list();

    //! \brief Mets à jour le widget contenant les paramètres pour la règle de transition choisie
    void update_transition_settings();

91
92
93
    //! \brief Mets à jour le widget contenant les paramètres pour la règle de voisinage choisie
    void update_neighborhood_settings();

94
95
96
97
98
99
100
101
102
103
104
105
    //! \brief Configure pour activer la customisation d'une règle actuelle
    void enable_rule_customization();

    //! \brief Configure pour désactiver la customisation d'une règle actuelle
    void disable_rule_customization();

    //! \brief Charge un modèle d'automate à partir d'un objet JSON
    void load_model(const QJsonObject& obj);

    //! \brief Déclenche la confirmation et la sauvegarde du modèle édité actuel
    void save_model();

106
107
108
    //! \brief Charge la grille depuis une image.
    void load_from_image();

Yann Boucher's avatar
Yann Boucher committed
109
    //! \brief Charge un nouvel alphabet et met à jour l'UI.
110
111
    void ui_update_alphabet(const Alphabet& alph);

112
113
114
115
    //! \brief Essaie de charger l'état de l'application si il a été sauvegardé.
    //! \returns True si le chargement a été réussi, false sinon.
    bool try_load_saved_state();

116
117
118
119
    //! \brief Sauvegarde la configuration actuelle.
    void save_grid_configuration();

    //! \brief Charge une configuration liée au modèle donné.
120
    void load_grid_configuration(const QJsonObject &configuration);
121

122
123
    //! \brief Retourne le modèle par défaut à charger
    QJsonObject default_model() const;
124
125
126
127
128
129
130

    //! \brief Retourne la configuration par défaut à charger
    QJsonObject default_configuration() const;

protected:
    void closeEvent(QCloseEvent* e) override;

131
132
private:
    Ui::MainWindow *ui;
133
    Simulation simulation;
134
135
    TransitionRule* m_transition_rule;
    NeighborhoodRule* m_neighborhood_rule;
136
    QJsonObject m_loaded_model;
Anthony Noir's avatar
Anthony Noir committed
137
    QTimer* timer;
138
    bool m_customizing;
139
140
};
#endif // MAINWINDOW_HPP