summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kresources/factory.cpp100
-rw-r--r--microkde/kresources/factory.h13
2 files changed, 75 insertions, 38 deletions
diff --git a/microkde/kresources/factory.cpp b/microkde/kresources/factory.cpp
index 709cd4a..56b0ef3 100644
--- a/microkde/kresources/factory.cpp
+++ b/microkde/kresources/factory.cpp
@@ -17,35 +17,28 @@
17 17
18 You should have received a copy of the GNU Library General Public License 18 You should have received a copy of the GNU Library General Public License
19 along with this library; see the file COPYING.LIB. If not, write to 19 along with this library; see the file COPYING.LIB. If not, write to
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. 21 Boston, MA 02111-1307, USA.
22*/ 22*/
23 23
24#include <kdebug.h> 24#include <kdebug.h>
25#include <klocale.h> 25#include <klocale.h>
26#include <ksimpleconfig.h> 26#include <ksimpleconfig.h>
27#include <kstandarddirs.h> 27#include <kstandarddirs.h>
28#include <kstaticdeleter.h> 28#include <kstaticdeleter.h>
29#include <klibloader.h>
29 30
30#include <qfile.h> 31#include <qfile.h>
31 32
32#include <plugins/file/resourcefile.h>
33#include <plugins/file/resourcefileconfig.h>
34#include <plugins/dir/resourcedir.h>
35#include <plugins/dir/resourcedirconfig.h>
36//#include <plugins/ldap/resourceldap.h>
37//#include <plugins/ldap/resourceldapconfig.h>
38
39
40#include "resource.h" 33#include "resource.h"
41#include "factory.h" 34#include "factory.h"
42 35
43using namespace KRES; 36using namespace KRES;
44 37
45QDict<Factory> *Factory::mSelves = 0; 38QDict<Factory> *Factory::mSelves = 0;
46static KStaticDeleter< QDict<Factory> > staticDeleter; 39static KStaticDeleter< QDict<Factory> > staticDeleter;
47 40
48Factory *Factory::self( const QString& resourceFamily ) 41Factory *Factory::self( const QString& resourceFamily )
49{ 42{
50 kdDebug(5650) << "Factory::self()" << endl; 43 kdDebug(5650) << "Factory::self()" << endl;
51 44
@@ -73,144 +66,177 @@ Factory::Factory( const QString& resourceFamily ) :
73/*US 66/*US
74 67
75 KTrader::OfferList plugins = KTrader::self()->query( "KResources/Plugin", QString( "[X-KDE-ResourceFamily] == '%1'" ) 68 KTrader::OfferList plugins = KTrader::self()->query( "KResources/Plugin", QString( "[X-KDE-ResourceFamily] == '%1'" )
76 .arg( resourceFamily ) ); 69 .arg( resourceFamily ) );
77 KTrader::OfferList::ConstIterator it; 70 KTrader::OfferList::ConstIterator it;
78 for ( it = plugins.begin(); it != plugins.end(); ++it ) { 71 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
79 QVariant type = (*it)->property( "X-KDE-ResourceType" ); 72 QVariant type = (*it)->property( "X-KDE-ResourceType" );
80 if ( !type.toString().isEmpty() ) 73 if ( !type.toString().isEmpty() )
81 mTypeMap.insert( type.toString(), *it ); 74 mTypeMap.insert( type.toString(), *it );
82 } 75 }
83*/ 76*/
84 77
85//US !!!!!!!!!!!!!!! 78//US new
86 KRES::PluginFactoryBase* pf = (KRES::PluginFactoryBase*)new KRES::PluginFactory<KABC::ResourceFile,KABC::ResourceFileConfig>(); 79 PluginInfo* info = new PluginInfo;
87 mTypeMap.insert( "file", pf ); 80 info->library = "microkabc_file";
81 info->nameLabel = i18n( "file" );
82 info->descriptionLabel = i18n( "No description available." );
83 mTypeMap.insert( "file", info );
84
85 info = new PluginInfo;
86 info->library = "microkabc_dir";
87 info->nameLabel = i18n( "dir" );
88 info->descriptionLabel = i18n( "No description available." );
89 mTypeMap.insert( "dir", info );
90
91 info = new PluginInfo;
92 info->library = "microkabc_ldap";
93 info->nameLabel = i18n( "ldap" );
94 info->descriptionLabel = i18n( "No description available." );
95 mTypeMap.insert( "ldap", info );
96
97 //US add opie plugin only, if the library exists
98 QString libname = "microkabc_opie";
99 QString path = KLibLoader::findLibrary( QFile::encodeName( libname ) );
100 if ( !path.isEmpty() )
101 {
102 info = new PluginInfo;
103 info->library = libname;
104 info->nameLabel = i18n( "opie" );
105 info->descriptionLabel = i18n( "Opie PIM Addressbook." );
106 mTypeMap.insert( "opie", info );
107 }
108
109 //US add qtopia plugin only, if the library exists
110 libname = "microkabc_qtopia";
111 path = KLibLoader::findLibrary( QFile::encodeName( libname ) );
112 if ( !path.isEmpty() )
113 {
114 info = new PluginInfo;
115 info->library = libname;
116 info->nameLabel = i18n( "qtopia" );
117 info->descriptionLabel = i18n( "Qtopia PIM Addressbook." );
118 mTypeMap.insert( "qtopia", info );
119 }
120
88 121
89 pf = (KRES::PluginFactoryBase*)new KRES::PluginFactory<KABC::ResourceDir,KABC::ResourceDirConfig>();
90 mTypeMap.insert( "dir", pf );
91 /*
92 pf = (KRES::PluginFactoryBase*)new KRES::PluginFactory<KABC::ResourceLDAP,KABC::ResourceLDAPConfig>();
93 mTypeMap.insert( "ldap", pf );
94 */
95} 122}
96 123
97Factory::~Factory() 124Factory::~Factory()
98{ 125{
99} 126}
100 127
101QStringList Factory::typeNames() const 128QStringList Factory::typeNames() const
102{ 129{
103//US method QMap::keys() not available yet. SO collect the data manually 130//US method QMap::keys() not available yet. SO collect the data manually
104//US return mTypeMap.keys(); 131//US return mTypeMap.keys();
105 132
106 QStringList result; 133 QStringList result;
107 134
108 QMap<QString, PluginFactoryBase*>::ConstIterator it; 135 QMap<QString, PluginInfo*>::ConstIterator it;
109 for( it = mTypeMap.begin(); it != mTypeMap.end(); ++it ) { 136 for( it = mTypeMap.begin(); it != mTypeMap.end(); ++it ) {
110 result << it.key().latin1(); 137 result << it.key().latin1();
111// qDebug("Factory::typeNames() : %s ", it.key().latin1()); 138// qDebug("Factory::typeNames() : %s ", it.key().latin1());
112 139
113 } 140 }
114 return result; 141 return result;
115} 142}
116 143
117ConfigWidget *Factory::configWidget( const QString& type, QWidget *parent ) 144ConfigWidget *Factory::configWidget( const QString& type, QWidget *parent )
118{ 145{
119 if ( type.isEmpty() || !mTypeMap.contains( type ) ) 146 if ( type.isEmpty() || !mTypeMap.contains( type ) )
120 return 0; 147 return 0;
121 148
122/*US load the lib not dynamically. !! 149//US KService::Ptr ptr = mTypeMap[ type ];
123 KService::Ptr ptr = mTypeMap[ type ]; 150//US KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() );
124 KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() ); 151 PluginInfo* pi = mTypeMap[ type ];
125 if ( !factory ) { 152 KLibFactory *factory = (KLibFactory *)KLibLoader::self()->factory( pi->library.latin1() );
126 kdDebug() << "KRES::Factory::configWidget(): Factory creation failed" << endl;
127 return 0;
128 }
129*/
130 PluginFactoryBase *factory = mTypeMap[ type ];
131 if ( !factory ) { 153 if ( !factory ) {
154 qDebug("KRES::Factory::configWidget(): Factory creation failed for library %s", pi->library.latin1());
132 kdDebug() << "KRES::Factory::configWidget(): Factory creation failed" << endl; 155 kdDebug() << "KRES::Factory::configWidget(): Factory creation failed" << endl;
133 return 0; 156 return 0;
134 } 157 }
135 158
136
137 PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory ); 159 PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory );
138 160
139 if ( !pluginFactory ) { 161 if ( !pluginFactory ) {
162 qDebug("KRES::Factory::configWidget(): no plugin factory for library %s", pi->library.latin1());
140 kdDebug() << "KRES::Factory::configWidget(): no plugin factory." << endl; 163 kdDebug() << "KRES::Factory::configWidget(): no plugin factory." << endl;
141 return 0; 164 return 0;
142 } 165 }
143 166
144 ConfigWidget *wdg = pluginFactory->configWidget( parent ); 167 ConfigWidget *wdg = pluginFactory->configWidget( parent );
145 if ( !wdg ) { 168 if ( !wdg ) {
146//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl; 169//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl;
147 kdDebug() << " is not a " + mResourceFamily + " plugin." << endl; 170 qDebug("%s is not a %s plugin.", pi->library.latin1(), mResourceFamily.latin1());
148 return 0; 171 return 0;
149 } 172 }
150 return wdg; 173 return wdg;
151 174
152} 175}
153 176
154QString Factory::typeName( const QString &type ) const 177QString Factory::typeName( const QString &type ) const
155{ 178{
156 if ( type.isEmpty() || !mTypeMap.contains( type ) ) 179 if ( type.isEmpty() || !mTypeMap.contains( type ) )
157 return QString(); 180 return QString();
158 181
182
159//US KService::Ptr ptr = mTypeMap[ type ]; 183//US KService::Ptr ptr = mTypeMap[ type ];
160//US return ptr->name(); 184//US return ptr->name();
161//US I guess this is correct since we loaded the factory staticly. 185 PluginInfo* pi = mTypeMap[ type ];
162 return type; 186 return pi->nameLabel;
163 187
164} 188}
165 189
166QString Factory::typeDescription( const QString &type ) const 190QString Factory::typeDescription( const QString &type ) const
167{ 191{
168 if ( type.isEmpty() || !mTypeMap.contains( type ) ) 192 if ( type.isEmpty() || !mTypeMap.contains( type ) )
169 return QString(); 193 return QString();
170 194
171//US KService::Ptr ptr = mTypeMap[ type ]; 195//US KService::Ptr ptr = mTypeMap[ type ];
172//US return ptr->comment(); 196//US return ptr->comment();
173//US I guess this is correct since we loaded the factory staticly. 197 PluginInfo* pi = mTypeMap[ type ];
174 return type; 198 return pi->descriptionLabel;
175
176} 199}
177 200
178Resource *Factory::resource( const QString& type, const KConfig *config ) 201Resource *Factory::resource( const QString& type, const KConfig *config )
179{ 202{
180 kdDebug() << "Factory::resource( " << type << ", config)" << endl; 203 kdDebug() << "Factory::resource( " << type << ", config)" << endl;
181 204
182 if ( type.isEmpty() || !mTypeMap.contains( type ) ) 205 if ( type.isEmpty() || !mTypeMap.contains( type ) )
183 return 0; 206 return 0;
184 207
185/*US load the lib not dynamicly. !! 208/*US load the lib not dynamicly. !!
186 KService::Ptr ptr = mTypeMap[ type ]; 209 KService::Ptr ptr = mTypeMap[ type ];
187 KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() ); 210 KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() );
188 if ( !factory ) { 211 if ( !factory ) {
189 kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl; 212 kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl;
190 return 0; 213 return 0;
191 } 214 }
192*/ 215*/
193 PluginFactoryBase *factory = mTypeMap[ type ]; 216 PluginInfo* pi = mTypeMap[ type ];
217 KLibFactory *factory = (KLibFactory *)KLibLoader::self()->factory( pi->library.latin1() );
194 if ( !factory ) { 218 if ( !factory ) {
219 qDebug("KRES::Factory::resource(): Factory creation failed for library %s", pi->library.latin1());
195 kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl; 220 kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl;
196 return 0; 221 return 0;
197 } 222 }
198 223
199 PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory ); 224 PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory );
200 225
201 if ( !pluginFactory ) { 226 if ( !pluginFactory ) {
227 qDebug("KRES::Factory::resource(): no plugin factory for library %s", pi->library.latin1());
202 kdDebug() << "KRES::Factory::resource(): no plugin factory." << endl; 228 kdDebug() << "KRES::Factory::resource(): no plugin factory." << endl;
203 return 0; 229 return 0;
204 } 230 }
205 231
206 Resource *resource = pluginFactory->resource( config ); 232 Resource *resource = pluginFactory->resource( config );
207 if ( !resource ) { 233 if ( !resource ) {
208//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl; 234//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl;
209 kdDebug() << " is not a " + mResourceFamily + " plugin." << endl; 235 qDebug("%s is not a %s plugin.", pi->library.latin1(), mResourceFamily.latin1());
210 return 0; 236 return 0;
211 } 237 }
212 238
213 resource->setType( type ); 239 resource->setType( type );
214 240
215 return resource; 241 return resource;
216} 242}
diff --git a/microkde/kresources/factory.h b/microkde/kresources/factory.h
index f391bb3..ad67ab3 100644
--- a/microkde/kresources/factory.h
+++ b/microkde/kresources/factory.h
@@ -25,46 +25,56 @@
25#define KRESOURCES_FACTORY_H 25#define KRESOURCES_FACTORY_H
26 26
27#include <qdict.h> 27#include <qdict.h>
28#include <qstring.h> 28#include <qstring.h>
29 29
30#include <kconfig.h> 30#include <kconfig.h>
31 31
32 32
33#include "resource.h" 33#include "resource.h"
34 34
35namespace KRES { 35namespace KRES {
36 36
37//US
38struct PluginInfo
39{
40 QString library;
41 QString nameLabel;
42 QString descriptionLabel;
43};
44
45
37/** 46/**
38 * Class for loading resource plugins. 47 * Class for loading resource plugins.
39 * Do not use this class directly. Use ResourceManager instead 48 * Do not use this class directly. Use ResourceManager instead
40 * 49 *
41 * Example: 50 * Example:
42 * 51 *
43 * <pre> 52 * <pre>
44 * KABC::Factory<Calendar> *factory = KABC::Factory<Calendar>::self(); 53 * KABC::Factory<Calendar> *factory = KABC::Factory<Calendar>::self();
45 * 54 *
46 * QStringList list = factory->resources(); 55 * QStringList list = factory->resources();
47 * QStringList::Iterator it; 56 * QStringList::Iterator it;
48 * for ( it = list.begin(); it != list.end(); ++it ) { 57 * for ( it = list.begin(); it != list.end(); ++it ) {
49 * Resource<Calendar> *resource = factory->resource( (*it), 58 * Resource<Calendar> *resource = factory->resource( (*it),
50 * KABC::StdAddressBook::self(), 0 ); 59 * KABC::StdAddressBook::self(), 0 );
51 * // do something with resource 60 * // do something with resource
52 * } 61 * }
53 * </pre> 62 * </pre>
54 */ 63 */
55class Factory 64class Factory
56{ 65{
57 public: 66 public:
58 67
68
59 /** 69 /**
60 * Returns the global resource factory. 70 * Returns the global resource factory.
61 */ 71 */
62 static Factory *self( const QString& resourceFamily ); 72 static Factory *self( const QString& resourceFamily );
63 73
64 ~Factory(); 74 ~Factory();
65 75
66 /** 76 /**
67 * Returns the config widget for the given resource type, 77 * Returns the config widget for the given resource type,
68 * or a null pointer if resource type doesn't exist. 78 * or a null pointer if resource type doesn't exist.
69 * 79 *
70 * @param type The type of the resource, returned by @ref resources() 80 * @param type The type of the resource, returned by @ref resources()
@@ -97,17 +107,18 @@ class Factory
97 * Returns the description for a special type. 107 * Returns the description for a special type.
98 */ 108 */
99 QString typeDescription( const QString &type ) const; 109 QString typeDescription( const QString &type ) const;
100 110
101 protected: 111 protected:
102 Factory( const QString& resourceFamily ); 112 Factory( const QString& resourceFamily );
103 113
104 private: 114 private:
105 static QDict<Factory> *mSelves; 115 static QDict<Factory> *mSelves;
106 116
107 QString mResourceFamily; 117 QString mResourceFamily;
108//US QMap<QString, KService::Ptr> mTypeMap; 118//US QMap<QString, KService::Ptr> mTypeMap;
109 QMap<QString, PluginFactoryBase*> mTypeMap; 119//US lets store the pluginfo struct as value instead of a KService
120 QMap<QString, PluginInfo*> mTypeMap;
110}; 121};
111 122
112} 123}
113#endif 124#endif