summaryrefslogtreecommitdiff
path: root/libopie/oapplicationfactory.h
Side-by-side diff
Diffstat (limited to 'libopie/oapplicationfactory.h') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/oapplicationfactory.h264
1 files changed, 0 insertions, 264 deletions
diff --git a/libopie/oapplicationfactory.h b/libopie/oapplicationfactory.h
deleted file mode 100644
index ab88d80..0000000
--- a/libopie/oapplicationfactory.h
+++ b/dev/null
@@ -1,264 +0,0 @@
-/*
- This work is derived from:
- ----
- The Loki Library
- Copyright (c) 2001 by Andrei Alexandrescu
- This code accompanies the book:
- Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design
- Patterns Applied". Copyright (c) 2001. Addison-Wesley.
- Permission to use, copy, modify, distribute and sell this software for any
- purpose is hereby granted without fee, provided that the above copyright
- notice appear in all copies and that both that copyright notice and this
- permission notice appear in supporting documentation.
- The author or Addison-Welsey Longman make no representations about the
- suitability of this software for any purpose. It is provided "as is"
- without express or implied warranty.
- ----
-
- And KGenericFactor et all from Simon Hausmann <tronical@kde.org>
-
-*/
-
-#include <qstring.h>
-#include <qmetaobject.h>
-
-#include <qtopia/qcom.h>
-#include <qtopia/applicationinterface.h>
-
-namespace Opie {
- struct NullType;
-
- template <class T, class U>
- struct Typelist
- {
- typedef T Head;
- typedef U Tail;
- };
- template<
- typename T1 = NullType, typename T2 = NullType, typename T3 = NullType,
- typename T4 = NullType, typename T5 = NullType, typename T6 = NullType,
- typename T7 = NullType, typename T8 = NullType, typename T9 = NullType,
- typename T10 = NullType, typename T11 = NullType, typename T12 = NullType,
- typename T13 = NullType, typename T14 = NullType, typename T15 = NullType,
- typename T16 = NullType, typename T17 = NullType, typename T18 = NullType
- >
- struct MakeTypelist{
- private:
- typedef typename MakeTypelist
- <
- T2 , T3 , T4 ,
- T5 , T6 , T7 ,
- T8 , T9 , T10,
- T11, T12, T13,
- T14, T15, T16,
- T17, T18
- >
- ::Result TailResult;
-
-public:
- typedef Typelist<T1, TailResult> Result;
-};
-
-template<>
-struct MakeTypelist<>
-{
- typedef NullType Result;
-};
-
-}
-
-/**
- * To allow your application to be quick launched some one needs
- * to create the QWidget.
- * This is this factory. Make surce your widget has static QString Widget::appName()
- * as one of its functions.
- *
- * This template takes one QWidget and initialized it in the form of
- * MyWidget::MyWidget( QWidget* parent, const char* name, WFlags f );
- *
- * To use it on your app do that:
- * typedef OApplicationFactory<MyWidget> MyFactory;
- * OPIE_EXPORT_APP( MyFactory )
- *
- */
-template <class Product>
-struct OApplicationFactory : public ApplicationInterface {
- QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) {
- *iface = 0;
- if ( uuid == IID_QUnknown ) *iface = this;
- else if ( uuid == IID_QtopiaApplication ) *iface = this;
- else return QS_FALSE;
- (*iface)->addRef();
- return QS_OK;
- }
-
- /*
- *
- */
- virtual QWidget *createMainWindow( const QString& appName, QWidget* parent,
- const char* name, Qt::WFlags f ) {
- if (appName == Product::appName() )
- return new Product(parent, name, f );
- else
- return 0l;
- }
-
- virtual QStringList applications()const {
- QStringList list;
- list << Product::appName() ;
-
- return list;
- }
- Q_REFCOUNT
-
-};
-
-
-/* Internal */
-
-template< class Product >
-struct OPrivate {
- inline static QWidget *multiFactory( const QString& appName, QWidget* parent,
- const char* name, Qt::WFlags fl ) {
- if ( appName == Product::appName() )
- return new Product( parent, name, fl );
- else
- return 0;
- }
-
- inline static QStringList multiString( const QStringList& _list ) {
- QStringList list = _list;
- list << Product::appName();
- return list;
- }
-};
-
-template <>
-struct OPrivate<Opie::NullType > {
- inline static QWidget* multiFactory ( const QString& , QWidget* ,
- const char* , Qt::WFlags ) {
- return 0l;
- }
- inline static QStringList multiString( const QStringList& _list ) {
- return _list;
- }
-};
-
-/*
-template <>
-struct OPrivate <Opie::NullType, Opie::NullType > {
- inline static QWidget* multiFactory( const QString& , QWidget* ,
- const char* , Qt::WFlags ) {
- return 0l;
- }
-
- inline static QStringList multiString( const QStringList& _list ) {
- return _list;
- }
-};
-*/
-
-template <class Product, class ProductListTail>
-struct OPrivate< Opie::Typelist<Product, ProductListTail> > {
- inline static QWidget* multiFactory( const QString& appName, QWidget* parent,
- const char* name, Qt::WFlags fl) {
- QWidget* wid = OPrivate<Product>::multiFactory( appName, parent, name, fl );
-
- if (!wid )
- wid = OPrivate<ProductListTail>::multiFactory( appName, parent, name, fl );
-
- return wid;
- }
-
- inline static QStringList multiString( const QStringList& _list ) {
- QStringList list = _list;
-
- list = OPrivate<Product>::multiString( list );
- list = OPrivate<ProductListTail>::multiString( list );
-
- return list;
- }
-};
-
-
-
-
-
-
-
-
-/* Internal END */
-
-/*
- * If you want to export more than one Widget use that function
- * Make sure all your Widgets provide the appName() static method
- * otherwise you'll get a compiler error
- *
- * typedef Opie::MakeTypeList<MyWidget, MyDialog, MyMediaPlayer >::Result MyTypes;
- * OPIE_EXPORT_APP( OApplicationFactory<MyTypes> )
- */
-
-template<class Product, class ProductListTail>
-struct OApplicationFactory< Opie::Typelist<Product, ProductListTail > >
- : ApplicationInterface {
- QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) {
- *iface = 0;
- if ( uuid == IID_QUnknown ) *iface = this;
- else if ( uuid ==IID_QtopiaApplication ) *iface = this;
- else return QS_FALSE;
- (*iface)->addRef();
- return QS_OK;
- }
-
- QWidget* createMainWindow ( const QString& appName, QWidget* parent,
- const char* name, Qt::WFlags fl ) {
- qWarning("StringList is %s", applications().join(":").latin1() );
- return OPrivate< Opie::Typelist<Product, ProductListTail > >::multiFactory( appName, parent, name, fl );
- }
-
- QStringList applications()const {
- QStringList _list;
- return OPrivate< Opie::Typelist<Product, ProductListTail> >::multiString( _list );
- }
-
- Q_REFCOUNT
-};
-
-
-/* If the library version should be build */
-#ifdef OPIE_APP_INTERFACE
-#define OPIE_EXPORT_APP( factory ) Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( factory ) }
-#else
-
-#include <qpe/qpeapplication.h>
-
-#define OPIE_EXPORT_APP( Factory ) \
-int main( int argc, char **argv ) { \
- QPEApplication a(argc, argv ); \
- QWidget *mw = 0;\
-\
- /* method from TT */ \
- QString executableName = QString::fromLatin1( argv[0] ); \
- executableName = executableName.right(executableName.length() \
- - executableName.findRev('/') - 1); \
- \
- Factory f; \
- QStringList list = f.applications(); \
- if (list.contains(executableName) ) \
- mw = f.createMainWindow(executableName, 0, 0, 0 ); \
- else \
- mw = f.createMainWindow( list[0], 0, 0, 0 ); \
-\
- if( mw ) { \
- if ( mw->metaObject()->slotNames().contains("setDocument(const QString&)" ) ) \
- a.showMainDocumentWidget( mw ); \
- else \
- a.showMainWidget( mw ); \
-\
- int rv = a.exec(); \
- delete mw; \
- return rv; \
- }else \
- return -1; \
-}
-#endif