summaryrefslogtreecommitdiffstats
path: root/src/styles/qstylefactory.cpp
diff options
context:
space:
mode:
authorTimothy Pearson <[email protected]>2011-07-10 15:24:15 -0500
committerTimothy Pearson <[email protected]>2011-07-10 15:24:15 -0500
commitbd0f3345a938b35ce6a12f6150373b0955b8dd12 (patch)
tree7a520322212d48ebcb9fbe1087e7fca28b76185c /src/styles/qstylefactory.cpp
downloadqt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.tar.gz
qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.zip
Add Qt3 development HEAD version
Diffstat (limited to 'src/styles/qstylefactory.cpp')
-rw-r--r--src/styles/qstylefactory.cpp268
1 files changed, 268 insertions, 0 deletions
diff --git a/src/styles/qstylefactory.cpp b/src/styles/qstylefactory.cpp
new file mode 100644
index 0000000..dab4c99
--- /dev/null
+++ b/src/styles/qstylefactory.cpp
@@ -0,0 +1,268 @@
+/****************************************************************************
+**
+** Implementation of QStyleFactory class
+**
+** Created : 001103
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of the widgets module of the Qt GUI Toolkit.
+**
+** This file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free
+** Software Foundation and appearing in the files LICENSE.GPL2
+** and LICENSE.GPL3 included in the packaging of this file.
+** Alternatively you may (at your option) use any later version
+** of the GNU General Public License if such license has been
+** publicly approved by Trolltech ASA (or its successors, if any)
+** and the KDE Free Qt Foundation.
+**
+** Please review the following information to ensure GNU General
+** Public Licensing requirements will be met:
+** http://trolltech.com/products/qt/licenses/licensing/opensource/.
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
+** or contact the sales department at [email protected].
+**
+** This file may be used under the terms of the Q Public License as
+** defined by Trolltech ASA and appearing in the file LICENSE.QPL
+** included in the packaging of this file. Licensees holding valid Qt
+** Commercial licenses may use this file in accordance with the Qt
+** Commercial License Agreement provided with the Software.
+**
+** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
+** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
+** herein.
+**
+**********************************************************************/
+
+#include "qstyleinterface_p.h" // up here for GCC 2.7.* compatibility
+#include "qstylefactory.h"
+
+#ifndef QT_NO_STYLE
+
+#include "qapplication.h"
+#include "qwindowsstyle.h"
+#include "qmotifstyle.h"
+#include "qcdestyle.h"
+#include "qmotifplusstyle.h"
+#include "qplatinumstyle.h"
+#include "qsgistyle.h"
+#include "qcompactstyle.h"
+#ifndef QT_NO_STYLE_WINDOWSXP
+#include "qwindowsxpstyle.h"
+#endif
+#ifndef QT_NO_STYLE_AQUA
+#include "qaquastyle.h"
+#endif
+#ifndef QT_NO_STYLE_POCKETPC
+#include "qpocketpcstyle_wce.h"
+#endif
+
+#if !defined( QT_NO_STYLE_MAC ) && defined( Q_WS_MAC )
+QString p2qstring(const unsigned char *c); //qglobal.cpp
+#include "qt_mac.h"
+#include "qmacstyle_mac.h"
+#endif
+#include <stdlib.h>
+
+#include <private/qpluginmanager_p.h>
+#ifndef QT_NO_COMPONENT
+class QStyleFactoryPrivate : public QObject
+{
+public:
+ QStyleFactoryPrivate();
+ ~QStyleFactoryPrivate();
+
+ static QPluginManager<QStyleFactoryInterface> *manager;
+};
+
+static QStyleFactoryPrivate *instance = 0;
+QPluginManager<QStyleFactoryInterface> *QStyleFactoryPrivate::manager = 0;
+
+QStyleFactoryPrivate::QStyleFactoryPrivate()
+: QObject( qApp )
+{
+ manager = new QPluginManager<QStyleFactoryInterface>( IID_QStyleFactory, QApplication::libraryPaths(), "/styles", FALSE );
+}
+
+QStyleFactoryPrivate::~QStyleFactoryPrivate()
+{
+ delete manager;
+ manager = 0;
+
+ instance = 0;
+}
+
+#endif //QT_NO_COMPONENT
+
+/*!
+ \class QStyleFactory qstylefactory.h
+ \brief The QStyleFactory class creates QStyle objects.
+
+ The style factory creates a QStyle object for a given key with
+ QStyleFactory::create(key).
+
+ The styles are either built-in or dynamically loaded from a style
+ plugin (see \l QStylePlugin).
+
+ QStyleFactory::keys() returns a list of valid keys, typically
+ including "Windows", "Motif", "CDE", "MotifPlus", "Platinum",
+ "SGI" and "Compact". Depending on the platform, "WindowsXP",
+ "Aqua" or "Macintosh" may be available.
+*/
+
+/*!
+ Creates a QStyle object that matches \a key case-insensitively.
+ This is either a built-in style, or a style from a style plugin.
+
+ \sa keys()
+*/
+QStyle *QStyleFactory::create( const QString& key )
+{
+ QStyle *ret = 0;
+ QString style = key.lower();
+#ifndef QT_NO_STYLE_WINDOWS
+ if ( style == "windows" )
+ ret = new QWindowsStyle;
+ else
+#endif
+#ifndef QT_NO_STYLE_WINDOWSXP
+ if ( style == "windowsxp" )
+ ret = new QWindowsXPStyle;
+ else
+#endif
+#ifndef QT_NO_STYLE_MOTIF
+ if ( style == "motif" )
+ ret = new QMotifStyle;
+ else
+#endif
+#ifndef QT_NO_STYLE_CDE
+ if ( style == "cde" )
+ ret = new QCDEStyle;
+ else
+#endif
+#ifndef QT_NO_STYLE_MOTIFPLUS
+ if ( style == "motifplus" )
+ ret = new QMotifPlusStyle;
+ else
+#endif
+#ifndef QT_NO_STYLE_PLATINUM
+ if ( style == "platinum" )
+ ret = new QPlatinumStyle;
+ else
+#endif
+#ifndef QT_NO_STYLE_SGI
+ if ( style == "sgi")
+ ret = new QSGIStyle;
+ else
+#endif
+#ifndef QT_NO_STYLE_COMPACT
+ if ( style == "compact" )
+ ret = new QCompactStyle;
+ else
+#endif
+#ifndef QT_NO_STYLE_AQUA
+ if ( style == "aqua" )
+ ret = new QAquaStyle;
+#endif
+#ifndef QT_NO_STYLE_POCKETPC
+ if ( style == "pocketpc" )
+ ret = new QPocketPCStyle;
+#endif
+#if !defined( QT_NO_STYLE_MAC ) && defined( Q_WS_MAC )
+ if( style.left(9) == "macintosh" )
+ ret = new QMacStyle;
+#endif
+ { } // Keep these here - they make the #ifdefery above work
+
+#ifndef QT_NO_COMPONENT
+ if(!ret) {
+ if ( !instance )
+ instance = new QStyleFactoryPrivate;
+
+ QInterfacePtr<QStyleFactoryInterface> iface;
+ QStyleFactoryPrivate::manager->queryInterface( style, &iface );
+
+ if ( iface )
+ ret = iface->create( style );
+ }
+ if(ret)
+ ret->setName(key);
+#endif
+ return ret;
+}
+
+#ifndef QT_NO_STRINGLIST
+/*!
+ Returns the list of keys this factory can create styles for.
+
+ \sa create()
+*/
+QStringList QStyleFactory::keys()
+{
+ QStringList list;
+#ifndef QT_NO_COMPONENT
+ if ( !instance )
+ instance = new QStyleFactoryPrivate;
+
+ list = QStyleFactoryPrivate::manager->featureList();
+#endif //QT_NO_COMPONENT
+
+#ifndef QT_NO_STYLE_WINDOWS
+ if ( !list.contains( "Windows" ) )
+ list << "Windows";
+#endif
+#ifndef QT_NO_STYLE_WINDOWSXP
+ if ( !list.contains( "WindowsXP" ) && QWindowsXPStyle::resolveSymbols() )
+ list << "WindowsXP";
+#endif
+#ifndef QT_NO_STYLE_MOTIF
+ if ( !list.contains( "Motif" ) )
+ list << "Motif";
+#endif
+#ifndef QT_NO_STYLE_CDE
+ if ( !list.contains( "CDE" ) )
+ list << "CDE";
+#endif
+#ifndef QT_NO_STYLE_MOTIFPLUS
+ if ( !list.contains( "MotifPlus" ) )
+ list << "MotifPlus";
+#endif
+#ifndef QT_NO_STYLE_PLATINUM
+ if ( !list.contains( "Platinum" ) )
+ list << "Platinum";
+#endif
+#ifndef QT_NO_STYLE_SGI
+ if ( !list.contains( "SGI" ) )
+ list << "SGI";
+#endif
+#ifndef QT_NO_STYLE_COMPACT
+ if ( !list.contains( "Compact" ) )
+ list << "Compact";
+#endif
+#ifndef QT_NO_STYLE_AQUA
+ if ( !list.contains( "Aqua" ) )
+ list << "Aqua";
+#endif
+#if !defined( QT_NO_STYLE_MAC ) && defined( Q_WS_MAC )
+ QString mstyle = "Macintosh";
+ Collection c = NewCollection();
+ if (c) {
+ GetTheme(c);
+ Str255 str;
+ long int s = 256;
+ if(!GetCollectionItem(c, kThemeNameTag, 0, &s, &str))
+ mstyle += " (" + p2qstring(str) + ")";
+ }
+ if (!list.contains(mstyle))
+ list << mstyle;
+ DisposeCollection(c);
+#endif
+
+ return list;
+}
+#endif
+#endif // QT_NO_STYLE