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

tdeui

  • tdeui
ksyntaxhighlighter.cpp
1/*
2 ksyntaxhighlighter.cpp
3
4 Copyright (c) 2003 Trolltech AS
5 Copyright (c) 2003 Scott Wheeler <wheeler@kde.org>
6
7 This file is part of the KDE libraries
8
9 This library is free software; you can redistribute it and/or
10 modify it under the terms of the GNU Library General Public
11 License version 2 as published by the Free Software Foundation.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details.
17
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
20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA.
22*/
23
24#include <tqcolor.h>
25#include <tqregexp.h>
26#include <tqsyntaxhighlighter.h>
27#include <tqtimer.h>
28
29#include <tdelocale.h>
30#include <tdeconfig.h>
31#include <kdebug.h>
32#include <tdeglobal.h>
33#include <tdespell.h>
34#include <tdeapplication.h>
35
36#include "ksyntaxhighlighter.h"
37
38static int dummy, dummy2, dummy3, dummy4;
39static int *Okay = &dummy;
40static int *NotOkay = &dummy2;
41static int *Ignore = &dummy3;
42static int *Unknown = &dummy4;
43static const int tenSeconds = 10*1000;
44
45class KSyntaxHighlighter::KSyntaxHighlighterPrivate
46{
47public:
48 TQColor col1, col2, col3, col4, col5;
49 SyntaxMode mode;
50 bool enabled;
51};
52
53class KSpellingHighlighter::KSpellingHighlighterPrivate
54{
55public:
56
57 KSpellingHighlighterPrivate() :
58 alwaysEndsWithSpace( true ),
59 intraWordEditing( false ) {}
60
61 TQString currentWord;
62 int currentPos;
63 bool alwaysEndsWithSpace;
64 TQColor color;
65 bool intraWordEditing;
66};
67
68class KDictSpellingHighlighter::KDictSpellingHighlighterPrivate
69{
70public:
71 KDictSpellingHighlighterPrivate() :
72 mDict( 0 ),
73 spell( 0 ),
74 mSpellConfig( 0 ),
75 rehighlightRequest( 0 ),
76 wordCount( 0 ),
77 errorCount( 0 ),
78 autoReady( false ),
79 globalConfig( true ),
80 spellReady( false ) {}
81
82 ~KDictSpellingHighlighterPrivate() {
83 delete rehighlightRequest;
84 delete spell;
85 }
86
87 static TQDict<int>* sDict()
88 {
89 if (!statDict)
90 statDict = new TQDict<int>(50021);
91 return statDict;
92 }
93
94 TQDict<int>* mDict;
95 TQDict<int> autoDict;
96 TQDict<int> autoIgnoreDict;
97 static TQObject *sDictionaryMonitor;
98 KSpell *spell;
99 KSpellConfig *mSpellConfig;
100 TQTimer *rehighlightRequest, *spellTimeout;
101 TQString spellKey;
102 int wordCount, errorCount;
103 int checksRequested, checksDone;
104 int disablePercentage;
105 int disableWordCount;
106 bool completeRehighlightRequired;
107 bool active, automatic, autoReady;
108 bool globalConfig, spellReady;
109private:
110 static TQDict<int>* statDict;
111
112};
113
114TQDict<int>* KDictSpellingHighlighter::KDictSpellingHighlighterPrivate::statDict = 0;
115
116
117KSyntaxHighlighter::KSyntaxHighlighter( TQTextEdit *textEdit,
118 bool colorQuoting,
119 const TQColor& depth0,
120 const TQColor& depth1,
121 const TQColor& depth2,
122 const TQColor& depth3,
123 SyntaxMode mode )
124 : TQSyntaxHighlighter( textEdit )
125{
126 d = new KSyntaxHighlighterPrivate();
127
128 d->enabled = colorQuoting;
129 d->col1 = depth0;
130 d->col2 = depth1;
131 d->col3 = depth2;
132 d->col4 = depth3;
133 d->col5 = depth0;
134
135 d->mode = mode;
136}
137
138KSyntaxHighlighter::~KSyntaxHighlighter()
139{
140 delete d;
141}
142
143int KSyntaxHighlighter::highlightParagraph( const TQString &text, int )
144{
145 if (!d->enabled) {
146 setFormat( 0, text.length(), textEdit()->viewport()->paletteForegroundColor() );
147 return 0;
148 }
149
150 TQString simplified = text;
151 simplified = TQString(simplified.replace( TQRegExp( "\\s" ), TQString() )).replace( '|', TQString::fromLatin1(">") );
152 while ( simplified.startsWith( TQString::fromLatin1(">>>>") ) )
153 simplified = simplified.mid(3);
154 if ( simplified.startsWith( TQString::fromLatin1(">>>") ) || simplified.startsWith( TQString::fromLatin1("> > >") ) )
155 setFormat( 0, text.length(), d->col2 );
156 else if ( simplified.startsWith( TQString::fromLatin1(">>") ) || simplified.startsWith( TQString::fromLatin1("> >") ) )
157 setFormat( 0, text.length(), d->col3 );
158 else if ( simplified.startsWith( TQString::fromLatin1(">") ) )
159 setFormat( 0, text.length(), d->col4 );
160 else
161 setFormat( 0, text.length(), d->col5 );
162 return 0;
163}
164
165KSpellingHighlighter::KSpellingHighlighter( TQTextEdit *textEdit,
166 const TQColor& spellColor,
167 bool colorQuoting,
168 const TQColor& depth0,
169 const TQColor& depth1,
170 const TQColor& depth2,
171 const TQColor& depth3 )
172 : KSyntaxHighlighter( textEdit, colorQuoting, depth0, depth1, depth2, depth3 )
173{
174 d = new KSpellingHighlighterPrivate();
175
176 d->color = spellColor;
177}
178
179KSpellingHighlighter::~KSpellingHighlighter()
180{
181 delete d;
182}
183
184int KSpellingHighlighter::highlightParagraph( const TQString &text,
185 int paraNo )
186{
187 if ( paraNo == -2 )
188 paraNo = 0;
189 // leave #includes, diffs, and quoted replies alone
190 TQString diffAndCo( ">|" );
191
192 bool isCode = diffAndCo.find(text[0]) != -1;
193
194 if ( !text.endsWith(" ") )
195 d->alwaysEndsWithSpace = false;
196
197 KSyntaxHighlighter::highlightParagraph( text, -2 );
198
199 if ( !isCode ) {
200 int para, index;
201 textEdit()->getCursorPosition( &para, &index );
202 int len = text.length();
203 if ( d->alwaysEndsWithSpace )
204 len--;
205
206 d->currentPos = 0;
207 d->currentWord = "";
208 for ( int i = 0; i < len; i++ ) {
209 if ( !text[i].isLetter() && (!(text[i] == '\'')) ) {
210 if ( ( para != paraNo ) ||
211 !intraWordEditing() ||
212 ( i - d->currentWord.length() > (uint)index ) ||
213 ( i < index ) ) {
214 flushCurrentWord();
215 } else {
216 d->currentWord = "";
217 }
218 d->currentPos = i + 1;
219 } else {
220 d->currentWord += text[i];
221 }
222 }
223 if ( !text[len - 1].isLetter() ||
224 (uint)( index + 1 ) != text.length() ||
225 para != paraNo )
226 flushCurrentWord();
227 }
228 return ++paraNo;
229}
230
231TQStringList KSpellingHighlighter::personalWords()
232{
233 TQStringList l;
234 l.append( "KMail" );
235 l.append( "KOrganizer" );
236 l.append( "KAddressBook" );
237 l.append( "TDEHTML" );
238 l.append( "TDEIO" );
239 l.append( "KJS" );
240 l.append( "Konqueror" );
241 l.append( "KSpell" );
242 l.append( "Kontact" );
243 l.append( "Qt" );
244 return l;
245}
246
247void KSpellingHighlighter::flushCurrentWord()
248{
249 while ( d->currentWord[0].isPunct() ) {
250 d->currentWord = d->currentWord.mid( 1 );
251 d->currentPos++;
252 }
253
254 TQChar ch;
255 while ( ( ch = d->currentWord[(int) d->currentWord.length() - 1] ).isPunct() &&
256 ch != '(' && ch != '@' )
257 d->currentWord.truncate( d->currentWord.length() - 1 );
258
259 if ( !d->currentWord.isEmpty() ) {
260 if ( isMisspelled( d->currentWord ) ) {
261 setFormat( d->currentPos, d->currentWord.length(), d->color );
262// setMisspelled( d->currentPos, d->currentWord.length(), true );
263 }
264 }
265 d->currentWord = "";
266}
267
268TQObject *KDictSpellingHighlighter::KDictSpellingHighlighterPrivate::sDictionaryMonitor = 0;
269
270KDictSpellingHighlighter::KDictSpellingHighlighter( TQTextEdit *textEdit,
271 bool spellCheckingActive ,
272 bool autoEnable,
273 const TQColor& spellColor,
274 bool colorQuoting,
275 const TQColor& depth0,
276 const TQColor& depth1,
277 const TQColor& depth2,
278 const TQColor& depth3,
279 KSpellConfig *spellConfig )
280 : KSpellingHighlighter( textEdit, spellColor,
281 colorQuoting, depth0, depth1, depth2, depth3 )
282{
283 d = new KDictSpellingHighlighterPrivate();
284
285 d->mSpellConfig = spellConfig;
286 d->globalConfig = ( !spellConfig );
287 d->automatic = autoEnable;
288 d->active = spellCheckingActive;
289 d->checksRequested = 0;
290 d->checksDone = 0;
291 d->completeRehighlightRequired = false;
292
293 TDEConfig *config = TDEGlobal::config();
294 TDEConfigGroupSaver cs( config, "KSpell" );
295 d->disablePercentage = config->readNumEntry( "KSpell_AsYouTypeDisablePercentage", 42 );
296 d->disablePercentage = TQMIN( d->disablePercentage, 101 );
297 d->disableWordCount = config->readNumEntry( "KSpell_AsYouTypeDisableWordCount", 100 );
298
299 textEdit->installEventFilter( this );
300 textEdit->viewport()->installEventFilter( this );
301
302 d->rehighlightRequest = new TQTimer(this);
303 connect( d->rehighlightRequest, TQ_SIGNAL( timeout() ),
304 this, TQ_SLOT( slotRehighlight() ));
305 d->spellTimeout = new TQTimer(this);
306 connect( d->spellTimeout, TQ_SIGNAL( timeout() ),
307 this, TQ_SLOT( slotKSpellNotResponding() ));
308
309 if ( d->globalConfig ) {
310 d->spellKey = spellKey();
311
312 if ( !d->sDictionaryMonitor )
313 d->sDictionaryMonitor = new TQObject();
314 }
315 else {
316 d->mDict = new TQDict<int>(4001);
317 connect( d->mSpellConfig, TQ_SIGNAL( configChanged() ),
318 this, TQ_SLOT( slotLocalSpellConfigChanged() ) );
319 }
320
321 slotDictionaryChanged();
322 // whats this good for?
323 //startTimer( 2 * 1000 );
324}
325
326KDictSpellingHighlighter::~KDictSpellingHighlighter()
327{
328 delete d->spell;
329 d->spell = 0;
330 delete d->mDict;
331 d->mDict = 0;
332 delete d;
333}
334
335void KDictSpellingHighlighter::slotSpellReady( KSpell *spell )
336{
337 kdDebug(0) << "KDictSpellingHighlighter::slotSpellReady( " << spell << " )" << endl;
338 TDEConfigGroup cg( TDEGlobal::config(),"KSpell" );
339 if ( cg.readEntry("KSpell_DoSpellChecking") != "0" )
340 {
341 if ( d->globalConfig ) {
342 connect( d->sDictionaryMonitor, TQ_SIGNAL( destroyed()),
343 this, TQ_SLOT( slotDictionaryChanged() ));
344 }
345 if ( spell != d->spell )
346 {
347 delete d->spell;
348 d->spell = spell;
349 }
350 d->spellReady = true;
351 const TQStringList l = KSpellingHighlighter::personalWords();
352 for ( TQStringList::ConstIterator it = l.begin(); it != l.end(); ++it ) {
353 d->spell->addPersonal( *it );
354 }
355 connect( spell, TQ_SIGNAL( misspelling( const TQString &, const TQStringList &, unsigned int )),
356 this, TQ_SLOT( slotMisspelling( const TQString &, const TQStringList &, unsigned int )));
357 connect( spell, TQ_SIGNAL( corrected( const TQString &, const TQString &, unsigned int )),
358 this, TQ_SLOT( slotCorrected( const TQString &, const TQString &, unsigned int )));
359 d->checksRequested = 0;
360 d->checksDone = 0;
361 d->completeRehighlightRequired = true;
362 d->rehighlightRequest->start( 0, true );
363 }
364}
365
366bool KDictSpellingHighlighter::isMisspelled( const TQString &word )
367{
368 if (!d->spellReady)
369 return false;
370
371 // This debug is expensive, only enable it locally
372 //kdDebug(0) << "KDictSpellingHighlighter::isMisspelled( \"" << word << "\" )" << endl;
373 // Normally isMisspelled would look up a dictionary and return
374 // true or false, but tdespell is asynchronous and slow so things
375 // get tricky...
376 // For auto detection ignore signature and reply prefix
377 if ( !d->autoReady )
378 d->autoIgnoreDict.replace( word, Ignore );
379
380 // "dict" is used as a cache to store the results of KSpell
381 TQDict<int>* dict = ( d->globalConfig ? d->sDict() : d->mDict );
382 if ( !dict->isEmpty() && (*dict)[word] == NotOkay ) {
383 if ( d->autoReady && ( d->autoDict[word] != NotOkay )) {
384 if ( !d->autoIgnoreDict[word] )
385 ++d->errorCount;
386 d->autoDict.replace( word, NotOkay );
387 }
388
389 return d->active;
390 }
391 if ( !dict->isEmpty() && (*dict)[word] == Okay ) {
392 if ( d->autoReady && !d->autoDict[word] ) {
393 d->autoDict.replace( word, Okay );
394 }
395 return false;
396 }
397
398 if ((dict->isEmpty() || !((*dict)[word])) && d->spell ) {
399 int para, index;
400 textEdit()->getCursorPosition( &para, &index );
401 ++d->wordCount;
402 dict->replace( word, Unknown );
403 ++d->checksRequested;
404 if (currentParagraph() != para)
405 d->completeRehighlightRequired = true;
406 d->spellTimeout->start( tenSeconds, true );
407 d->spell->checkWord( word, false );
408 }
409 return false;
410}
411
412bool KSpellingHighlighter::intraWordEditing() const
413{
414 return d->intraWordEditing;
415}
416
417void KSpellingHighlighter::setIntraWordEditing( bool editing )
418{
419 d->intraWordEditing = editing;
420}
421
422void KDictSpellingHighlighter::slotMisspelling (const TQString &originalWord, const TQStringList &suggestions,
423 unsigned int pos)
424{
425 Q_UNUSED( suggestions );
426 // kdDebug() << suggestions.join( " " ).latin1() << endl;
427 if ( d->globalConfig )
428 d->sDict()->replace( originalWord, NotOkay );
429 else
430 d->mDict->replace( originalWord, NotOkay );
431
432 //Emit this baby so that apps that want to have suggestions in a popup over
433 //the misspelled word can catch them.
434 emit newSuggestions( originalWord, suggestions, pos );
435}
436
437void KDictSpellingHighlighter::slotCorrected(const TQString &word,
438 const TQString &,
439 unsigned int)
440
441{
442 TQDict<int>* dict = ( d->globalConfig ? d->sDict() : d->mDict );
443 if ( !dict->isEmpty() && (*dict)[word] == Unknown ) {
444 dict->replace( word, Okay );
445 }
446 ++d->checksDone;
447 if (d->checksDone == d->checksRequested) {
448 d->spellTimeout->stop();
449 slotRehighlight();
450 } else {
451 d->spellTimeout->start( tenSeconds, true );
452 }
453}
454
455void KDictSpellingHighlighter::dictionaryChanged()
456{
457 TQObject *oldMonitor = KDictSpellingHighlighterPrivate::sDictionaryMonitor;
458 KDictSpellingHighlighterPrivate::sDictionaryMonitor = new TQObject();
459 KDictSpellingHighlighterPrivate::sDict()->clear();
460 delete oldMonitor;
461}
462
463void KDictSpellingHighlighter::restartBackgroundSpellCheck()
464{
465 kdDebug(0) << "KDictSpellingHighlighter::restartBackgroundSpellCheck()" << endl;
466 slotDictionaryChanged();
467}
468
469void KDictSpellingHighlighter::setActive( bool active )
470{
471 if ( active == d->active )
472 return;
473
474 d->active = active;
475 rehighlight();
476 if ( d->active )
477 emit activeChanged( i18n("As-you-type spell checking enabled.") );
478 else
479 emit activeChanged( i18n("As-you-type spell checking disabled.") );
480}
481
482bool KDictSpellingHighlighter::isActive() const
483{
484 return d->active;
485}
486
487void KDictSpellingHighlighter::setAutomatic( bool automatic )
488{
489 if ( automatic == d->automatic )
490 return;
491
492 d->automatic = automatic;
493 if ( d->automatic )
494 slotAutoDetection();
495}
496
497bool KDictSpellingHighlighter::automatic() const
498{
499 return d->automatic;
500}
501
502void KDictSpellingHighlighter::slotRehighlight()
503{
504 kdDebug(0) << "KDictSpellingHighlighter::slotRehighlight()" << endl;
505 if (d->completeRehighlightRequired) {
506 rehighlight();
507 } else {
508 int para, index;
509 textEdit()->getCursorPosition( &para, &index );
510 //rehighlight the current para only (undo/redo safe)
511 bool modified = textEdit()->isModified();
512 textEdit()->insertAt( "", para, index );
513 textEdit()->setModified( modified );
514 }
515 if (d->checksDone == d->checksRequested)
516 d->completeRehighlightRequired = false;
517 TQTimer::singleShot( 0, this, TQ_SLOT( slotAutoDetection() ));
518}
519
520void KDictSpellingHighlighter::slotDictionaryChanged()
521{
522 delete d->spell;
523 d->spellReady = false;
524 d->wordCount = 0;
525 d->errorCount = 0;
526 d->autoDict.clear();
527
528 d->spell = new KSpell( 0, i18n( "Incremental Spellcheck" ), this,
529 TQ_SLOT( slotSpellReady( KSpell * ) ), d->mSpellConfig );
530}
531
532void KDictSpellingHighlighter::slotLocalSpellConfigChanged()
533{
534 kdDebug(0) << "KDictSpellingHighlighter::slotSpellConfigChanged()" << endl;
535 // the spell config has been changed, so we have to restart from scratch
536 d->mDict->clear();
537 slotDictionaryChanged();
538}
539
540TQString KDictSpellingHighlighter::spellKey()
541{
542 TDEConfig *config = TDEGlobal::config();
543 TDEConfigGroupSaver cs( config, "KSpell" );
544 config->reparseConfiguration();
545 TQString key;
546 key += TQString::number( config->readNumEntry( "KSpell_NoRootAffix", 0 ));
547 key += '/';
548 key += TQString::number( config->readNumEntry( "KSpell_RunTogether", 0 ));
549 key += '/';
550 key += config->readEntry( "KSpell_Dictionary", "" );
551 key += '/';
552 key += TQString::number( config->readNumEntry( "KSpell_DictFromList", false ));
553 key += '/';
554 key += TQString::number( config->readNumEntry( "KSpell_Encoding", KS_E_UTF8 ));
555 key += '/';
556 key += TQString::number( config->readNumEntry( "KSpell_Client", KS_CLIENT_ISPELL ));
557 return key;
558}
559
560
561// Automatic spell checking support
562// In auto spell checking mode disable as-you-type spell checking
563// iff more than one third of words are spelt incorrectly.
564//
565// Words in the signature and reply prefix are ignored.
566// Only unique words are counted.
567
568void KDictSpellingHighlighter::slotAutoDetection()
569{
570 if ( !d->autoReady )
571 return;
572
573 bool savedActive = d->active;
574
575 if ( d->automatic ) {
576 // tme = Too many errors
577 bool tme = d->wordCount >= d->disableWordCount && d->errorCount * 100 >= d->disablePercentage * d->wordCount;
578 if ( d->active && tme )
579 d->active = false;
580 else if ( !d->active && !tme )
581 d->active = true;
582 }
583 if ( d->active != savedActive ) {
584 if ( d->wordCount > 1 )
585 if ( d->active )
586 emit activeChanged( i18n("As-you-type spell checking enabled.") );
587 else
588 emit activeChanged( i18n( "Too many misspelled words. "
589 "As-you-type spell checking disabled." ) );
590 d->completeRehighlightRequired = true;
591 d->rehighlightRequest->start( 100, true );
592 }
593}
594
595void KDictSpellingHighlighter::slotKSpellNotResponding()
596{
597 static int retries = 0;
598 if (retries < 10) {
599 if ( d->globalConfig )
600 KDictSpellingHighlighter::dictionaryChanged();
601 else
602 slotLocalSpellConfigChanged();
603 } else {
604 setAutomatic( false );
605 setActive( false );
606 }
607 ++retries;
608}
609
610bool KDictSpellingHighlighter::eventFilter( TQObject *o, TQEvent *e)
611{
612 if (o == textEdit() && (e->type() == TQEvent::FocusIn)) {
613 if ( d->globalConfig ) {
614 TQString skey = spellKey();
615 if ( d->spell && d->spellKey != skey ) {
616 d->spellKey = skey;
617 KDictSpellingHighlighter::dictionaryChanged();
618 }
619 }
620 }
621
622 if (o == textEdit() && (e->type() == TQEvent::KeyPress)) {
623 TQKeyEvent *k = static_cast<TQKeyEvent*>(e);
624 d->autoReady = true;
625 if (d->rehighlightRequest->isActive()) // try to stay out of the users way
626 d->rehighlightRequest->changeInterval( 500 );
627 if ( k->key() == Key_Enter ||
628 k->key() == Key_Return ||
629 k->key() == Key_Up ||
630 k->key() == Key_Down ||
631 k->key() == Key_Left ||
632 k->key() == Key_Right ||
633 k->key() == Key_PageUp ||
634 k->key() == Key_PageDown ||
635 k->key() == Key_Home ||
636 k->key() == Key_End ||
637 (( k->state() & ControlButton ) &&
638 ((k->key() == Key_A) ||
639 (k->key() == Key_B) ||
640 (k->key() == Key_E) ||
641 (k->key() == Key_N) ||
642 (k->key() == Key_P))) ) {
643 if ( intraWordEditing() ) {
644 setIntraWordEditing( false );
645 d->completeRehighlightRequired = true;
646 d->rehighlightRequest->start( 500, true );
647 }
648 if (d->checksDone != d->checksRequested) {
649 // Handle possible change of paragraph while
650 // words are pending spell checking
651 d->completeRehighlightRequired = true;
652 d->rehighlightRequest->start( 500, true );
653 }
654 } else {
655 setIntraWordEditing( true );
656 }
657 if ( k->key() == Key_Space ||
658 k->key() == Key_Enter ||
659 k->key() == Key_Return ) {
660 TQTimer::singleShot( 0, this, TQ_SLOT( slotAutoDetection() ));
661 }
662 }
663
664 else if ( o == textEdit()->viewport() &&
665 ( e->type() == TQEvent::MouseButtonPress )) {
666 d->autoReady = true;
667 if ( intraWordEditing() ) {
668 setIntraWordEditing( false );
669 d->completeRehighlightRequired = true;
670 d->rehighlightRequest->start( 0, true );
671 }
672 }
673
674 return false;
675}
676
677#include "ksyntaxhighlighter.moc"
KDictSpellingHighlighter::setAutomatic
void setAutomatic(bool automatic)
En-/Disable automatic (de)activation in case of too many errors.
Definition: ksyntaxhighlighter.cpp:487
KDictSpellingHighlighter::setActive
void setActive(bool active)
Enable/Disable spell checking.
Definition: ksyntaxhighlighter.cpp:469
KDictSpellingHighlighter::isActive
bool isActive() const
Returns the state of spell checking.
Definition: ksyntaxhighlighter.cpp:482
KDictSpellingHighlighter::automatic
bool automatic() const
Returns the state of automatic (de)activation.
Definition: ksyntaxhighlighter.cpp:497
KSpellConfig
A configuration class/dialog for KSpell.
Definition: ksconfig.h:88
KSpell
KDE Spellchecker
Definition: tdespell.h:47
KSyntaxHighlighter
Syntax sensitive text highlighter.
Definition: ksyntaxhighlighter.h:43
TDEConfigBase::readEntry
TQString readEntry(const TQString &pKey, const TQString &aDefault=TQString::null) const
TDEConfigBase::readNumEntry
int readNumEntry(const TQString &pKey, int nDefault=0) const
TDEConfigGroupSaver
TDEConfigGroup
TDEConfig
TDEConfig::reparseConfiguration
virtual void reparseConfiguration()
TDEGlobal::config
static TDEConfig * config()
endl
kndbgstream & endl(kndbgstream &s)
kdDebug
kdbgstream kdDebug(int area=0)
TDEStdAccel::key
int key(StdAccel id)
tdelocale.h

tdeui

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

tdeui

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