summaryrefslogtreecommitdiffstats
path: root/experimental/tqtinterface/qt4/src/styles/tqstylefactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/tqtinterface/qt4/src/styles/tqstylefactory.cpp')
-rw-r--r--experimental/tqtinterface/qt4/src/styles/tqstylefactory.cpp268
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