• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdecore
 

tdecore

  • tdecore
kprotocolinfo_tdecore.cpp
1 /* This file is part of the KDE libraries
2  Copyright (C) 1999 Torben Weis <weis@kde.org>
3 
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Library General Public
6  License version 2 as published by the Free Software Foundation.
7 
8  This library is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  Library General Public License for more details.
12 
13  You should have received a copy of the GNU Library General Public License
14  along with this library; see the file COPYING.LIB. If not, write to
15  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16  Boston, MA 02110-1301, USA.
17 */
18 
19 #ifdef MAKE_TDECORE_LIB //needed for proper linkage (win32)
20 #undef TDEIO_EXPORT
21 #define TDEIO_EXPORT KDE_EXPORT
22 #endif
23 
24 #define KPROTOCOLINFO_TDECORE
25 #include "kprotocolinfo.h"
26 #include "kprotocolinfofactory.h"
27 
28 #include <kstandarddirs.h>
29 #include <tdeglobal.h>
30 #include <tdeapplication.h>
31 #include <kdebug.h>
32 #include <ksimpleconfig.h>
33 #include <tdeconfig.h>
34 #include <kstringhandler.h>
35 
36 class KProtocolInfo::KProtocolInfoPrivate
37 {
38 public:
39  TQString docPath;
40  TQString protClass;
41  KProtocolInfo::ExtraFieldList extraFields;
42  bool showPreviews;
43  bool canRenameFromFile;
44  bool canRenameToFile;
45  bool canDeleteRecursive;
46  bool fileNameUsedForCopying; // true if using UDS_NAME, false if using KURL::fileName() [default]
47  KURL::URIMode uriMode;
48  TQStringList capabilities;
49  TQString proxyProtocol;
50 };
51 
52 //
53 // Internal functions:
54 //
55 KProtocolInfo::KProtocolInfo(const TQString &path)
56  : KSycocaEntry(path)
57 {
58  d = new KProtocolInfoPrivate;
59  TQString fullPath = locate("services", path);
60 
61  KSimpleConfig config( fullPath, true );
62  config.setGroup( "Protocol" );
63 
64  m_name = config.readEntry( "protocol" );
65  m_exec = config.readPathEntry( "exec" );
66  m_isSourceProtocol = config.readBoolEntry( "source", true );
67  m_isHelperProtocol = config.readBoolEntry( "helper", false );
68  m_supportsReading = config.readBoolEntry( "reading", false );
69  m_supportsWriting = config.readBoolEntry( "writing", false );
70  m_supportsMakeDir = config.readBoolEntry( "makedir", false );
71  m_supportsDeleting = config.readBoolEntry( "deleting", false );
72  m_supportsLinking = config.readBoolEntry( "linking", false );
73  m_supportsMoving = config.readBoolEntry( "moving", false );
74  m_canCopyFromFile = config.readBoolEntry( "copyFromFile", false );
75  m_canCopyToFile = config.readBoolEntry( "copyToFile", false );
76  d->canRenameFromFile = config.readBoolEntry( "renameFromFile", false );
77  d->canRenameToFile = config.readBoolEntry( "renameToFile", false );
78  d->canDeleteRecursive = config.readBoolEntry( "deleteRecursive", false );
79  d->fileNameUsedForCopying = config.readEntry( "fileNameUsedForCopying", "FromURL" ) == "Name";
80 
81  m_listing = config.readListEntry( "listing" );
82  // Many .protocol files say "Listing=false" when they really mean "Listing=" (i.e. unsupported)
83  if ( m_listing.count() == 1 && m_listing.first() == "false" )
84  m_listing.clear();
85  m_supportsListing = ( m_listing.count() > 0 );
86  m_defaultMimetype = config.readEntry( "defaultMimetype" );
87  m_determineMimetypeFromExtension = config.readBoolEntry( "determineMimetypeFromExtension", true );
88  m_icon = config.readEntry( "Icon", "unknown" );
89  m_config = config.readEntry( "config", m_name );
90  m_maxSlaves = config.readNumEntry( "maxInstances", 1);
91 
92  TQString tmp = config.readEntry( "input" );
93  if ( tmp == "filesystem" )
94  m_inputType = KProtocolInfo::T_FILESYSTEM;
95  else if ( tmp == "stream" )
96  m_inputType = KProtocolInfo::T_STREAM;
97  else
98  m_inputType = KProtocolInfo::T_NONE;
99 
100  tmp = config.readEntry( "output" );
101  if ( tmp == "filesystem" )
102  m_outputType = KProtocolInfo::T_FILESYSTEM;
103  else if ( tmp == "stream" )
104  m_outputType = KProtocolInfo::T_STREAM;
105  else
106  m_outputType = KProtocolInfo::T_NONE;
107 
108  d->docPath = config.readPathEntry( "X-DocPath" );
109  d->protClass = config.readEntry( "Class" ).lower();
110  if (d->protClass[0] != ':')
111  d->protClass.prepend(':');
112 
113  TQStringList extraNames = config.readListEntry( "ExtraNames" );
114  TQStringList extraTypes = config.readListEntry( "ExtraTypes" );
115  TQStringList::Iterator it = extraNames.begin();
116  TQStringList::Iterator typeit = extraTypes.begin();
117  for( ; it != extraNames.end() && typeit != extraTypes.end(); ++it, ++typeit ) {
118  d->extraFields.append( ExtraField( *it, *typeit ) );
119  }
120 
121  d->showPreviews = config.readBoolEntry( "ShowPreviews", d->protClass == ":local" );
122 
123  tmp = config.readEntry( "URIMode", TQString::null ).lower();
124  if (tmp == "rawuri")
125  d->uriMode = KURL::RawURI;
126  else if (tmp == "mailto")
127  d->uriMode = KURL::Mailto;
128  else if (tmp == "url")
129  d->uriMode = KURL::URL;
130  else
131  d->uriMode = KURL::Auto;
132 
133  d->capabilities = config.readListEntry( "Capabilities" );
134  d->proxyProtocol = config.readEntry( "ProxiedBy" );
135 }
136 
137 KProtocolInfo::KProtocolInfo( TQDataStream& _str, int offset) :
138  KSycocaEntry( _str, offset)
139 {
140  d = new KProtocolInfoPrivate;
141  load( _str );
142 }
143 
144 KProtocolInfo::~KProtocolInfo()
145 {
146  delete d;
147 }
148 
149 void
150 KProtocolInfo::load( TQDataStream& _str)
151 {
152  // You may add new fields at the end. Make sure to update the version
153  // number in tdesycoca.h
154  TQ_INT32 i_inputType, i_outputType;
155  TQ_INT8 i_isSourceProtocol, i_isHelperProtocol,
156  i_supportsListing, i_supportsReading,
157  i_supportsWriting, i_supportsMakeDir,
158  i_supportsDeleting, i_supportsLinking,
159  i_supportsMoving, i_determineMimetypeFromExtension,
160  i_canCopyFromFile, i_canCopyToFile, i_showPreviews,
161  i_uriMode, i_canRenameFromFile, i_canRenameToFile,
162  i_canDeleteRecursive, i_fileNameUsedForCopying;
163 
164  _str >> m_name >> m_exec >> m_listing >> m_defaultMimetype
165  >> i_determineMimetypeFromExtension
166  >> m_icon
167  >> i_inputType >> i_outputType
168  >> i_isSourceProtocol >> i_isHelperProtocol
169  >> i_supportsListing >> i_supportsReading
170  >> i_supportsWriting >> i_supportsMakeDir
171  >> i_supportsDeleting >> i_supportsLinking
172  >> i_supportsMoving
173  >> i_canCopyFromFile >> i_canCopyToFile
174  >> m_config >> m_maxSlaves >> d->docPath >> d->protClass
175  >> d->extraFields >> i_showPreviews >> i_uriMode
176  >> d->capabilities >> d->proxyProtocol
177  >> i_canRenameFromFile >> i_canRenameToFile
178  >> i_canDeleteRecursive >> i_fileNameUsedForCopying;
179 
180  m_inputType = (Type) i_inputType;
181  m_outputType = (Type) i_outputType;
182  m_isSourceProtocol = (i_isSourceProtocol != 0);
183  m_isHelperProtocol = (i_isHelperProtocol != 0);
184  m_supportsListing = (i_supportsListing != 0);
185  m_supportsReading = (i_supportsReading != 0);
186  m_supportsWriting = (i_supportsWriting != 0);
187  m_supportsMakeDir = (i_supportsMakeDir != 0);
188  m_supportsDeleting = (i_supportsDeleting != 0);
189  m_supportsLinking = (i_supportsLinking != 0);
190  m_supportsMoving = (i_supportsMoving != 0);
191  m_canCopyFromFile = (i_canCopyFromFile != 0);
192  m_canCopyToFile = (i_canCopyToFile != 0);
193  d->canRenameFromFile = (i_canRenameFromFile != 0);
194  d->canRenameToFile = (i_canRenameToFile != 0);
195  d->canDeleteRecursive = (i_canDeleteRecursive != 0);
196  d->fileNameUsedForCopying = (i_fileNameUsedForCopying != 0);
197  m_determineMimetypeFromExtension = (i_determineMimetypeFromExtension != 0);
198  d->showPreviews = (i_showPreviews != 0);
199  d->uriMode = (KURL::URIMode) i_uriMode;
200 }
201 
202 void
203 KProtocolInfo::save( TQDataStream& _str)
204 {
205  KSycocaEntry::save( _str );
206 
207  // You may add new fields at the end. Make sure to update the version
208  // number in tdesycoca.h
209  TQ_INT32 i_inputType, i_outputType;
210  TQ_INT8 i_isSourceProtocol, i_isHelperProtocol,
211  i_supportsListing, i_supportsReading,
212  i_supportsWriting, i_supportsMakeDir,
213  i_supportsDeleting, i_supportsLinking,
214  i_supportsMoving, i_determineMimetypeFromExtension,
215  i_canCopyFromFile, i_canCopyToFile, i_showPreviews,
216  i_uriMode, i_canRenameFromFile, i_canRenameToFile,
217  i_canDeleteRecursive, i_fileNameUsedForCopying;
218 
219  i_inputType = (TQ_INT32) m_inputType;
220  i_outputType = (TQ_INT32) m_outputType;
221  i_isSourceProtocol = m_isSourceProtocol ? 1 : 0;
222  i_isHelperProtocol = m_isHelperProtocol ? 1 : 0;
223  i_supportsListing = m_supportsListing ? 1 : 0;
224  i_supportsReading = m_supportsReading ? 1 : 0;
225  i_supportsWriting = m_supportsWriting ? 1 : 0;
226  i_supportsMakeDir = m_supportsMakeDir ? 1 : 0;
227  i_supportsDeleting = m_supportsDeleting ? 1 : 0;
228  i_supportsLinking = m_supportsLinking ? 1 : 0;
229  i_supportsMoving = m_supportsMoving ? 1 : 0;
230  i_canCopyFromFile = m_canCopyFromFile ? 1 : 0;
231  i_canCopyToFile = m_canCopyToFile ? 1 : 0;
232  i_canRenameFromFile = d->canRenameFromFile ? 1 : 0;
233  i_canRenameToFile = d->canRenameToFile ? 1 : 0;
234  i_canDeleteRecursive = d->canDeleteRecursive ? 1 : 0;
235  i_fileNameUsedForCopying = d->fileNameUsedForCopying ? 1 : 0;
236  i_determineMimetypeFromExtension = m_determineMimetypeFromExtension ? 1 : 0;
237  i_showPreviews = d->showPreviews ? 1 : 0;
238  i_uriMode = d->uriMode;
239 
240  _str << m_name << m_exec << m_listing << m_defaultMimetype
241  << i_determineMimetypeFromExtension
242  << m_icon
243  << i_inputType << i_outputType
244  << i_isSourceProtocol << i_isHelperProtocol
245  << i_supportsListing << i_supportsReading
246  << i_supportsWriting << i_supportsMakeDir
247  << i_supportsDeleting << i_supportsLinking
248  << i_supportsMoving
249  << i_canCopyFromFile << i_canCopyToFile
250  << m_config << m_maxSlaves << d->docPath << d->protClass
251  << d->extraFields << i_showPreviews << i_uriMode
252  << d->capabilities << d->proxyProtocol
253  << i_canRenameFromFile << i_canRenameToFile
254  << i_canDeleteRecursive << i_fileNameUsedForCopying;
255 }
256 
257 
258 //
259 // Static functions:
260 //
261 
262 TQStringList KProtocolInfo::protocols()
263 {
264  return KProtocolInfoFactory::self()->protocols();
265 }
266 
267 bool KProtocolInfo::isSourceProtocol( const TQString& _protocol )
268 {
269  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
270  if ( !prot )
271  return false;
272 
273  return prot->m_isSourceProtocol;
274 }
275 
276 bool KProtocolInfo::isFilterProtocol( const TQString& _protocol )
277 {
278  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
279  if ( !prot )
280  return false;
281 
282  return !prot->m_isSourceProtocol;
283 }
284 
285 bool KProtocolInfo::isHelperProtocol( const TQString& _protocol )
286 {
287  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
288  if ( !prot )
289  return false;
290 
291  return prot->m_isHelperProtocol;
292 }
293 
294 bool KProtocolInfo::isKnownProtocol( const TQString& _protocol )
295 {
296  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
297  return ( prot != 0);
298 }
299 
300 bool KProtocolInfo::supportsListing( const TQString& _protocol )
301 {
302  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
303  if ( !prot )
304  return false;
305 
306  return prot->m_supportsListing;
307 }
308 
309 TQStringList KProtocolInfo::listing( const TQString& _protocol )
310 {
311  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
312  if ( !prot )
313  return TQStringList();
314 
315  return prot->m_listing;
316 }
317 
318 bool KProtocolInfo::supportsReading( const TQString& _protocol )
319 {
320  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
321  if ( !prot )
322  return false;
323 
324  return prot->m_supportsReading;
325 }
326 
327 bool KProtocolInfo::supportsWriting( const TQString& _protocol )
328 {
329  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
330  if ( !prot )
331  return false;
332 
333  return prot->m_supportsWriting;
334 }
335 
336 bool KProtocolInfo::supportsMakeDir( const TQString& _protocol )
337 {
338  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
339  if ( !prot )
340  return false;
341 
342  return prot->m_supportsMakeDir;
343 }
344 
345 bool KProtocolInfo::supportsDeleting( const TQString& _protocol )
346 {
347  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
348  if ( !prot )
349  return false;
350 
351  return prot->m_supportsDeleting;
352 }
353 
354 bool KProtocolInfo::supportsLinking( const TQString& _protocol )
355 {
356  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
357  if ( !prot )
358  return false;
359 
360  return prot->m_supportsLinking;
361 }
362 
363 bool KProtocolInfo::supportsMoving( const TQString& _protocol )
364 {
365  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
366  if ( !prot )
367  return false;
368 
369  return prot->m_supportsMoving;
370 }
371 
372 bool KProtocolInfo::canCopyFromFile( const TQString& _protocol )
373 {
374  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
375  if ( !prot )
376  return false;
377 
378  return prot->m_canCopyFromFile;
379 }
380 
381 
382 bool KProtocolInfo::canCopyToFile( const TQString& _protocol )
383 {
384  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
385  if ( !prot )
386  return false;
387 
388  return prot->m_canCopyToFile;
389 }
390 
391 TQString KProtocolInfo::icon( const TQString& _protocol )
392 {
393  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
394  if ( !prot )
395  return TQString::fromLatin1("unknown");
396 
397  return prot->m_icon;
398 }
399 
400 TQString KProtocolInfo::config( const TQString& _protocol )
401 {
402  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
403  if ( !prot )
404  return TQString::null;
405 
406  return TQString("tdeio_%1rc").arg(prot->m_config);
407 }
408 
409 int KProtocolInfo::maxSlaves( const TQString& _protocol )
410 {
411  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
412  if ( !prot )
413  return 1;
414 
415  return prot->m_maxSlaves;
416 }
417 
418 TQString KProtocolInfo::defaultMimetype( const TQString& _protocol )
419 {
420  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
421  if ( !prot )
422  return TQString::null;
423 
424  return prot->m_defaultMimetype;
425 }
426 
427 bool KProtocolInfo::determineMimetypeFromExtension( const TQString &_protocol )
428 {
429  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol( _protocol );
430  if ( !prot )
431  return true;
432 
433  return prot->m_determineMimetypeFromExtension;
434 }
435 
436 TQString KProtocolInfo::exec( const TQString& _protocol )
437 {
438  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
439  if ( !prot )
440  return TQString::null;
441 
442  return prot->m_exec;
443 }
444 
445 KProtocolInfo::Type KProtocolInfo::inputType( const TQString& _protocol )
446 {
447  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
448  if ( !prot )
449  return T_NONE;
450 
451  return prot->m_inputType;
452 }
453 
454 KProtocolInfo::Type KProtocolInfo::outputType( const TQString& _protocol )
455 {
456  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
457  if ( !prot )
458  return T_NONE;
459 
460  return prot->m_outputType;
461 }
462 
463 KProtocolInfo::ExtraFieldList KProtocolInfo::extraFields( const KURL &url )
464 {
465  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(url.protocol());
466  if ( !prot )
467  return ExtraFieldList();
468 
469  return prot->d->extraFields;
470 }
471 
472 TQString KProtocolInfo::docPath( const TQString& _protocol )
473 {
474  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
475  if ( !prot )
476  return TQString::null;
477 
478  return prot->d->docPath;
479 }
480 
481 TQString KProtocolInfo::protocolClass( const TQString& _protocol )
482 {
483  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
484  if ( !prot )
485  return TQString::null;
486 
487  return prot->d->protClass;
488 }
489 
490 bool KProtocolInfo::showFilePreview( const TQString& _protocol )
491 {
492  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
493  if ( !prot )
494  return false;
495 
496  return prot->d->showPreviews;
497 }
498 
499 KURL::URIMode KProtocolInfo::uriParseMode( const TQString& _protocol )
500 {
501  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
502  if ( !prot )
503  return KURL::Auto;
504 
505  return prot->d->uriMode;
506 }
507 
508 TQStringList KProtocolInfo::capabilities( const TQString& _protocol )
509 {
510  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
511  if ( !prot )
512  return TQStringList();
513 
514  return prot->d->capabilities;
515 }
516 
517 TQString KProtocolInfo::proxiedBy( const TQString& _protocol )
518 {
519  KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
520  if ( !prot )
521  return TQString::null;
522 
523  return prot->d->proxyProtocol;
524 }
525 
526 bool KProtocolInfo::canRenameFromFile() const
527 {
528  return d->canRenameFromFile;
529 }
530 
531 bool KProtocolInfo::canRenameToFile() const
532 {
533  return d->canRenameToFile;
534 }
535 
536 bool KProtocolInfo::canDeleteRecursive() const
537 {
538  return d->canDeleteRecursive;
539 }
540 
541 KProtocolInfo::FileNameUsedForCopying KProtocolInfo::fileNameUsedForCopying() const
542 {
543  return d->fileNameUsedForCopying ? Name : FromURL;
544 }
545 
546 TQDataStream& operator>>( TQDataStream& s, KProtocolInfo::ExtraField& field ) {
547  s >> field.name;
548  s >> field.type;
549  return s;
550 }
551 
552 TQDataStream& operator<<( TQDataStream& s, const KProtocolInfo::ExtraField& field ) {
553  s << field.name;
554  s << field.type;
555  return s;
556 }
557 
558 // KURL based static functions are implemented in ../tdeio/tdeio/kprotocolinfo.cpp
559 
560 void KProtocolInfo::virtual_hook( int id, void* data )
561 { KSycocaEntry::virtual_hook( id, data ); }
562 
KURL
Represents and parses a URL.
Definition: kurl.h:127
KURL::URIMode
URIMode
Defines the type of URI we are processing.
Definition: kurl.h:152
KProtocolInfoFactory::self
static KProtocolInfoFactory * self()
The instance of the KProtocolInfoFactory.
Definition: kprotocolinfofactory.h:48
KURL::RawURI
Raw URI.
Definition: kurl.h:168
KURL::protocol
TQString protocol() const
Returns the protocol for the URL.
Definition: kurl.h:367
KURL::Auto
Automatically detected.
Definition: kurl.h:158
KSycocaEntry
Base class for all Sycoca entries.
Definition: tdesycocaentry.h:37
KURL::Mailto
Mailto URI.
Definition: kurl.h:178
KURL::URL
Standards compliant URL.
Definition: kurl.h:172
KSimpleConfig
KDE Configuration entries.
Definition: ksimpleconfig.h:41
KProtocolInfoFactory::protocols
TQStringList protocols()
Returns list of all known protocols.
Definition: kprotocolinfofactory.cpp:66

tdecore

Skip menu "tdecore"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdecore

Skip menu "tdecore"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  •     tdecore
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  • tdeioslave
  •   http
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdecore by doxygen 1.8.8
This website is maintained by Timothy Pearson.