1 | /* |
2 | This file is part of the KDE Frameworks |
3 | SPDX-FileCopyrightText: 2021 Kai Uwe Broulik <kde@broulik.de> |
4 | |
5 | SPDX-License-Identifier: LGPL-2.0-or-later |
6 | */ |
7 | |
8 | #ifndef KNOTIFICATIONREPLYACTION_H |
9 | #define KNOTIFICATIONREPLYACTION_H |
10 | |
11 | #include <knotifications_export.h> |
12 | |
13 | #include <QObject> |
14 | |
15 | #include <memory> |
16 | |
17 | class QString; |
18 | |
19 | class KNotificationReplyActionPrivate; |
20 | |
21 | /** |
22 | * @class KNotificationReplyAction knotificationreplyaction.h KNotificationReplyAction |
23 | * |
24 | * @brief An inline reply action |
25 | * |
26 | * This class represents an inline reply action, which lets the user type a |
27 | * reply to a chat message or email in the notification popup. |
28 | */ |
29 | class KNOTIFICATIONS_EXPORT KNotificationReplyAction : public QObject |
30 | { |
31 | Q_OBJECT |
32 | /** |
33 | * @copydoc label |
34 | * @since 5.88 |
35 | */ |
36 | Q_PROPERTY(QString label READ label WRITE setLabel NOTIFY labelChanged) |
37 | /** |
38 | * @copydoc placeholderText |
39 | * @since 5.88 |
40 | */ |
41 | Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText NOTIFY placeholderTextChanged) |
42 | /** |
43 | * @copydoc submitButtonText |
44 | * @since 5.88 |
45 | */ |
46 | Q_PROPERTY(QString submitButtonText READ submitButtonText WRITE setSubmitButtonText NOTIFY submitButtonTextChanged) |
47 | /** |
48 | * @copydoc submitButtonIconName |
49 | * @since 5.88 |
50 | */ |
51 | Q_PROPERTY(QString submitButtonIconName READ submitButtonIconName WRITE setSubmitButtonIconName NOTIFY submitButtonIconNameChanged) |
52 | /** |
53 | * @copydoc fallbackBehavior |
54 | * @since 5.88 |
55 | */ |
56 | Q_PROPERTY(FallbackBehavior fallbackBehavior READ fallbackBehavior WRITE setFallbackBehavior NOTIFY fallbackBehaviorChanged) |
57 | |
58 | public: |
59 | /** |
60 | * Creates a inline reply action with given label |
61 | * @param label The label for the action |
62 | */ |
63 | explicit KNotificationReplyAction(const QString &label); |
64 | /** |
65 | * Destroys this inline reply action |
66 | */ |
67 | ~KNotificationReplyAction() override; |
68 | |
69 | /** |
70 | * The label for the action button |
71 | */ |
72 | QString label() const; |
73 | /** |
74 | * Set the label for the action button |
75 | */ |
76 | void setLabel(const QString &label); |
77 | |
78 | /** |
79 | * The placeholder text for the inline reply text field |
80 | */ |
81 | QString placeholderText() const; |
82 | /** |
83 | * Set the placeholder text for the inline reply text field, for example "Reply to Konqi..." |
84 | */ |
85 | void setPlaceholderText(const QString &placeholderText); |
86 | |
87 | /** |
88 | * The label for the button to send the typed reply |
89 | */ |
90 | QString submitButtonText() const; |
91 | /** |
92 | * Set the label for the button to send the typed reply |
93 | */ |
94 | void setSubmitButtonText(const QString &submitButtonText); |
95 | |
96 | /** |
97 | * The icon name for the button to send the typed reply |
98 | */ |
99 | QString submitButtonIconName() const; |
100 | /** |
101 | * Set the icon name for the button to send the typed reply |
102 | */ |
103 | void setSubmitButtonIconName(const QString &submitButtonIconName); |
104 | |
105 | /** |
106 | * Behavior when the notification server does not support inline replies |
107 | */ |
108 | enum class FallbackBehavior { |
109 | /** |
110 | * Don't add the reply action (default) |
111 | */ |
112 | HideAction, |
113 | /** |
114 | * Add the reply action as regular button |
115 | * |
116 | * Use this if you want to provide your own reply functionality |
117 | * |
118 | * @note The @c activated signal is emitted instead of @c replied! |
119 | */ |
120 | UseRegularAction, |
121 | }; |
122 | Q_ENUM(FallbackBehavior) |
123 | |
124 | /** |
125 | * Gets the fallback behavior when the notification server does not support inline replies |
126 | */ |
127 | FallbackBehavior fallbackBehavior() const; |
128 | /** |
129 | * Set the fallback behavior for when the notification server does not support inline replies |
130 | */ |
131 | void setFallbackBehavior(FallbackBehavior fallbackBehavior); |
132 | |
133 | Q_SIGNALS: |
134 | /** |
135 | * Emitted when the user has submitted a reply |
136 | * |
137 | * @note This is never emitted when the notification server does not support inline replies |
138 | * |
139 | * @param text The text the user entered |
140 | */ |
141 | void replied(const QString &text); |
142 | /** |
143 | * Emitted when the user clicks the reply fallback button |
144 | * |
145 | * @note This is emitted when the notification server does not support inline replies |
146 | * and fallbackBehavior is set to @c UseRegularAction. |
147 | */ |
148 | void activated(); |
149 | |
150 | /** |
151 | * Emitted when @p label changed. |
152 | * @since 5.88 |
153 | */ |
154 | void labelChanged(); |
155 | /** |
156 | * Emitted when @p placeholderText changed. |
157 | * @since 5.88 |
158 | */ |
159 | void placeholderTextChanged(); |
160 | /** |
161 | * Emitted when @p submitButtonText changed. |
162 | * @since 5.88 |
163 | */ |
164 | void submitButtonTextChanged(); |
165 | /** |
166 | * Emitted when @p submitButtonIconName changed. |
167 | * @since 5.88 |
168 | */ |
169 | void submitButtonIconNameChanged(); |
170 | /** |
171 | * Emitted when @p fallbackBehavior changed. |
172 | * @since 5.88 |
173 | */ |
174 | void fallbackBehaviorChanged(); |
175 | |
176 | private: |
177 | std::unique_ptr<KNotificationReplyActionPrivate> const d; |
178 | }; |
179 | |
180 | #endif // KNOTIFICATIONREPLYACTION_H |
181 | |