• 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 
38 static int dummy, dummy2, dummy3, dummy4;
39 static int *Okay = &dummy;
40 static int *NotOkay = &dummy2;
41 static int *Ignore = &dummy3;
42 static int *Unknown = &dummy4;
43 static const int tenSeconds = 10*1000;
44 
45 class KSyntaxHighlighter::KSyntaxHighlighterPrivate
46 {
47 public:
48  TQColor col1, col2, col3, col4, col5;
49  SyntaxMode mode;
50  bool enabled;
51 };
52 
53 class KSpellingHighlighter::KSpellingHighlighterPrivate
54 {
55 public:
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 
68 class KDictSpellingHighlighter::KDictSpellingHighlighterPrivate
69 {
70 public:
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;
109 private:
110  static TQDict<int>* statDict;
111 
112 };
113 
114 TQDict<int>* KDictSpellingHighlighter::KDictSpellingHighlighterPrivate::statDict = 0;
115 
116 
117 KSyntaxHighlighter::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 
138 KSyntaxHighlighter::~KSyntaxHighlighter()
139 {
140  delete d;
141 }
142 
143 int 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 
165 KSpellingHighlighter::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 
179 KSpellingHighlighter::~KSpellingHighlighter()
180 {
181  delete d;
182 }
183 
184 int 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 
231 TQStringList 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 
247 void 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 
268 TQObject *KDictSpellingHighlighter::KDictSpellingHighlighterPrivate::sDictionaryMonitor = 0;
269 
270 KDictSpellingHighlighter::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 
326 KDictSpellingHighlighter::~KDictSpellingHighlighter()
327 {
328  delete d->spell;
329  d->spell = 0;
330  delete d->mDict;
331  d->mDict = 0;
332  delete d;
333 }
334 
335 void 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 
366 bool 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 
412 bool KSpellingHighlighter::intraWordEditing() const
413 {
414  return d->intraWordEditing;
415 }
416 
417 void KSpellingHighlighter::setIntraWordEditing( bool editing )
418 {
419  d->intraWordEditing = editing;
420 }
421 
422 void 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 
437 void 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 
455 void KDictSpellingHighlighter::dictionaryChanged()
456 {
457  TQObject *oldMonitor = KDictSpellingHighlighterPrivate::sDictionaryMonitor;
458  KDictSpellingHighlighterPrivate::sDictionaryMonitor = new TQObject();
459  KDictSpellingHighlighterPrivate::sDict()->clear();
460  delete oldMonitor;
461 }
462 
463 void KDictSpellingHighlighter::restartBackgroundSpellCheck()
464 {
465  kdDebug(0) << "KDictSpellingHighlighter::restartBackgroundSpellCheck()" << endl;
466  slotDictionaryChanged();
467 }
468 
469 void 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 
482 bool KDictSpellingHighlighter::isActive() const
483 {
484  return d->active;
485 }
486 
487 void 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 
497 bool KDictSpellingHighlighter::automatic() const
498 {
499  return d->automatic;
500 }
501 
502 void 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 
520 void 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 
532 void 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 
540 TQString 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 
568 void 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 
595 void 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 
610 bool 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.1
This website is maintained by Timothy Pearson.