diff -r 000000000000 -r 1918ee327afb src/gui/styles/qstylefactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/gui/styles/qstylefactory.cpp Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,271 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qstylefactory.h" +#include "qstyleplugin.h" +#include "private/qfactoryloader_p.h" +#include "qmutex.h" + +#include "qapplication.h" +#include "qwindowsstyle.h" +#include "qmotifstyle.h" +#include "qcdestyle.h" +#ifndef QT_NO_STYLE_PLASTIQUE +#include "qplastiquestyle.h" +#endif +#ifndef QT_NO_STYLE_CLEANLOOKS +#include "qcleanlooksstyle.h" +#endif +#ifndef QT_NO_STYLE_GTK +#include "qgtkstyle.h" +#endif +#ifndef QT_NO_STYLE_WINDOWSXP +#include "qwindowsxpstyle.h" +#endif +#ifndef QT_NO_STYLE_WINDOWSVISTA +#include "qwindowsvistastyle.h" +#endif +#ifndef QT_NO_STYLE_WINDOWSCE +#include "qwindowscestyle.h" +#endif +#ifndef QT_NO_STYLE_WINDOWSMOBILE +#include "qwindowsmobilestyle.h" +#endif +#ifndef QT_NO_STYLE_S60 +#include "qs60style.h" +#endif + +QT_BEGIN_NAMESPACE + +#if !defined(QT_NO_STYLE_MAC) && defined(Q_WS_MAC) +QT_BEGIN_INCLUDE_NAMESPACE +# include "qmacstyle_mac.h" +QT_END_INCLUDE_NAMESPACE +#endif + +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, + (QStyleFactoryInterface_iid, QLatin1String("/styles"), Qt::CaseInsensitive)) +#endif + +/*! + \class QStyleFactory + \brief The QStyleFactory class creates QStyle objects. + + \ingroup appearance + + The QStyle class is an abstract base class that encapsulates the + look and feel of a GUI. QStyleFactory creates a QStyle object + using the create() function and a key identifying the style. The + styles are either built-in or dynamically loaded from a style + plugin (see QStylePlugin). + + The valid keys can be retrieved using the keys() + function. Typically they include "windows", "motif", "cde", + "plastique" and "cleanlooks". Depending on the platform, + "windowsxp", "windowsvista" and "macintosh" may be available. + Note that keys are case insensitive. + + \sa QStyle +*/ + +/*! + Creates and returns a QStyle object that matches the given \a key, or + returns 0 if no matching style is found. + + Both built-in styles and styles from style plugins are queried for a + matching style. + + \note The keys used are case insensitive. + + \sa keys() +*/ +QStyle *QStyleFactory::create(const QString& key) +{ + QStyle *ret = 0; + QString style = key.toLower(); +#ifndef QT_NO_STYLE_WINDOWS + if (style == QLatin1String("windows")) + ret = new QWindowsStyle; + else +#endif +#ifndef QT_NO_STYLE_WINDOWSCE + if (style == QLatin1String("windowsce")) + ret = new QWindowsCEStyle; + else +#endif +#ifndef QT_NO_STYLE_WINDOWSMOBILE + if (style == QLatin1String("windowsmobile")) + ret = new QWindowsMobileStyle; + else +#endif +#ifndef QT_NO_STYLE_WINDOWSXP + if (style == QLatin1String("windowsxp")) + ret = new QWindowsXPStyle; + else +#endif +#ifndef QT_NO_STYLE_WINDOWSVISTA + if (style == QLatin1String("windowsvista")) + ret = new QWindowsVistaStyle; + else +#endif +#ifndef QT_NO_STYLE_MOTIF + if (style == QLatin1String("motif")) + ret = new QMotifStyle; + else +#endif +#ifndef QT_NO_STYLE_CDE + if (style == QLatin1String("cde")) + ret = new QCDEStyle; + else +#endif +#ifndef QT_NO_STYLE_S60 + if (style == QLatin1String("s60")) + ret = new QS60Style; + else +#endif +#ifndef QT_NO_STYLE_PLASTIQUE + if (style == QLatin1String("plastique")) + ret = new QPlastiqueStyle; + else +#endif +#ifndef QT_NO_STYLE_CLEANLOOKS + if (style == QLatin1String("cleanlooks")) + ret = new QCleanlooksStyle; + else +#endif +#ifndef QT_NO_STYLE_GTK + if (style == QLatin1String("gtk") || style == QLatin1String("gtk+")) + ret = new QGtkStyle; + else +#endif +#ifndef QT_NO_STYLE_MAC + if (style.startsWith(QLatin1String("macintosh"))) { + ret = new QMacStyle; +# ifdef Q_WS_MAC + if (style == QLatin1String("macintosh")) + style += QLatin1String(" (aqua)"); +# endif + } else +#endif + { } // Keep these here - they make the #ifdefery above work +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) + if(!ret) { + if (QStyleFactoryInterface *factory = qobject_cast(loader()->instance(style))) + ret = factory->create(style); + } +#endif + if(ret) + ret->setObjectName(style); + return ret; +} + +/*! + Returns the list of valid keys, i.e. the keys this factory can + create styles for. + + \sa create() +*/ +QStringList QStyleFactory::keys() +{ +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) + QStringList list = loader()->keys(); +#else + QStringList list; +#endif +#ifndef QT_NO_STYLE_WINDOWS + if (!list.contains(QLatin1String("Windows"))) + list << QLatin1String("Windows"); +#endif +#ifndef QT_NO_STYLE_WINDOWSCE + if (!list.contains(QLatin1String("WindowsCE"))) + list << QLatin1String("WindowsCE"); +#endif +#ifndef QT_NO_STYLE_WINDOWSMOBILE + if (!list.contains(QLatin1String("WindowsMobile"))) + list << QLatin1String("WindowsMobile"); +#endif +#ifndef QT_NO_STYLE_WINDOWSXP + if (!list.contains(QLatin1String("WindowsXP")) && + (QSysInfo::WindowsVersion >= QSysInfo::WV_XP && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + list << QLatin1String("WindowsXP"); +#endif +#ifndef QT_NO_STYLE_WINDOWSVISTA + if (!list.contains(QLatin1String("WindowsVista")) && + (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + list << QLatin1String("WindowsVista"); +#endif +#ifndef QT_NO_STYLE_MOTIF + if (!list.contains(QLatin1String("Motif"))) + list << QLatin1String("Motif"); +#endif +#ifndef QT_NO_STYLE_CDE + if (!list.contains(QLatin1String("CDE"))) + list << QLatin1String("CDE"); +#endif +#ifndef QT_NO_STYLE_S60 + if (!list.contains(QLatin1String("S60"))) + list << QLatin1String("S60"); +#endif +#ifndef QT_NO_STYLE_PLASTIQUE + if (!list.contains(QLatin1String("Plastique"))) + list << QLatin1String("Plastique"); +#endif +#ifndef QT_NO_STYLE_GTK + if (!list.contains(QLatin1String("GTK+"))) + list << QLatin1String("GTK+"); +#endif +#ifndef QT_NO_STYLE_CLEANLOOKS + if (!list.contains(QLatin1String("Cleanlooks"))) + list << QLatin1String("Cleanlooks"); +#endif +#ifndef QT_NO_STYLE_MAC + QString mstyle = QLatin1String("Macintosh"); +# ifdef Q_WS_MAC + mstyle += QLatin1String(" (aqua)"); +# endif + if (!list.contains(mstyle)) + list << mstyle; +#endif + return list; +} + +QT_END_NAMESPACE