summaryrefslogtreecommitdiff
path: root/libopie2
Unidiff
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/oapplicationfactory.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/libopie2/opiecore/oapplicationfactory.h b/libopie2/opiecore/oapplicationfactory.h
index 6247776..cabaf79 100644
--- a/libopie2/opiecore/oapplicationfactory.h
+++ b/libopie2/opiecore/oapplicationfactory.h
@@ -78,256 +78,258 @@ namespace Core {
78 < 78 <
79 T2 , T3 , T4 , 79 T2 , T3 , T4 ,
80 T5 , T6 , T7 , 80 T5 , T6 , T7 ,
81 T8 , T9 , T10, 81 T8 , T9 , T10,
82 T11, T12, T13, 82 T11, T12, T13,
83 T14, T15, T16, 83 T14, T15, T16,
84 T17, T18 84 T17, T18
85 > 85 >
86 ::Result TailResult; 86 ::Result TailResult;
87 87
88public: 88public:
89 typedef Typelist<T1, TailResult> Result; 89 typedef Typelist<T1, TailResult> Result;
90}; 90};
91 91
92template<> 92template<>
93struct MakeTypelist<> 93struct MakeTypelist<>
94{ 94{
95 typedef NullType Result; 95 typedef NullType Result;
96}; 96};
97 97
98 98
99/** 99/**
100 * To allow your application to be quick launched some one needs 100 * To allow your application to be quick launched some one needs
101 * to create the QWidget. 101 * to create the QWidget.
102 * This is this factory. Make surce your widget has static QString Widget::appName() 102 * This is this factory. Make surce your widget has static QString Widget::appName()
103 * as one of its functions. 103 * as one of its functions.
104 * 104 *
105 * This template takes one QWidget and initialized it in the form of 105 * This template takes one QWidget and initialized it in the form of
106 * MyWidget::MyWidget( QWidget* parent, const char* name, WFlags f ); 106 * MyWidget::MyWidget( QWidget* parent, const char* name, WFlags f );
107 * 107 *
108 * To use it on your app do that: 108 * To use it on your app do that:
109 * typedef OApplicationFactory<MyWidget> MyFactory; 109 * typedef OApplicationFactory<MyWidget> MyFactory;
110 * OPIE_EXPORT_APP( MyFactory ) 110 * OPIE_EXPORT_APP( MyFactory )
111 * 111 *
112 */ 112 */
113template <class Product> 113template <class Product>
114struct OApplicationFactory : public ApplicationInterface { 114struct OApplicationFactory : public ApplicationInterface {
115 QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) { 115 QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) {
116 *iface = 0; 116 *iface = 0;
117 if ( uuid == IID_QUnknown ) *iface = this; 117 if ( uuid == IID_QUnknown ) *iface = this;
118 else if ( uuid == IID_QtopiaApplication ) *iface = this; 118 else if ( uuid == IID_QtopiaApplication ) *iface = this;
119 else return QS_FALSE; 119 else return QS_FALSE;
120 (*iface)->addRef(); 120 (*iface)->addRef();
121 return QS_OK; 121 return QS_OK;
122 } 122 }
123 123
124 /* 124 /*
125 * 125 *
126 */ 126 */
127 virtual QWidget *createMainWindow( const QString& appName, QWidget* parent, 127 virtual QWidget *createMainWindow( const QString& appName, QWidget* parent,
128 const char* name, Qt::WFlags f ) { 128 const char* name, Qt::WFlags f ) {
129 if (appName == Product::appName() ) 129 if (appName == Product::appName() )
130 return new Product(parent, name, f ); 130 return new Product(parent, name, f );
131 else 131 else
132 return 0l; 132 return 0l;
133 } 133 }
134 134
135 virtual QStringList applications()const { 135 virtual QStringList applications()const {
136 QStringList list; 136 QStringList list;
137 list << Product::appName() ; 137 list << Product::appName() ;
138 138
139 return list; 139 return list;
140 } 140 }
141 Q_REFCOUNT 141 Q_REFCOUNT
142 142
143}; 143};
144 144
145 145
146/* Internal */ 146/* Internal */
147 147
148template< class Product > 148template< class Product >
149struct OPrivate { 149struct OPrivate {
150 inline static QWidget *multiFactory( const QString& appName, QWidget* parent, 150 inline static QWidget *multiFactory( const QString& appName, QWidget* parent,
151 const char* name, Qt::WFlags fl ) { 151 const char* name, Qt::WFlags fl ) {
152 if ( appName == Product::appName() ) 152 if ( appName == Product::appName() )
153 return new Product( parent, name, fl ); 153 return new Product( parent, name, fl );
154 else 154 else
155 return 0; 155 return 0;
156 } 156 }
157 157
158 inline static QStringList multiString( const QStringList& _list ) { 158 inline static QStringList multiString( const QStringList& _list ) {
159 QStringList list = _list; 159 QStringList list = _list;
160 list << Product::appName(); 160 list << Product::appName();
161 return list; 161 return list;
162 } 162 }
163}; 163};
164 164
165template <> 165template <>
166struct OPrivate<Opie::Core::NullType > { 166struct OPrivate<Opie::Core::NullType > {
167 inline static QWidget* multiFactory ( const QString& , QWidget* , 167 inline static QWidget* multiFactory ( const QString& , QWidget* ,
168 const char* , Qt::WFlags ) { 168 const char* , Qt::WFlags ) {
169 return 0l; 169 return 0l;
170 } 170 }
171 inline static QStringList multiString( const QStringList& _list ) { 171 inline static QStringList multiString( const QStringList& _list ) {
172 return _list; 172 return _list;
173 } 173 }
174}; 174};
175 175
176/* 176/*
177template <> 177template <>
178struct OPrivate <Opie::NullType, Opie::NullType > { 178struct OPrivate <Opie::NullType, Opie::NullType > {
179 inline static QWidget* multiFactory( const QString& , QWidget* , 179 inline static QWidget* multiFactory( const QString& , QWidget* ,
180 const char* , Qt::WFlags ) { 180 const char* , Qt::WFlags ) {
181 return 0l; 181 return 0l;
182 } 182 }
183 183
184 inline static QStringList multiString( const QStringList& _list ) { 184 inline static QStringList multiString( const QStringList& _list ) {
185 return _list; 185 return _list;
186 } 186 }
187}; 187};
188*/ 188*/
189 189
190template <class Product, class ProductListTail> 190template <class Product, class ProductListTail>
191struct OPrivate< Opie::Core::Typelist<Product, ProductListTail> > { 191struct OPrivate< Opie::Core::Typelist<Product, ProductListTail> > {
192 inline static QWidget* multiFactory( const QString& appName, QWidget* parent, 192 inline static QWidget* multiFactory( const QString& appName, QWidget* parent,
193 const char* name, Qt::WFlags fl) { 193 const char* name, Qt::WFlags fl) {
194 QWidget* wid = OPrivate<Product>::multiFactory( appName, parent, name, fl ); 194 QWidget* wid = OPrivate<Product>::multiFactory( appName, parent, name, fl );
195 195
196 if (!wid ) 196 if (!wid )
197 wid = OPrivate<ProductListTail>::multiFactory( appName, parent, name, fl ); 197 wid = OPrivate<ProductListTail>::multiFactory( appName, parent, name, fl );
198 198
199 return wid; 199 return wid;
200 } 200 }
201 201
202 inline static QStringList multiString( const QStringList& _list ) { 202 inline static QStringList multiString( const QStringList& _list ) {
203 QStringList list = _list; 203 QStringList list = _list;
204 204
205 list = OPrivate<Product>::multiString( list ); 205 list = OPrivate<Product>::multiString( list );
206 list = OPrivate<ProductListTail>::multiString( list ); 206 list = OPrivate<ProductListTail>::multiString( list );
207 207
208 return list; 208 return list;
209 } 209 }
210}; 210};
211 211
212 212
213 213
214 214
215 215
216 216
217 217
218 218
219/* Internal END */ 219/* Internal END */
220 220
221/* 221/*
222 * If you want to export more than one Widget use that function 222 * If you want to export more than one Widget use that function
223 * Make sure all your Widgets provide the appName() static method 223 * Make sure all your Widgets provide the appName() static method
224 * otherwise you'll get a compiler error 224 * otherwise you'll get a compiler error
225 * 225 *
226 * typedef Opie::MakeTypeList<MyWidget, MyDialog, MyMediaPlayer >::Result MyTypes; 226 * typedef Opie::MakeTypeList<MyWidget, MyDialog, MyMediaPlayer >::Result MyTypes;
227 * OPIE_EXPORT_APP( OApplicationFactory<MyTypes> ) 227 * OPIE_EXPORT_APP( OApplicationFactory<MyTypes> )
228 */ 228 */
229 229
230template<class Product, class ProductListTail> 230template<class Product, class ProductListTail>
231struct OApplicationFactory< Opie::Core::Typelist<Product, ProductListTail > > 231struct OApplicationFactory< Opie::Core::Typelist<Product, ProductListTail > >
232 : ApplicationInterface { 232 : ApplicationInterface {
233 QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) { 233 QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) {
234 *iface = 0; 234 *iface = 0;
235 if ( uuid == IID_QUnknown ) *iface = this; 235 if ( uuid == IID_QUnknown ) *iface = this;
236 else if ( uuid ==IID_QtopiaApplication ) *iface = this; 236 else if ( uuid ==IID_QtopiaApplication ) *iface = this;
237 else return QS_FALSE; 237 else return QS_FALSE;
238 (*iface)->addRef(); 238 (*iface)->addRef();
239 return QS_OK; 239 return QS_OK;
240 } 240 }
241 241
242 QWidget* createMainWindow ( const QString& appName, QWidget* parent, 242 QWidget* createMainWindow ( const QString& appName, QWidget* parent,
243 const char* name, Qt::WFlags fl ) { 243 const char* name, Qt::WFlags fl ) {
244 qWarning("StringList is %s", applications().join(":").latin1() ); 244 qWarning("StringList is %s", applications().join(":").latin1() );
245 return OPrivate< Opie::Core::Typelist<Product, ProductListTail > >::multiFactory( appName, parent, name, fl ); 245 return OPrivate< Opie::Core::Typelist<Product, ProductListTail > >::multiFactory( appName, parent, name, fl );
246 } 246 }
247 247
248 QStringList applications()const { 248 QStringList applications()const {
249 QStringList _list; 249 QStringList _list;
250 return OPrivate< Opie::Core::Typelist<Product, ProductListTail> >::multiString( _list ); 250 return OPrivate< Opie::Core::Typelist<Product, ProductListTail> >::multiString( _list );
251 } 251 }
252 252
253 Q_REFCOUNT 253 Q_REFCOUNT
254}; 254};
255 255
256} 256}
257} 257}
258 258
259/* If the library version should be build */ 259/* If the library version should be build */
260#ifdef OPIE_APP_INTERFACE 260#ifdef OPIE_APP_INTERFACE
261#define OPIE_EXPORT_APP( factory ) Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( factory ) } 261#define OPIE_EXPORT_APP( factory ) Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( factory ) }
262#else 262#else
263 263
264#include <qpe/qpeapplication.h> 264#include <qpe/qpeapplication.h>
265 265
266#define OPIE_EXPORT_APP( Factory ) \ 266#define OPIE_EXPORT_APP( Factory ) \
267int main( int argc, char **argv ) { \ 267int main( int argc, char **argv ) { \
268 QPEApplication a(argc, argv ); \ 268 QPEApplication a(argc, argv ); \
269 QWidget *mw = 0;\ 269 QWidget *mw = 0;\
270\ 270\
271 /* method from TT */ \ 271 /* method from TT */ \
272 QString executableName = QString::fromLatin1( argv[0] ); \ 272 QString executableName = QString::fromLatin1( argv[0] ); \
273 executableName = executableName.right(executableName.length() \ 273 executableName = executableName.right(executableName.length() \
274 - executableName.findRev('/') - 1); \ 274 - executableName.findRev('/') - 1); \
275 \ 275 \
276 Factory f; \ 276 Factory f; \
277 QStringList list = f.applications(); \ 277 QStringList list = f.applications(); \
278 if (list.contains(executableName) ) \ 278 if (list.contains(executableName) ) \
279 mw = f.createMainWindow(executableName, 0, 0, 0 ); \ 279 mw = f.createMainWindow(executableName, 0, 0, 0 ); \
280 else \ 280 else \
281 mw = f.createMainWindow( list[0], 0, 0, 0 ); \ 281 mw = f.createMainWindow( list[0], 0, 0, 0 ); \
282\ 282\
283 if( mw ) { \ 283 if( mw ) { \
284 if ( mw->metaObject()->slotNames().contains("setDocument(const QString&)" ) ) \ 284 if ( mw->metaObject()->slotNames().contains("setDocument(const QString&)" ) ) \
285 a.showMainDocumentWidget( mw ); \ 285 a.showMainDocumentWidget( mw ); \
286 else \ 286 else \
287 a.showMainWidget( mw ); \ 287 a.showMainWidget( mw ); \
288\ 288\
289 int rv = a.exec(); \ 289 int rv = a.exec(); \
290 delete mw; \ 290 delete mw; \
291 return rv; \ 291 return rv; \
292 }else \ 292 }else \
293 return -1; \ 293 return -1; \
294} 294}
295#endif 295#endif
296 296
297#ifdef OPIE_APP_INTERFACE 297#ifdef OPIE_APP_INTERFACE
298#define OPIE_EXPORT_APP_V2( factory,name ) Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( factory ) } 298#define OPIE_EXPORT_APP_V2( factory,name ) Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( factory ) }
299#else 299#else
300 300
301#include <opie2/oapplication.h> 301#include <opie2/oapplication.h>
302 302
303#define OPIE_EXPORT_APP_V2( Factory,name ) \ 303#define OPIE_EXPORT_APP_V2( Factory,name ) \
304int main( int argc, char **argv ) { \ 304int main( int argc, char **argv ) { \
305 Opie::Core::OApplication a(argc, argv, name ); \ 305 Opie::Core::OApplication a(argc, argv, name ); \
306 QWidget *mw = 0;\ 306 QWidget *mw = 0;\
307\ 307\
308 /* method from TT */ \ 308 /* method from TT */ \
309 QString executableName = QString::fromLatin1( argv[0] ); \ 309 QString executableName = QString::fromLatin1( argv[0] ); \
310 executableName = executableName.right(executableName.length() \ 310 executableName = executableName.right(executableName.length() \
311 - executableName.findRev('/') - 1); \ 311 - executableName.findRev('/') - 1); \
312 \ 312 \
313 Factory f; \ 313 Factory f; \
314 QStringList list = f.applications(); \ 314 QStringList list = f.applications(); \
315 if (list.contains(executableName) ) \ 315 if (list.contains(executableName) ) \
316 mw = f.createMainWindow(executableName, 0, 0, 0 ); \ 316 mw = f.createMainWindow(executableName, 0, 0, 0 ); \
317 else \ 317 else \
318 mw = f.createMainWindow( list[0], 0, 0, 0 ); \ 318 mw = f.createMainWindow( list[0], 0, 0, 0 ); \
319\ 319\
320 if( mw ) { \ 320 if( mw ) { \
321 if ( mw->metaObject()->slotNames().contains("setDocument(const QString&)" ) ) \ 321 if ( mw->metaObject()->slotNames().contains("setDocument(const QString&)" ) ) \
322 a.showMainDocumentWidget( mw ); \ 322 a.showMainDocumentWidget( mw ); \
323 else \ 323 else \
324 a.showMainWidget( mw ); \ 324 a.showMainWidget( mw ); \
325\ 325\
326 int rv = a.exec(); \ 326 int rv = a.exec(); \
327 delete mw; \ 327 delete mw; \
328 return rv; \ 328 return rv; \
329 }else \ 329 }else \
330 return -1; \ 330 return -1; \
331} 331}
332#endif 332#endif
333 333
334
335#define OPIE_EXPORT_APPNAME static QString appName() { return QString::fromLatin1( QUICKAPP_NAME ); }