KParts
componentfactory.h
Go to the documentation of this file.00001 #ifndef __kparts_componentfactory_h__
00002 #define __kparts_componentfactory_h__
00003
00004 #include <kparts/factory.h>
00005 #include <kparts/part.h>
00006 #include <kservicetypetrader.h>
00007 #include <klibloader.h>
00008 #include <kmimetypetrader.h>
00009
00010 namespace KParts
00011 {
00012 namespace ComponentFactory
00013 {
00033 template <class T>
00034 KDE_DEPRECATED T *createPartInstanceFromFactory( KParts::Factory *factory,
00035 QWidget *parentWidget = 0,
00036 QObject *parent = 0,
00037 const QStringList &args = QStringList() )
00038 {
00039 KParts::Part *object = factory->createPart( parentWidget,
00040 parent,
00041 T::staticMetaObject.className(),
00042 args );
00043
00044 T *result = dynamic_cast<T *>( object );
00045 if ( !result )
00046 delete object;
00047 return result;
00048 }
00049
00050
00051
00052 template <class T>
00053 KDE_DEPRECATED T *createPartInstanceFromLibrary( const char *libraryName,
00054 QWidget *parentWidget = 0,
00055 QObject *parent = 0,
00056 const QStringList &args = QStringList(),
00057 int *error = 0 )
00058 {
00059 KLibrary *library = KLibLoader::self()->library( libraryName );
00060 if ( !library )
00061 {
00062 if ( error )
00063 *error = KLibLoader::ErrNoLibrary;
00064 return 0;
00065 }
00066 KLibFactory *factory = library->factory();
00067 if ( !factory )
00068 {
00069 library->unload();
00070 if ( error )
00071 *error = KLibLoader::ErrNoFactory;
00072 return 0;
00073 }
00074 KParts::Factory *partFactory = dynamic_cast<KParts::Factory *>( factory );
00075 if ( !partFactory )
00076 {
00077 library->unload();
00078 if ( error )
00079 *error = KLibLoader::ErrNoFactory;
00080 return 0;
00081 }
00082 T *res = createPartInstanceFromFactory<T>( partFactory, parentWidget,
00083 parent, args );
00084 if ( !res )
00085 {
00086 library->unload();
00087 if ( error )
00088 *error = KLibLoader::ErrNoComponent;
00089 }
00090 return res;
00091 }
00092
00096 template <class T>
00097 KDE_DEPRECATED T *createPartInstanceFromService( const KService::Ptr &service,
00098 QWidget *parentWidget = 0,
00099 QObject *parent = 0,
00100 const QStringList &args = QStringList(),
00101 int *error = 0 )
00102 {
00103 QString library = service->library();
00104 if ( library.isEmpty() )
00105 {
00106 if ( error )
00107 *error = KLibLoader::ErrServiceProvidesNoLibrary;
00108 return 0;
00109 }
00110
00111 return createPartInstanceFromLibrary<T>( library.toLocal8Bit().data(), parentWidget,
00112 parent, args, error );
00113 }
00114
00115 template <class T, class ServiceIterator>
00116 KDE_DEPRECATED T *createPartInstanceFromServices( ServiceIterator begin,
00117 ServiceIterator end,
00118 QWidget *parentWidget = 0,
00119 QObject *parent = 0,
00120 const QStringList &args = QStringList(),
00121 int *error = 0 )
00122 {
00123 for (; begin != end; ++begin )
00124 {
00125 KService::Ptr service = *begin;
00126
00127 if ( error )
00128 *error = 0;
00129
00130 T *component = createPartInstanceFromService<T>( service, parentWidget,
00131 parent, args, error );
00132 if ( component )
00133 return component;
00134 }
00135
00136 if ( error )
00137 *error = KLibLoader::ErrNoServiceFound;
00138
00139 return 0;
00140
00141 }
00142
00171 template <class T>
00172 T *createPartInstanceFromQuery( const QString &mimeType,
00173 const QString &constraint,
00174 QWidget *parentWidget = 0,
00175 QObject *parent = 0,
00176 const QStringList &args = QStringList(),
00177 int *error = 0 )
00178 {
00179 const KService::List offers = KMimeTypeTrader::self()->query( mimeType, QLatin1String("KParts/ReadOnlyPart"), constraint );
00180 if ( offers.isEmpty() )
00181 {
00182 if ( error )
00183 *error = KLibLoader::ErrNoServiceFound;
00184 return 0;
00185 }
00186
00187 return createPartInstanceFromServices<T>( offers.begin(), offers.end(),
00188 parentWidget,
00189 parent, args, error );
00190 }
00191
00192 }
00193 }
00194
00195
00196
00197
00198
00199 #endif