This repository was archived by the owner on Dec 1, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmatrixdisplay.h
More file actions
183 lines (153 loc) · 4.53 KB
/
matrixdisplay.h
File metadata and controls
183 lines (153 loc) · 4.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
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
54
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#ifndef MATRIXDISPLAY_H
#define MATRIXDISPLAY_H
// Inclusion des headers Qt nécessaires
#include <QWidget>
#include <QString>
#include <QColor>
#include <QTimer>
/**
* @file matrixdisplay.h
* @author G. Maxime
* @class MatrixDisplay
* @brief Déclaration de la classe MatrixDisplay pour l'affichage sur une matrice LED.
* Cette classe hérite de QWidget et permet d'afficher du texte ou l'heure actuelle
* sur une matrice LED simulée. Elle gère également le défilement du texte.
* La couleur des pixels, le mode d'affichage (texte ou horloge) et
* l'activation du défilement peuvent être configurés.
*
* La matrice virtuelle possède une grille fixe, reproduisant le comportement
* d'un véritable panneau LED.
*/
class MatrixDisplay : public QWidget
{
Q_OBJECT
public:
/**
* @brief Modes d'affichage disponibles pour la matrice LED.
*/
enum DisplayMode {
Text,
Clock
};
/**
* @brief Modes de défilement du texte.
*/
enum ScrollMode {
defaultMode,
bounceMode
};
/**
* @brief Constructeur de la matrice LED.
*/
explicit MatrixDisplay(QWidget *parent = nullptr);
/**
* @brief Indique si le texte courant dépasse la largeur affichable.
*/
bool requiresScrolling() const;
public slots:
/**
* @brief Met à jour le texte affiché sur la matrice.
* @param text Chaîne à représenter (convertie en majuscules).
*/
void setText(const QString &text);
/**
* @brief Modifie la couleur des pixels affichés.
* @param color Couleur utilisée pour dessiner les LED.
*/
void setColor(const QColor &color);
/**
* @brief Modifie la couleur des pixels affichés.
* @param color Couleur utilisée pour dessiner les LED.
*/
void setColor_Background(const QColor &color);
/**
* @brief Bascule entre les modes texte et horloge.
* @param mode Mode souhaité.
*/
void setDisplayMode(DisplayMode mode);
/**
* @brief Définit le mode de défilement.
* @param mode Mode de défilement souhaité.
*/
void setScrollMode(ScrollMode mode);
/**
* @brief Active ou désactive le défilement du texte en mode texte.
* @param enabled Vrai pour activer le scroll, faux sinon.
*/
void setScrollEnabled(bool enabled);
/**
* @brief Définit la vitesse de défilement en millisecondes.
* @param interval Intervalle entre chaque mise à jour du défilement.
*/
void setScrollInterval(int interval);
protected:
/**
* @brief Dessine la matrice LED et le contenu (texte ou horloge).
*/
void paintEvent(QPaintEvent *event) override;
/**
* @brief Gère le redimensionnement du widget et ajuste le défilement si nécessaire.
*/
void resizeEvent(QResizeEvent *event) override;
/**
* @brief Fournit une suggestion de taille pour le widget.
* @return Taille suggérée en pixels.
*/
QSize sizeHint() const override;
private slots:
/**
* @brief Gestion des mises à jour temporisées (horloge ou scroll).
*/
void onTimeout();
private:
/**
* @brief Relance le timer de défilement si les conditions sont réunies.
*/
void restartScrollIfNeeded();
/**
* @brief Calcule la taille d'une cellule en respectant la grille fixe.
* @return Taille d'une cellule en pixels.
*/
float calculateCellSize() const;
/**
* @brief Texte affiché sur la matrice (toujours en majuscules).
*/
QString currentText;
/**
* @brief Couleur des pixels allumés.
*/
QColor pixelColor = Qt::green;
/**
* @brief Couleur des pixels allumés.
*/
QColor backgroundColor = Qt::darkGray;
/**
* @brief Mode d'affichage actuel (texte ou horloge).
*/
DisplayMode currentMode;
/**
* @brief timeur pour gérer les mises à jour périodiques (scroll ou horloge).
*/
QTimer *timer;
/**
* @brief Décalage horizontal courant utilisé pendant le défilement.
*/
float scrollOffset;
/**
* @brief Indique si le défilement est autorisé en mode texte.
*/
bool scrollEnabled;
/**
* @brief Intervalle de défilement en millisecondes.
*/
int scrollIntervalMs = 50;
/**
* @brief Mode de défilement actuel.
*/
ScrollMode scrollMode = defaultMode;
/**
* @brief Direction actuelle du défilement (1 gauche à droite, -1 pour droite à gauche).
*/
int scrollDirection = 1;
};
#endif // MATRIXDISPLAY_H