summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/oapplicationfactory.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/libopie2/opiecore/oapplicationfactory.h b/libopie2/opiecore/oapplicationfactory.h
index 8516565..8cb0ddd 100644
--- a/libopie2/opiecore/oapplicationfactory.h
+++ b/libopie2/opiecore/oapplicationfactory.h
@@ -25,64 +25,66 @@
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29 29
30/* 30/*
31 This work is derived from: 31 This work is derived from:
32 ---- 32 ----
33 The Loki Library 33 The Loki Library
34 Copyright (c) 2001 by Andrei Alexandrescu 34 Copyright (c) 2001 by Andrei Alexandrescu
35 This code accompanies the book: 35 This code accompanies the book:
36 Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design 36 Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design
37 Patterns Applied". Copyright (c) 2001. Addison-Wesley. 37 Patterns Applied". Copyright (c) 2001. Addison-Wesley.
38 Permission to use, copy, modify, distribute and sell this software for any 38 Permission to use, copy, modify, distribute and sell this software for any
39 purpose is hereby granted without fee, provided that the above copyright 39 purpose is hereby granted without fee, provided that the above copyright
40 notice appear in all copies and that both that copyright notice and this 40 notice appear in all copies and that both that copyright notice and this
41 permission notice appear in supporting documentation. 41 permission notice appear in supporting documentation.
42 The author or Addison-Welsey Longman make no representations about the 42 The author or Addison-Welsey Longman make no representations about the
43 suitability of this software for any purpose. It is provided "as is" 43 suitability of this software for any purpose. It is provided "as is"
44 without express or implied warranty. 44 without express or implied warranty.
45 ---- 45 ----
46 46
47 And KGenericFactor et all from Simon Hausmann <tronical@kde.org> 47 And KGenericFactor et all from Simon Hausmann <tronical@kde.org>
48 48
49*/ 49*/
50 50
51#include <qstring.h> 51#include <qstring.h>
52#include <qmetaobject.h> 52#include <qmetaobject.h>
53 53
54#include <qtopia/qcom.h> 54#include <qtopia/qcom.h>
55#include <qtopia/applicationinterface.h> 55#include <qtopia/applicationinterface.h>
56 56
57#include <opie2/odebug.h>
58
57namespace Opie { 59namespace Opie {
58namespace Core { 60namespace Core {
59 struct NullType; 61 struct NullType;
60 62
61 template <class T, class U> 63 template <class T, class U>
62 struct Typelist 64 struct Typelist
63 { 65 {
64 typedef T Head; 66 typedef T Head;
65 typedef U Tail; 67 typedef U Tail;
66 }; 68 };
67 template< 69 template<
68 typename T1 = NullType, typename T2 = NullType, typename T3 = NullType, 70 typename T1 = NullType, typename T2 = NullType, typename T3 = NullType,
69 typename T4 = NullType, typename T5 = NullType, typename T6 = NullType, 71 typename T4 = NullType, typename T5 = NullType, typename T6 = NullType,
70 typename T7 = NullType, typename T8 = NullType, typename T9 = NullType, 72 typename T7 = NullType, typename T8 = NullType, typename T9 = NullType,
71 typename T10 = NullType, typename T11 = NullType, typename T12 = NullType, 73 typename T10 = NullType, typename T11 = NullType, typename T12 = NullType,
72 typename T13 = NullType, typename T14 = NullType, typename T15 = NullType, 74 typename T13 = NullType, typename T14 = NullType, typename T15 = NullType,
73 typename T16 = NullType, typename T17 = NullType, typename T18 = NullType 75 typename T16 = NullType, typename T17 = NullType, typename T18 = NullType
74 > 76 >
75 struct MakeTypelist{ 77 struct MakeTypelist{
76 private: 78 private:
77 typedef typename MakeTypelist 79 typedef typename MakeTypelist
78 < 80 <
79 T2 , T3 , T4 , 81 T2 , T3 , T4 ,
80 T5 , T6 , T7 , 82 T5 , T6 , T7 ,
81 T8 , T9 , T10, 83 T8 , T9 , T10,
82 T11, T12, T13, 84 T11, T12, T13,
83 T14, T15, T16, 85 T14, T15, T16,
84 T17, T18 86 T17, T18
85 > 87 >
86 ::Result TailResult; 88 ::Result TailResult;
87 89
88public: 90public:
@@ -99,66 +101,71 @@ struct MakeTypelist<>
99/** 101/**
100 * To allow your application to be quick launched some one needs 102 * To allow your application to be quick launched some one needs
101 * to create the QWidget. 103 * to create the QWidget.
102 * This is this factory. Make surce your widget has static QString Widget::appName() 104 * This is this factory. Make surce your widget has static QString Widget::appName()
103 * as one of its functions. 105 * as one of its functions.
104 * 106 *
105 * This template takes one QWidget and initialized it in the form of 107 * This template takes one QWidget and initialized it in the form of
106 * MyWidget::MyWidget( QWidget* parent, const char* name, WFlags f ); 108 * MyWidget::MyWidget( QWidget* parent, const char* name, WFlags f );
107 * 109 *
108 * To use it on your app do that: 110 * To use it on your app do that:
109 * typedef OApplicationFactory<MyWidget> MyFactory; 111 * typedef OApplicationFactory<MyWidget> MyFactory;
110 * OPIE_EXPORT_APP( MyFactory ) 112 * OPIE_EXPORT_APP( MyFactory )
111 * 113 *
112 */ 114 */
113template <class Product> 115template <class Product>
114struct OApplicationFactory : public ApplicationInterface { 116struct OApplicationFactory : public ApplicationInterface {
115 QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) { 117 QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) {
116 *iface = 0; 118 *iface = 0;
117 if ( uuid == IID_QUnknown ) *iface = this; 119 if ( uuid == IID_QUnknown ) *iface = this;
118 else if ( uuid == IID_QtopiaApplication ) *iface = this; 120 else if ( uuid == IID_QtopiaApplication ) *iface = this;
119 else return QS_FALSE; 121 else return QS_FALSE;
120 (*iface)->addRef(); 122 (*iface)->addRef();
121 return QS_OK; 123 return QS_OK;
122 } 124 }
123 125
124 /* 126 /*
125 * 127 *
126 */ 128 */
127 virtual QWidget *createMainWindow( const QString& appName, QWidget* parent, 129 virtual QWidget *createMainWindow( const QString& appName, QWidget* parent,
128 const char* name, Qt::WFlags f ) { 130 const char* name, Qt::WFlags f ) {
129 if (appName == Product::appName() ) 131 if (appName == Product::appName() )
130 return new Product(parent, name, f ); 132 return new Product(parent, name, f );
131 else 133 else{
134 odebug << "Application Name = " << appName.latin1() << oendl;
135 odebug << "ProductName = " << Product::appName().latin1() << oendl;
136 odebug << "The application name is not equal to the product name!" << oendl;
137 odebug << "Please compare TARGET entry in the project file (*.pro) and the call of the OApplicationFactory< productName >" << oendl;
132 return 0l; 138 return 0l;
139 }
133 } 140 }
134 141
135 virtual QStringList applications()const { 142 virtual QStringList applications()const {
136 QStringList list; 143 QStringList list;
137 list << Product::appName() ; 144 list << Product::appName() ;
138 145
139 return list; 146 return list;
140 } 147 }
141 Q_REFCOUNT 148 Q_REFCOUNT
142 149
143}; 150};
144 151
145 152
146/* Internal */ 153/* Internal */
147 154
148template< class Product > 155template< class Product >
149struct OPrivate { 156struct OPrivate {
150 inline static QWidget *multiFactory( const QString& appName, QWidget* parent, 157 inline static QWidget *multiFactory( const QString& appName, QWidget* parent,
151 const char* name, Qt::WFlags fl ) { 158 const char* name, Qt::WFlags fl ) {
152 if ( appName == Product::appName() ) 159 if ( appName == Product::appName() )
153 return new Product( parent, name, fl ); 160 return new Product( parent, name, fl );
154 else 161 else
155 return 0; 162 return 0;
156 } 163 }
157 164
158 inline static QStringList multiString( const QStringList& _list ) { 165 inline static QStringList multiString( const QStringList& _list ) {
159 QStringList list = _list; 166 QStringList list = _list;
160 list << Product::appName(); 167 list << Product::appName();
161 return list; 168 return list;
162 } 169 }
163}; 170};
164 171