source: trunk/src/gui/styles/qstylefactory.cpp@ 1056

Last change on this file since 1056 was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 8.1 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtGui module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include "qstylefactory.h"
43#include "qstyleplugin.h"
44#include "private/qfactoryloader_p.h"
45#include "qmutex.h"
46
47#include "qapplication.h"
48#include "qwindowsstyle.h"
49#include "qmotifstyle.h"
50#include "qcdestyle.h"
51#ifndef QT_NO_STYLE_PLASTIQUE
52#include "qplastiquestyle.h"
53#endif
54#ifndef QT_NO_STYLE_CLEANLOOKS
55#include "qcleanlooksstyle.h"
56#endif
57#ifndef QT_NO_STYLE_GTK
58#include "qgtkstyle.h"
59#endif
60#ifndef QT_NO_STYLE_WINDOWSXP
61#include "qwindowsxpstyle.h"
62#endif
63#ifndef QT_NO_STYLE_WINDOWSVISTA
64#include "qwindowsvistastyle.h"
65#endif
66#ifndef QT_NO_STYLE_WINDOWSCE
67#include "qwindowscestyle.h"
68#endif
69#ifndef QT_NO_STYLE_WINDOWSMOBILE
70#include "qwindowsmobilestyle.h"
71#endif
72#ifndef QT_NO_STYLE_S60
73#include "qs60style.h"
74#endif
75
76QT_BEGIN_NAMESPACE
77
78#if !defined(QT_NO_STYLE_MAC) && defined(Q_WS_MAC)
79QT_BEGIN_INCLUDE_NAMESPACE
80# include "qmacstyle_mac.h"
81QT_END_INCLUDE_NAMESPACE
82#endif
83
84#ifndef QT_NO_LIBRARY
85Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
86 (QStyleFactoryInterface_iid, QLatin1String("/styles"), Qt::CaseInsensitive))
87#endif
88
89/*!
90 \class QStyleFactory
91 \brief The QStyleFactory class creates QStyle objects.
92
93 \ingroup appearance
94
95 The QStyle class is an abstract base class that encapsulates the
96 look and feel of a GUI. QStyleFactory creates a QStyle object
97 using the create() function and a key identifying the style. The
98 styles are either built-in or dynamically loaded from a style
99 plugin (see QStylePlugin).
100
101 The valid keys can be retrieved using the keys()
102 function. Typically they include "windows", "motif", "cde",
103 "plastique" and "cleanlooks". Depending on the platform,
104 "windowsxp", "windowsvista" and "macintosh" may be available.
105 Note that keys are case insensitive.
106
107 \sa QStyle
108*/
109
110/*!
111 Creates and returns a QStyle object that matches the given \a key, or
112 returns 0 if no matching style is found.
113
114 Both built-in styles and styles from style plugins are queried for a
115 matching style.
116
117 \note The keys used are case insensitive.
118
119 \sa keys()
120*/
121QStyle *QStyleFactory::create(const QString& key)
122{
123 QStyle *ret = 0;
124 QString style = key.toLower();
125#ifndef QT_NO_STYLE_WINDOWS
126 if (style == QLatin1String("windows"))
127 ret = new QWindowsStyle;
128 else
129#endif
130#ifndef QT_NO_STYLE_WINDOWSCE
131 if (style == QLatin1String("windowsce"))
132 ret = new QWindowsCEStyle;
133 else
134#endif
135#ifndef QT_NO_STYLE_WINDOWSMOBILE
136 if (style == QLatin1String("windowsmobile"))
137 ret = new QWindowsMobileStyle;
138 else
139#endif
140#ifndef QT_NO_STYLE_WINDOWSXP
141 if (style == QLatin1String("windowsxp"))
142 ret = new QWindowsXPStyle;
143 else
144#endif
145#ifndef QT_NO_STYLE_WINDOWSVISTA
146 if (style == QLatin1String("windowsvista"))
147 ret = new QWindowsVistaStyle;
148 else
149#endif
150#ifndef QT_NO_STYLE_MOTIF
151 if (style == QLatin1String("motif"))
152 ret = new QMotifStyle;
153 else
154#endif
155#ifndef QT_NO_STYLE_CDE
156 if (style == QLatin1String("cde"))
157 ret = new QCDEStyle;
158 else
159#endif
160#ifndef QT_NO_STYLE_S60
161 if (style == QLatin1String("s60"))
162 ret = new QS60Style;
163 else
164#endif
165#ifndef QT_NO_STYLE_PLASTIQUE
166 if (style == QLatin1String("plastique"))
167 ret = new QPlastiqueStyle;
168 else
169#endif
170#ifndef QT_NO_STYLE_CLEANLOOKS
171 if (style == QLatin1String("cleanlooks"))
172 ret = new QCleanlooksStyle;
173 else
174#endif
175#ifndef QT_NO_STYLE_GTK
176 if (style == QLatin1String("gtk") || style == QLatin1String("gtk+"))
177 ret = new QGtkStyle;
178 else
179#endif
180#ifndef QT_NO_STYLE_MAC
181 if (style.startsWith(QLatin1String("macintosh"))) {
182 ret = new QMacStyle;
183# ifdef Q_WS_MAC
184 if (style == QLatin1String("macintosh"))
185 style += QLatin1String(" (aqua)");
186# endif
187 } else
188#endif
189 { } // Keep these here - they make the #ifdefery above work
190#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
191 if(!ret) {
192 if (QStyleFactoryInterface *factory = qobject_cast<QStyleFactoryInterface*>(loader()->instance(style)))
193 ret = factory->create(style);
194 }
195#endif
196 if(ret)
197 ret->setObjectName(style);
198 return ret;
199}
200
201/*!
202 Returns the list of valid keys, i.e. the keys this factory can
203 create styles for.
204
205 \sa create()
206*/
207QStringList QStyleFactory::keys()
208{
209#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
210 QStringList list = loader()->keys();
211#else
212 QStringList list;
213#endif
214#ifndef QT_NO_STYLE_WINDOWS
215 if (!list.contains(QLatin1String("Windows")))
216 list << QLatin1String("Windows");
217#endif
218#ifndef QT_NO_STYLE_WINDOWSCE
219 if (!list.contains(QLatin1String("WindowsCE")))
220 list << QLatin1String("WindowsCE");
221#endif
222#ifndef QT_NO_STYLE_WINDOWSMOBILE
223 if (!list.contains(QLatin1String("WindowsMobile")))
224 list << QLatin1String("WindowsMobile");
225#endif
226#ifndef QT_NO_STYLE_WINDOWSXP
227 if (!list.contains(QLatin1String("WindowsXP")) &&
228 (QSysInfo::WindowsVersion >= QSysInfo::WV_XP && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based))
229 list << QLatin1String("WindowsXP");
230#endif
231#ifndef QT_NO_STYLE_WINDOWSVISTA
232 if (!list.contains(QLatin1String("WindowsVista")) &&
233 (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based))
234 list << QLatin1String("WindowsVista");
235#endif
236#ifndef QT_NO_STYLE_MOTIF
237 if (!list.contains(QLatin1String("Motif")))
238 list << QLatin1String("Motif");
239#endif
240#ifndef QT_NO_STYLE_CDE
241 if (!list.contains(QLatin1String("CDE")))
242 list << QLatin1String("CDE");
243#endif
244#ifndef QT_NO_STYLE_S60
245 if (!list.contains(QLatin1String("S60")))
246 list << QLatin1String("S60");
247#endif
248#ifndef QT_NO_STYLE_PLASTIQUE
249 if (!list.contains(QLatin1String("Plastique")))
250 list << QLatin1String("Plastique");
251#endif
252#ifndef QT_NO_STYLE_GTK
253 if (!list.contains(QLatin1String("GTK+")))
254 list << QLatin1String("GTK+");
255#endif
256#ifndef QT_NO_STYLE_CLEANLOOKS
257 if (!list.contains(QLatin1String("Cleanlooks")))
258 list << QLatin1String("Cleanlooks");
259#endif
260#ifndef QT_NO_STYLE_MAC
261 QString mstyle = QLatin1String("Macintosh");
262# ifdef Q_WS_MAC
263 mstyle += QLatin1String(" (aqua)");
264# endif
265 if (!list.contains(mstyle))
266 list << mstyle;
267#endif
268 return list;
269}
270
271QT_END_NAMESPACE
Note: See TracBrowser for help on using the repository browser.