1 | /* |
2 | This file is part of the KDE libraries |
3 | SPDX-FileCopyrightText: 1997 Martin Jones <mjones@kde.org> |
4 | |
5 | SPDX-License-Identifier: LGPL-2.0-or-later |
6 | */ |
7 | |
8 | #ifndef KCOLORBUTTON_H |
9 | #define KCOLORBUTTON_H |
10 | |
11 | #include <kwidgetsaddons_export.h> |
12 | |
13 | #include <QPushButton> |
14 | #include <memory> |
15 | |
16 | class KColorButtonPrivate; |
17 | /** |
18 | * @class KColorButton kcolorbutton.h KColorButton |
19 | * |
20 | * @short A pushbutton to display or allow user selection of a color. |
21 | * |
22 | * This widget can be used to display or allow user selection of a color. |
23 | * |
24 | * \image html kcolorbutton.png "KColorButton Widget" |
25 | * |
26 | * @see QColorDialog |
27 | */ |
28 | class KWIDGETSADDONS_EXPORT KColorButton : public QPushButton |
29 | { |
30 | Q_OBJECT |
31 | Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY changed USER true) |
32 | Q_PROPERTY(QColor defaultColor READ defaultColor WRITE setDefaultColor) |
33 | Q_PROPERTY(bool alphaChannelEnabled READ isAlphaChannelEnabled WRITE setAlphaChannelEnabled) |
34 | |
35 | public: |
36 | /** |
37 | * Creates a color button. |
38 | */ |
39 | explicit KColorButton(QWidget *parent = nullptr); |
40 | |
41 | /** |
42 | * Creates a color button with an initial color @p c. |
43 | */ |
44 | explicit KColorButton(const QColor &c, QWidget *parent = nullptr); |
45 | |
46 | /** |
47 | * Creates a color button with an initial color @p c and default color @p defaultColor. |
48 | */ |
49 | KColorButton(const QColor &c, const QColor &defaultColor, QWidget *parent = nullptr); |
50 | |
51 | ~KColorButton() override; |
52 | |
53 | /** |
54 | * Returns the currently chosen color. |
55 | */ |
56 | QColor color() const; |
57 | |
58 | /** |
59 | * Sets the current color to @p c. |
60 | */ |
61 | void setColor(const QColor &c); |
62 | |
63 | /** |
64 | * When set to true, allow the user to change the alpha component |
65 | * of the color. The default value is false. |
66 | * @since 4.5 |
67 | */ |
68 | void setAlphaChannelEnabled(bool alpha); |
69 | |
70 | /** |
71 | * Returns true if the user is allowed to change the alpha component. |
72 | * @since 4.5 |
73 | */ |
74 | bool isAlphaChannelEnabled() const; |
75 | |
76 | /** |
77 | * Returns the default color or an invalid color |
78 | * if no default color is set. |
79 | */ |
80 | QColor defaultColor() const; |
81 | |
82 | /** |
83 | * Sets the default color to @p c. |
84 | */ |
85 | void setDefaultColor(const QColor &c); |
86 | |
87 | QSize sizeHint() const override; |
88 | QSize minimumSizeHint() const override; |
89 | |
90 | Q_SIGNALS: |
91 | /** |
92 | * Emitted when the color of the widget |
93 | * is changed, either with setColor() or via user selection. |
94 | */ |
95 | void changed(const QColor &newColor); |
96 | |
97 | protected: |
98 | void paintEvent(QPaintEvent *pe) override; |
99 | void dragEnterEvent(QDragEnterEvent *) override; |
100 | void dropEvent(QDropEvent *) override; |
101 | void mousePressEvent(QMouseEvent *e) override; |
102 | void mouseMoveEvent(QMouseEvent *e) override; |
103 | void keyPressEvent(QKeyEvent *e) override; |
104 | |
105 | private: |
106 | std::unique_ptr<class KColorButtonPrivate> const d; |
107 | }; |
108 | |
109 | #endif |
110 | |