1 /****************************************************************************
2 **
3 ** Copyright (C) 2017 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL3$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or later as published by the Free
28 ** Software Foundation and appearing in the file LICENSE.GPL included in
29 ** the packaging of this file. Please review the following information to
30 ** ensure the GNU General Public License version 2.0 requirements will be
31 ** met: http://www.gnu.org/licenses/gpl-2.0.html.
32 **
33 ** $QT_END_LICENSE$
34 **
35 ****************************************************************************/
36 
37 #include "qquickstyleplugin_p.h"
38 #include "qquickstyle.h"
39 #include "qquickstyle_p.h"
40 #include "qquickstyleselector_p.h"
41 
42 QT_BEGIN_NAMESPACE
43 
44 class QQuickStylePluginPrivate
45 {
46 public:
47     mutable QScopedPointer<QQuickStyleSelector> selector;
48 };
49 
QQuickStylePlugin(QObject * parent)50 QQuickStylePlugin::QQuickStylePlugin(QObject *parent)
51     : QQmlExtensionPlugin(parent), d_ptr(new QQuickStylePluginPrivate)
52 {
53 }
54 
~QQuickStylePlugin()55 QQuickStylePlugin::~QQuickStylePlugin()
56 {
57 }
58 
name() const59 QString QQuickStylePlugin::name() const
60 {
61     return QString();
62 }
63 
initializeTheme(QQuickTheme * theme)64 void QQuickStylePlugin::initializeTheme(QQuickTheme *theme)
65 {
66     Q_UNUSED(theme);
67 }
68 
resolvedUrl(const QString & fileName) const69 QUrl QQuickStylePlugin::resolvedUrl(const QString &fileName) const
70 {
71     Q_D(const QQuickStylePlugin);
72     if (!d->selector) {
73         d->selector.reset(new QQuickStyleSelector);
74         const QString style = QQuickStyle::name();
75         if (!style.isEmpty())
76             d->selector->addSelector(style);
77 
78         const QString fallback = QQuickStylePrivate::fallbackStyle();
79         if (!fallback.isEmpty() && fallback != style)
80             d->selector->addSelector(fallback);
81 
82         const QString theme = name();
83         if (!theme.isEmpty() && theme != style)
84             d->selector->addSelector(theme);
85 
86         d->selector->setPaths(QQuickStylePrivate::stylePaths(true));
87     }
88     return d->selector->select(fileName);
89 }
90 
91 QT_END_NAMESPACE
92