19 #include "kservicefactory.h"
20 #include "tdesycoca.h"
21 #include "tdesycocatype.h"
22 #include "tdesycocadict.h"
27 #include <tdelocale.h>
29 #include <tdeglobal.h>
30 #include <kstandarddirs.h>
31 #include <kstaticdeleter.h>
33 KServiceFactory::KServiceFactory()
34 : KSycocaFactory( KST_KServiceFactory )
36 m_offerListOffset = 0;
38 m_relNameDictOffset = 0;
39 m_menuIdDictOffset = 0;
47 m_relNameDictOffset = i;
49 m_offerListOffset = i;
53 m_menuIdDictOffset = i;
55 int saveOffset = m_str->device()->at();
57 m_nameDict =
new KSycocaDict(m_str, m_nameDictOffset);
59 m_relNameDict =
new KSycocaDict(m_str, m_relNameDictOffset);
61 m_menuIdDict =
new KSycocaDict(m_str, m_menuIdDictOffset);
62 saveOffset = m_str->device()->at(saveOffset);
67 m_nameDict =
new KSycocaDict();
68 m_relNameDict =
new KSycocaDict();
69 m_menuIdDict =
new KSycocaDict();
74 KServiceFactory::~KServiceFactory()
82 KServiceFactory * KServiceFactory::self()
85 _self =
new KServiceFactory();
90 KService * KServiceFactory::findServiceByName(
const TQString &_name)
92 if (!m_sycocaDict)
return 0;
98 int offset = m_sycocaDict->find_string( _name );
99 if (!offset)
return 0;
101 KService * newService = createEntry(offset);
104 if (newService && (newService->
name() != _name))
113 KService * KServiceFactory::findServiceByDesktopName(
const TQString &_name)
115 if (!m_nameDict)
return 0;
121 int offset = m_nameDict->find_string( _name );
122 if (!offset)
return 0;
124 KService * newService = createEntry(offset);
136 KService * KServiceFactory::findServiceByDesktopPath(
const TQString &_name)
138 if (!m_relNameDict)
return 0;
144 int offset = m_relNameDict->find_string( _name );
145 if (!offset)
return 0;
147 KService * newService = createEntry(offset);
159 KService * KServiceFactory::findServiceByMenuId(
const TQString &_menuId)
161 if (!m_menuIdDict)
return 0;
167 int offset = m_menuIdDict->find_string( _menuId );
168 if (!offset)
return 0;
170 KService * newService = createEntry(offset);
173 if (newService && (newService->
menuId() != _menuId))
182 KService* KServiceFactory::createEntry(
int offset)
186 TQDataStream *str = KSycoca::self()->findEntry(offset, type);
190 newEntry =
new KService(*str, offset);
194 kdError(7011) << TQString(TQString(
"KServiceFactory: unexpected object entry in KSycoca database (type = %1)").arg((
int)type)) << endl;
199 kdError(7011) <<
"KServiceFactory: corrupt object in KSycoca database!\n" << endl;
206 KService::List KServiceFactory::allServices()
208 KService::List result;
209 KSycocaEntry::List list = allEntries();
210 for( KSycocaEntry::List::Iterator it = list.begin();
216 result.append( KService::Ptr( newService ) );
221 KService::List KServiceFactory::allInitServices()
224 if (!m_str)
return list;
228 m_str->device()->at(m_initListOffset);
230 (*m_str) >> entryCount;
232 TQ_INT32 *offsetList =
new TQ_INT32[entryCount];
233 for(
int i = 0; i < entryCount; i++)
235 (*m_str) >> offsetList[i];
238 for(
int i = 0; i < entryCount; i++)
240 KService *newEntry = createEntry(offsetList[i]);
243 list.append( KService::Ptr( newEntry ) );
246 delete [] offsetList;
250 KService::List KServiceFactory::offers(
int serviceTypeOffset )
254 TQDataStream *str = m_str;
256 str->device()->at( m_offerListOffset );
258 TQ_INT32 aServiceTypeOffset;
259 TQ_INT32 aServiceOffset;
264 (*str) >> aServiceTypeOffset;
265 if ( aServiceTypeOffset )
267 (*str) >> aServiceOffset;
268 if ( aServiceTypeOffset == serviceTypeOffset )
271 int savedPos = str->device()->at();
273 KService * serv = createEntry( aServiceOffset );
275 list.append( KService::Ptr( serv ) );
277 str->device()->at( savedPos );
278 }
else if ( aServiceTypeOffset > (TQ_INT32)serviceTypeOffset )
287 KServiceFactory *KServiceFactory::_self = 0;
289 void KServiceFactory::virtual_hook(
int id,
void* data )
290 { KSycocaFactory::virtual_hook(
id, data ); }
Represent a service, i.e.
TQString desktopEntryPath() const
Returns the path to the location where the service desktop entry is stored.
bool isValid() const
Checks whether the service is valid.
TQString menuId() const
Returns the menu ID of the service desktop entry.
virtual TQString name() const
Returns the name of the service.
TQString desktopEntryName() const
Returns the filename of the service desktop entry without any extension.