Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquickpalette.cpp
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qquickpalette_p.h"
5
6#include <QtQuick/private/qquickpalettecolorprovider_p.h>
7
9
10static constexpr bool is_valid(QPalette::ColorGroup cg) noexcept
11{
12 // use a switch to enable "unhandled enum" warnings:
13 switch (cg) {
17 return true;
20 case QPalette::All:
21 return false;
22 }
23
24 // GCC 8.x does not tread __builtin_unreachable() as constexpr
25#if defined(Q_CC_INTEL) || defined(Q_CC_CLANG) || (defined(Q_CC_GNU) && Q_CC_GNU >= 900)
26 // NOLINTNEXTLINE(qt-use-unreachable-return): Triggers on Clang, breaking GCC 8
27 Q_UNREACHABLE();
28#endif
29 return false;
30}
31
136 : QQuickColorGroup(parent)
137 , m_currentGroup(defaultCurrentGroup())
138{
139}
140
142{
143 return colorGroup(QPalette::Active);
144}
145
147{
148 return colorGroup(QPalette::Inactive);
149}
150
152{
153 return colorGroup(QPalette::Disabled);
154}
155
157{
158 if (colorProvider().resetColor(QPalette::Active))
159 Q_EMIT changed();
160}
161
163{
164 if (colorProvider().resetColor(QPalette::Inactive))
165 Q_EMIT changed();
166}
167
169{
170 if (colorProvider().resetColor(QPalette::Disabled))
171 Q_EMIT changed();
172}
173
181{
182 return m_currentGroup;
183}
184
208{
209 if (m_currentGroup != currentGroup) {
210 m_currentGroup = currentGroup;
211 Q_EMIT changed();
212 }
213}
214
216{
217 if (colorProvider().fromQPalette(std::move(palette))) {
218 Q_EMIT changed();
219 }
220}
221
223{
224 return colorProvider().palette();
225}
226
231
236
238{
239 if (colorProvider().reset()) {
240 Q_EMIT changed();
241 }
242}
243
250
255
260
265
266
267void QQuickPalette::setColorGroup(QPalette::ColorGroup groupTag,
269 void (QQuickPalette::*notifier)())
270{
271 if (isValidColorGroup(groupTag, group)) {
272 if (colorProvider().copyColorGroup(groupTag, group->colorProvider())) {
273 Q_EMIT (this->*notifier)();
274 Q_EMIT changed();
275 }
276 }
277}
278
279QQuickColorGroup::GroupPtr QQuickPalette::colorGroup(QPalette::ColorGroup groupTag) const
280{
281 if (auto group = findColorGroup(groupTag)) {
282 return group;
283 }
284
285 auto group = QQuickColorGroup::createWithParent(*const_cast<QQuickPalette*>(this));
286 const_cast<QQuickPalette*>(this)->registerColorGroup(group, groupTag);
287 return group;
288}
289
290QQuickColorGroup::GroupPtr QQuickPalette::findColorGroup(QPalette::ColorGroup groupTag) const
291{
293 return m_colorGroups[groupTag];
294}
295
296void QQuickPalette::registerColorGroup(QQuickColorGroup *group, QPalette::ColorGroup groupTag)
297{
299 auto &g = m_colorGroups[groupTag];
300 if (g) {
301 Q_ASSERT(g != group);
302 g->deleteLater();
303 }
304 g = group;
305
306 group->setGroupTag(groupTag);
307
309}
310
311bool QQuickPalette::isValidColorGroup(QPalette::ColorGroup groupTag,
312 const QQuickColorGroup::GroupPtr &colorGroup) const
313{
314 if (!colorGroup) {
315 qWarning("Color group cannot be null.");
316 return false;
317 }
318
319 if (!colorGroup->parent()) {
320 qWarning("Color group should have a parent.");
321 return false;
322 }
323
324 if (colorGroup->parent() && !qobject_cast<QQuickPalette*>(colorGroup->parent())) {
325 qWarning("Color group should be a part of QQuickPalette.");
326 return false;
327 }
328
329 if (groupTag == defaultGroupTag()) {
330 qWarning("Register %i color group is not allowed."
331 " QQuickPalette is %i color group itself.", groupTag, groupTag);
332 return false;
333 }
334
335 if (findColorGroup(groupTag) == colorGroup) {
336 qWarning("The color group is already a part of the current palette.");
337 return false;
338 }
339
340 return true;
341}
342
344
345#include "moc_qquickpalette_p.cpp"
DarwinBluetooth::LECBManagerNotifier * notifier
\inmodule QtCore
Definition qobject.h:103
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2960
The QPalette class contains color groups for each widget state.
Definition qpalette.h:19
ColorGroup
\value Disabled \value Active \value Inactive \value Normal synonym for Active
Definition qpalette.h:49
@ Current
Definition qpalette.h:49
@ Inactive
Definition qpalette.h:49
@ Disabled
Definition qpalette.h:49
@ NColorGroups
Definition qpalette.h:49
QPalette::ColorGroup groupTag() const
static QQuickColorGroup * createWithParent(QQuickPalette &parent)
const QQuickPaletteColorProvider & colorProvider() const
static constexpr QPalette::ColorGroup defaultGroupTag()
const QQuickAbstractPaletteProvider * paletteProvider() const
void setPaletteProvider(const QQuickAbstractPaletteProvider *paletteProvider)
Contains color groups for each QML item state. \inmodule QtQuick.
void setDisabled(QQuickColorGroup *disabled)
void setInactive(QQuickColorGroup *inactive)
void activeChanged()
QQuickColorGroup * disabled
QPalette::ColorGroup currentColorGroup() const override
void disabledChanged()
void inactiveChanged()
void inheritPalette(const QPalette &palette)
void setPaletteProvider(const QQuickAbstractPaletteProvider *paletteProvider)
void setActive(QQuickColorGroup *active)
QQuickColorGroup * inactive
QQuickColorGroup * active
QPalette toQPalette() const
void setCurrentGroup(QPalette::ColorGroup currentGroup)
void fromQPalette(QPalette palette)
QQuickPalette(QObject *parent=nullptr)
\qmltype Palette \instantiates QQuickPalette \inherits QQuickColorGroup \inqmlmodule QtQuick
const QQuickAbstractPaletteProvider * paletteProvider() const
Combined button and popup list for selecting options.
#define qWarning
Definition qlogging.h:166
GLboolean GLuint group
GLboolean GLboolean g
static QT_BEGIN_NAMESPACE constexpr bool is_valid(QPalette::ColorGroup cg) noexcept
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define Q_EMIT
#define disabled