1/*
2 This file is part of the KDE libraries
3 SPDX-FileCopyrightText: 1998 Jörg Habenicht <j.habenicht@europemail.com>
4
5 SPDX-License-Identifier: LGPL-2.0-or-later
6*/
7
8#ifndef KLED_H
9#define KLED_H
10
11#include <kwidgetsaddons_export.h>
12
13#include <QWidget>
14#include <memory>
15
16class QColor;
17
18/**
19 * @class KLed kled.h KLed
20 *
21 * @short An LED widget.
22 *
23 * Displays a round or rectangular light emitting diode.
24 *
25 * It is configurable to arbitrary colors, the two on/off states and three
26 * styles (or "looks");
27 *
28 * It may display itself in a performant flat view, a round view with
29 * light spot or a round view sunken in the screen.
30 *
31 * \image html kled.png "KLed Widget"
32 *
33 * @author Joerg Habenicht, Richard J. Moore (rich@kde.org) 1998, 1999
34 */
35class KWIDGETSADDONS_EXPORT KLed : public QWidget
36{
37 Q_OBJECT
38 Q_PROPERTY(State state READ state WRITE setState)
39 Q_PROPERTY(Shape shape READ shape WRITE setShape)
40 Q_PROPERTY(Look look READ look WRITE setLook)
41 Q_PROPERTY(QColor color READ color WRITE setColor)
42 Q_PROPERTY(int darkFactor READ darkFactor WRITE setDarkFactor)
43
44public:
45 /**
46 * Status of the light is on/off.
47 * @short LED on/off.
48 */
49 enum State { Off, On };
50 Q_ENUM(State)
51
52 /**
53 * Shades of the lamp.
54 * @short LED shape
55 */
56 enum Shape { Rectangular, Circular };
57 Q_ENUM(Shape)
58
59 /**
60 * Displays a flat, round or sunken LED.
61 *
62 * @short LED look.
63 */
64 enum Look {
65 Flat,
66 Raised,
67 Sunken,
68 };
69 Q_ENUM(Look)
70
71 /**
72 * Constructs a green, round LED widget which will initially
73 * be turned on.
74 *
75 * @param parent The parent widget.
76 */
77 explicit KLed(QWidget *parent = nullptr);
78
79 /**
80 * Constructs a round LED widget with the supplied color which will
81 * initially be turned on.
82 *
83 * @param color Initial color of the LED.
84 * @param parent The parent widget.
85 * @short Constructor
86 */
87 explicit KLed(const QColor &color, QWidget *parent = nullptr);
88
89 /**
90 * Constructor with the color, state and look.
91 *
92 * Differs from above only in the parameters, which configure all settings.
93 *
94 * @param color Initial color of the LED.
95 * @param state Sets the State.
96 * @param look Sets the Look.
97 * @param shape Sets the Shape (rectangular or circular).
98 * @param parent The parent widget.
99 * @short Constructor
100 */
101 KLed(const QColor &color, KLed::State state, KLed::Look look, KLed::Shape shape, QWidget *parent = nullptr);
102
103 /**
104 * Destroys the LED widget.
105 * @short Destructor
106 */
107 ~KLed() override;
108
109 /**
110 * Returns the current color of the widget.
111 *
112 * @returns LED color
113 * @see setColor()
114 */
115 QColor color() const;
116
117 /**
118 * Returns the current state of the widget (on/off).
119 * @returns LED state
120 *
121 * @see State
122 */
123 State state() const;
124
125 /**
126 * Returns the current look of the widget.
127 * @returns LED look
128 *
129 * @see Look
130 */
131 Look look() const;
132
133 /**
134 * Returns the current shape of the widget.
135 * @returns LED shape
136 *
137 * @see Shape
138 */
139 Shape shape() const;
140
141 /**
142 * Returns the factor to darken the LED.
143 * @returns dark factor
144 *
145 * @see setDarkFactor()
146 */
147 int darkFactor() const;
148
149 /**
150 * Set the color of the widget.
151 *
152 * The LED is shown with @p color when in the KLed::On state
153 * or with the darken color in KLed::Off state.
154 *
155 * The widget calls the update() method, so it will
156 * be updated when entering the main event loop.
157 *
158 * @param color New color of the LED.
159 *
160 * @see color() darkFactor()
161 */
162 void setColor(const QColor &color);
163
164 /**
165 * Sets the state of the widget to On or Off.
166 *
167 * @param state The LED state: on or off.
168 *
169 * @see on() off() toggle()
170 */
171 void setState(State state);
172
173 /**
174 * Sets the look of the widget.
175 *
176 * The look may be Flat, Raised or Sunken.
177 *
178 * The widget calls the update() method, so it will
179 * be updated when entering the main event loop.
180 *
181 * @param look New look of the LED.
182 *
183 * @see Look
184 */
185 void setLook(Look look);
186
187 /**
188 * Set the shape of the LED.
189 *
190 * @param shape The LED shape.
191 * @short Set LED shape.
192 */
193 void setShape(Shape shape);
194
195 /**
196 * Sets the factor to darken the LED in KLed::Off state.
197 *
198 * The @p darkFactor should be greater than 100, otherwise the LED
199 * becomes lighter in KLed::Off state.
200 *
201 * Defaults to 300.
202 *
203 * @param darkFactor Sets the factor to darken the LED.
204 *
205 * @see setColor
206 */
207 void setDarkFactor(int darkFactor);
208
209 QSize sizeHint() const override;
210 QSize minimumSizeHint() const override;
211
212public Q_SLOTS:
213
214 /**
215 * Toggles the state of the led from Off to On or vice versa.
216 */
217 void toggle();
218
219 /**
220 * Sets the state of the widget to On.
221 *
222 * @see off() toggle() setState()
223 */
224 void on();
225
226 /**
227 * Sets the state of the widget to Off.
228 *
229 * @see on() toggle() setState()
230 */
231 void off();
232
233protected:
234 void paintEvent(QPaintEvent *) override;
235 void resizeEvent(QResizeEvent *) override;
236
237private:
238 /**
239 * @internal
240 * invalidates caches after property changes and calls update()
241 */
242 KWIDGETSADDONS_NO_EXPORT void updateCachedPixmap();
243
244 KWIDGETSADDONS_NO_EXPORT void updateAccessibleName();
245
246private:
247 std::unique_ptr<class KLedPrivate> const d;
248};
249
250#endif
251

source code of kwidgetsaddons/src/kled.h