cut 3.4.1-rc1
Loading...
Searching...
No Matches
QeLedArray.hpp
1#ifndef QELEDARRAY_H
2#define QELEDARRAY_H
3
4#include <QWidget>
5#include <QColor>
6#include <QList>
7#include <QGridLayout>
8#include <elt/cut/widgets/widgets/QeLed.hpp>
9#include <QMap>
10#include <optional>
11#include <QStringList>
12#include <QLabel>
13#include <vector>
14
40class QeLedArray : public QWidget
41{
42 Q_OBJECT
43
51 Q_PROPERTY(bool vertical READ IsVertical WRITE SetVertical NOTIFY OrderChanged)
52
53
60 Q_PROPERTY(bool labels_visible READ AreLabelsVisible WRITE SetLabelsVisibility NOTIFY LabelsVisibilityChanged)
61
69 Q_PROPERTY(int leds_count READ GetLedsCount WRITE SetLedsCount NOTIFY LedsCountChanged)
70
76 Q_PROPERTY(QStringList states READ GetStates WRITE SetStates NOTIFY StatesChanged)
77
83 Q_PROPERTY(QList<QString> labels READ GetLabels WRITE SetLabels NOTIFY LabelsChanged)
84
90 Q_PROPERTY(QStringList signal_types READ GetSignalTypes WRITE SetSignalTypes NOTIFY SignalTypesChanged)
91
92
93public:
94 enum class SignalType {NONE, WARNING, CRITICAL, INFO};
95 Q_ENUM(SignalType);
96
97 explicit QeLedArray(QWidget* parent = nullptr);
98 explicit QeLedArray(int led_count, QWidget* parent = nullptr);
99 explicit QeLedArray(const QList<QString>& labels, const QList<SignalType>& signal_roles, QWidget* parent = nullptr);
100 ~QeLedArray(){};
101
102
103
104 bool IsVertical(){ return m_vertical; }
105 bool AreLabelsVisible(){ return m_labels_visible; }
106 int GetLedsCount(){ return m_leds_count; }
107 QStringList GetStates() const { return m_states; }
112 std::vector<bool> GetStatesBoolVector() const { return m_bool_states_vector; }
113 QList<QString> GetLabels(){ return m_labels; }
114 QStringList GetSignalTypes(){ return m_signal_types; }
119 QList<SignalType> GetSignalTypesEnumList() { return m_signal_types_list; };
120
121 void SetLedType(QeLed* led, SignalType type);
122
133 void SetToolTips(QList<QString> tooltips);
134
138 void SetSignalTypes(const QList<SignalType> &signal_types);
139
145 void SetLabel(int index, QString label_text);
146
152 void SetState(int index, bool state);
153
159 void SetSignalType(int index, SignalType signal_type);
160
161
162public slots:
163 void SetVertical(bool new_value) {
164 if(new_value == this->m_vertical)
165 return;
166
167 this->m_vertical = new_value;
168 RebuildArray();
169
170 emit OrderChanged(new_value);
171 }
172
173 void SetLabelsVisibility(bool new_value) {
174 if(new_value == this->m_labels_visible)
175 return;
176
177 this->m_labels_visible = new_value;
178 this->ChangeLabelsVisibility(this->m_labels_visible);
179 emit LabelsVisibilityChanged(new_value);
180 }
181
182 void SetLedsCount(int new_value){
183 if(new_value == this->m_leds_count)
184 return;
185
186 this->m_leds_count = new_value;
187
188 if(layout())
189 {
190 for(QeLed *led : m_leds_list){
191 m_layout->removeWidget(led);
192 led->deleteLater();
193 }
194 }
195
196 m_leds_list.clear();
197
198 this->RebuildArray();
199 emit LedsCountChanged(new_value);
200
201 }
202
203 void SetStates(const QStringList &states);
204
205 void SetStates(int int_value);
206
207 void SetStates(std::vector<bool> bool_states_list);
208
209 void SetLabels(QList<QString> labels);
210
218 void SetSignalTypes(const QStringList &signal_types);
219
220
221
222signals:
227 void OrderChanged(bool new_value);
228
229
234 void LabelsVisibilityChanged(bool new_value);
235
240 void LedsCountChanged(int new_value);
241
246 void StatesChanged(QStringList new_value);
247
252 void LabelsChanged(QList<QString> labels);
253
258 void SignalTypesChanged(QStringList new_values);
259
260
261private:
266 void CreateLayout();
267
276 void AddToLayout(QeLed *led, QLabel *label, int index);
277
282 void InitLedColorsMap();
293 void Init(std::optional<const QList<QString>> labels = std::nullopt,
294 std::optional<const QList<SignalType>> signal_roles = std::nullopt);
295
296 static std::vector<bool> IntToBits(int value, int num_bits);
300 void RebuildArray();
304 void ChangeLabelsVisibility(bool is_visible);
305
314 bool Value(const std::vector<bool> &vec, size_t index, bool default_value = false);
315
316
317 bool m_vertical = false;
318 bool m_labels_visible = true;
319 int m_leds_count = 4;
320 QList<QString> m_labels;
321 QList<QLabel*> m_labels_list;
322
323 QList<QeLed*> m_leds_list;
324 QGridLayout* m_layout = nullptr;
325
326 QStringList m_states;
327 std::vector<bool> m_bool_states_vector;
328
329 QStringList m_signal_types;
330 QList<SignalType> m_signal_types_list;
331
332 QColor warning_color = QColor(255,165,0);
333 QColor critical_color = QColor(255,0,0);
334 QColor info_color = QColor(0,0,255);
335 QColor none_color = QColor(169,169,169);
336
337 using OnOffMap = QMap<QString, QColor>;
338 using LedColorMap = QMap<SignalType, OnOffMap>;
339 LedColorMap m_led_color_map;
340
341
342
343};
344
345#endif // QELEDARRAY_H
Array of QeLed widgets that can be arranged horizontally or vertically.
Definition QeLedArray.hpp:41
void LedsCountChanged(int new_value)
LedsCountChanged Communicates change of LEDs' numbers.
bool labels_visible
Show/hide LEDs labels.
Definition QeLedArray.hpp:60
QList< SignalType > GetSignalTypesEnumList()
GetSignalTypesEnumList Returns current signal types for each LED.
Definition QeLedArray.hpp:119
void SetSignalType(int index, SignalType signal_type)
SetSignalType Sets signal type associated with the LED.
Definition QeLedArray.cpp:462
void OrderChanged(bool new_value)
OrderChanged Communicates change of LEDs order.
QList< QString > labels
QList of QStrings that are labels for each LED.
Definition QeLedArray.hpp:83
void LabelsVisibilityChanged(bool new_value)
LabelsVisibilityChanged Communicates change of LEDs' labels visibility.
QStringList signal_types
List of QStrings that are later converted to SignalType values which are assigned to corresponding LE...
Definition QeLedArray.hpp:90
std::vector< bool > GetStatesBoolVector() const
GetStatesBoolVector Helper method to get current states.
Definition QeLedArray.hpp:112
void StatesChanged(QStringList new_value)
StatesChanged Communicates change of LEDs' states.
void SetLabel(int index, QString label_text)
SetLabel Sets label under specific index.
Definition QeLedArray.cpp:436
void SetState(int index, bool state)
SetState Sets state of a single LED.
Definition QeLedArray.cpp:448
QStringList states
States of LEDs.
Definition QeLedArray.hpp:76
void SetSignalTypes(const QList< SignalType > &signal_types)
SetSignalTypes method to set signal types using enum values of SignalType type.
Definition QeLedArray.cpp:418
void SignalTypesChanged(QStringList new_values)
SignalTypesChanged SignalTypesChanged.
int leds_count
Number of LEDs in the array.
Definition QeLedArray.hpp:69
bool vertical
Order of the LEDs in the widget.
Definition QeLedArray.hpp:51
void SetToolTips(QList< QString > tooltips)
SetToolTips sets tooltips for existing LEDs.
Definition QeLedArray.cpp:235
void LabelsChanged(QList< QString > labels)
LabelsChanged Communicates change of LEDs' labels.
LED widget.
Definition QeLed.hpp:31