14 #include <QStringList>
15 #include <QStyleOption>
16 #include <QSvgRenderer>
30 :
QWidget(parent), m_blinkState(on ? On : Off), m_colorOn(onColor), m_colorOff(offColor), m_shape(shape),
31 m_widthTarget(targetWidth), m_tooltipOn(onName), m_tooltipOff(offName), m_renderer(new
QSvgRenderer(this))
37 void CLedWidget::init()
46 void CLedWidget::setLed(LedColor ledColor)
48 Q_ASSERT_X(!m_renderer.
isNull(), Q_FUNC_INFO,
"no renderer");
49 if (!m_renderer) {
return; }
52 QString ledShapeAndColor(shapes().at(
static_cast<int>(m_shape)));
53 if (ledColor == NoColor)
58 m_currentToolTip = m_tooltipOn;
59 ledShapeAndColor.
append(CLedWidget::colorString(m_colorOn));
62 m_currentToolTip = m_tooltipTriState;
63 ledShapeAndColor.
append(CLedWidget::colorString(m_colorTriState));
67 m_currentToolTip = m_tooltipOff;
68 ledShapeAndColor.
append(CLedWidget::colorString(m_colorOff));
74 if (ledColor == m_colorOn)
76 m_currentToolTip = m_tooltipOn;
77 ledShapeAndColor.
append(CLedWidget::colorString(m_colorOn));
79 else if (ledColor == m_colorOff)
81 m_currentToolTip = m_tooltipOff;
82 ledShapeAndColor.
append(CLedWidget::colorString(m_colorOff));
86 m_currentToolTip = m_tooltipTriState;
87 ledShapeAndColor.
append(CLedWidget::colorString(m_colorTriState));
93 m_renderer->load(ledShapeAndColor);
96 const QSize s = m_renderer->defaultSize();
100 if (m_widthTarget < 0) { m_widthTarget = widths().
at(
static_cast<int>(m_shape)); }
101 const double h = m_widthTarget / m_whRatio;
102 m_heightCalculated = qRound(h);
109 QPixmap CLedWidget::renderToPixmap()
const
111 Q_ASSERT(!m_renderer.
isNull());
115 image.fill(qRgba(0, 0, 0, 0));
119 m_renderer->render(&painter);
126 if (color == NoColor) {
return empty; }
127 return colorFiles().
at(
static_cast<int>(color));
130 void CLedWidget::resetState()
132 if (m_value == m_blinkState) {
return; }
133 m_blinkState = m_value;
141 m_tooltipTriState = triState;
159 m_tooltipTriState = triStateTooltip;
165 m_tooltipTriState = tooltip;
166 m_colorTriState = color;
171 if (color == m_colorOn)
return;
178 if (color == m_colorOff)
return;
185 if (color == m_colorOff)
return;
186 m_colorTriState = color;
192 if (newShape == m_shape)
return;
198 const QString &toolTipOff,
int width)
203 m_tooltipOn = toolTipOn;
204 m_tooltipOff = toolTipOff;
205 m_widthTarget =
width;
217 m_tooltipOn = toolTipOn;
218 m_tooltipOff = toolTipOff;
219 m_tooltipTriState = toolTipTriState;
220 m_widthTarget =
width;
228 State s = on ? On : Off;
232 m_resetTimer.
singleShot(resetTimeMs,
this, [=] {
233 if (!myself) {
return; }
242 if (m_blinkState == s) {
return; }
250 this->
setOn(
true, resetTimeMs);
255 if (resetTimeMs > 0) { m_resetTimer.
singleShot(resetTimeMs,
this, &CLedWidget::resetState); }
261 if (m_blinkState == TriState) {
return; }
262 m_blinkState = TriState;
268 m_blinkState = (m_blinkState == Off) ? On : Off;
282 m_renderer->render(&painter);
297 static const QStringList shapes({
":/qled/icons/qled/circle_",
":/qled/icons/qled/square_",
298 ":/qled/icons/qled/triang_",
":/qled/icons/qled/round_" });
305 {
"red.svg",
"green.svg",
"yellow.svg",
"grey.svg",
"orange.svg",
"purple.svg",
"blue.svg",
"black.svg" });
311 static const QList<int> widths({ 16, 16, 16, 16 });
QList< T >::const_reference at(qsizetype i) const const
void setObjectName(QAnyStringView name)
void setBackgroundMode(Qt::BGMode mode)
void setRenderHint(QPainter::RenderHint hint, bool on)
QPixmap fromImage(QImage &&image, Qt::ImageConversionFlags flags)
bool isNull() const const
QString & append(QChar ch)
void initFrom(const QWidget *widget)
void setSingleShot(bool singleShot)