diff options
Diffstat (limited to 'experimental/tqtinterface/qt4/src/styles/tqstylefactory.cpp')
-rw-r--r-- | experimental/tqtinterface/qt4/src/styles/tqstylefactory.cpp | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/experimental/tqtinterface/qt4/src/styles/tqstylefactory.cpp b/experimental/tqtinterface/qt4/src/styles/tqstylefactory.cpp new file mode 100644 index 000000000..42f1c2f50 --- /dev/null +++ b/experimental/tqtinterface/qt4/src/styles/tqstylefactory.cpp @@ -0,0 +1,268 @@ +/**************************************************************************** +** +** Implementation of TQStyleFactory class +** +** Created : 001103 +** +** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA. +** +** This file is part of the widgets module of the TQt 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 TQt 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 sales@trolltech.com. +** +** This file may be used under the terms of the Q Public License as +** defined by Trolltech ASA and appearing in the file LICENSE.TQPL +** included in the packaging of this file. Licensees holding valid TQt +** Commercial licenses may use this file in accordance with the TQt +** 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 "tqstyleinterface_p.h" // up here for GCC 2.7.* compatibility +#include "tqstylefactory.h" + +#ifndef TQT_NO_STYLE + +#include "tqapplication.h" +#include "tqwindowsstyle.h" +#include "tqmotifstyle.h" +#include "tqcdestyle.h" +#include "tqmotifplusstyle.h" +#include "tqplatinumstyle.h" +#include "tqsgistyle.h" +#include "tqcompactstyle.h" +#ifndef TQT_NO_STYLE_WINDOWSXP +#include "tqwindowsxpstyle.h" +#endif +#ifndef TQT_NO_STYLE_AQUA +#include "tqaquastyle.h" +#endif +#ifndef TQT_NO_STYLE_POCKETPC +#include "tqpocketpcstyle_wce.h" +#endif + +#if !defined( TQT_NO_STYLE_MAC ) && defined( TQ_WS_MAC ) +TQString p2qstring(const unsigned char *c); //qglobal.cpp +#include "tqt_mac.h" +#include "tqmacstyle_mac.h" +#endif +#include <stdlib.h> + +#include <private/tqpluginmanager_p.h> +#ifndef TQT_NO_COMPONENT +class TQStyleFactoryPrivate : public TQObject +{ +public: + TQStyleFactoryPrivate(); + ~TQStyleFactoryPrivate(); + + static TQPluginManager<TQStyleFactoryInterface> *manager; +}; + +static TQStyleFactoryPrivate *instance = 0; +TQPluginManager<TQStyleFactoryInterface> *TQStyleFactoryPrivate::manager = 0; + +TQStyleFactoryPrivate::TQStyleFactoryPrivate() +: TQObject( tqApp ) +{ + manager = new TQPluginManager<TQStyleFactoryInterface>( IID_TQStyleFactory, TQApplication::libraryPaths(), "/styles", FALSE ); +} + +TQStyleFactoryPrivate::~TQStyleFactoryPrivate() +{ + delete manager; + manager = 0; + + instance = 0; +} + +#endif //TQT_NO_COMPONENT + +/*! + \class TQStyleFactory tqstylefactory.h + \brief The TQStyleFactory class creates TQStyle objects. + + The style factory creates a TQStyle object for a given key with + TQStyleFactory::create(key). + + The styles are either built-in or dynamically loaded from a style + plugin (see \l TQStylePlugin). + + TQStyleFactory::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 TQStyle object that matches \a key case-insensitively. + This is either a built-in style, or a style from a style plugin. + + \sa keys() +*/ +TQStyle *TQStyleFactory::create( const TQString& key ) +{ + TQStyle *ret = 0; + TQString style = key.lower(); +#ifndef TQT_NO_STYLE_WINDOWS + if ( style == "windows" ) + ret = new TQWindowsStyle; + else +#endif +#ifndef TQT_NO_STYLE_WINDOWSXP + if ( style == "windowsxp" ) + ret = new TQWindowsXPStyle; + else +#endif +#ifndef TQT_NO_STYLE_MOTIF + if ( style == "motif" ) + ret = new TQMotifStyle; + else +#endif +#ifndef TQT_NO_STYLE_CDE + if ( style == "cde" ) + ret = new TQCDEStyle; + else +#endif +#ifndef TQT_NO_STYLE_MOTIFPLUS + if ( style == "motifplus" ) + ret = new TQMotifPlusStyle; + else +#endif +#ifndef TQT_NO_STYLE_PLATINUM + if ( style == "platinum" ) + ret = new TQPlatinumStyle; + else +#endif +#ifndef TQT_NO_STYLE_SGI + if ( style == "sgi") + ret = new TQSGIStyle; + else +#endif +#ifndef TQT_NO_STYLE_COMPACT + if ( style == "compact" ) + ret = new TQCompactStyle; + else +#endif +#ifndef TQT_NO_STYLE_AQUA + if ( style == "aqua" ) + ret = new TQAquaStyle; +#endif +#ifndef TQT_NO_STYLE_POCKETPC + if ( style == "pocketpc" ) + ret = new TQPocketPCStyle; +#endif +#if !defined( TQT_NO_STYLE_MAC ) && defined( TQ_WS_MAC ) + if( style.left(9) == "macintosh" ) + ret = new TQMacStyle; +#endif + { } // Keep these here - they make the #ifdefery above work + +#ifndef TQT_NO_COMPONENT + if(!ret) { + if ( !instance ) + instance = new TQStyleFactoryPrivate; + + TQInterfacePtr<TQStyleFactoryInterface> iface; + TQStyleFactoryPrivate::manager->queryInterface( style, &iface ); + + if ( iface ) + ret = iface->create( style ); + } + if(ret) + TQT_TQOBJECT(ret)->setName(key); +#endif + return ret; +} + +#ifndef TQT_NO_STRINGLIST +/*! + Returns the list of keys this factory can create styles for. + + \sa create() +*/ +TQStringList TQStyleFactory::keys() +{ + TQStringList list; +#ifndef TQT_NO_COMPONENT + if ( !instance ) + instance = new TQStyleFactoryPrivate; + + list = TQStyleFactoryPrivate::manager->featureList(); +#endif //TQT_NO_COMPONENT + +#ifndef TQT_NO_STYLE_WINDOWS + if ( !list.tqcontains( "Windows" ) ) + list << "Windows"; +#endif +#ifndef TQT_NO_STYLE_WINDOWSXP + if ( !list.tqcontains( "WindowsXP" ) && TQWindowsXPStyle::resolveSymbols() ) + list << "WindowsXP"; +#endif +#ifndef TQT_NO_STYLE_MOTIF + if ( !list.tqcontains( "Motif" ) ) + list << "Motif"; +#endif +#ifndef TQT_NO_STYLE_CDE + if ( !list.tqcontains( "CDE" ) ) + list << "CDE"; +#endif +#ifndef TQT_NO_STYLE_MOTIFPLUS + if ( !list.tqcontains( "MotifPlus" ) ) + list << "MotifPlus"; +#endif +#ifndef TQT_NO_STYLE_PLATINUM + if ( !list.tqcontains( "Platinum" ) ) + list << "Platinum"; +#endif +#ifndef TQT_NO_STYLE_SGI + if ( !list.tqcontains( "SGI" ) ) + list << "SGI"; +#endif +#ifndef TQT_NO_STYLE_COMPACT + if ( !list.tqcontains( "Compact" ) ) + list << "Compact"; +#endif +#ifndef TQT_NO_STYLE_ATQUA + if ( !list.tqcontains( "Aqua" ) ) + list << "Aqua"; +#endif +#if !defined( TQT_NO_STYLE_MAC ) && defined( TQ_WS_MAC ) + TQString 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.tqcontains(mstyle)) + list << mstyle; + DisposeCollection(c); +#endif + + return list; +} +#endif +#endif // TQT_NO_STYLE |