00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "k3sconfig.h"
00022
00023 #include <QtGui/QCheckBox>
00024 #include <QtGui/QComboBox>
00025 #include <QtGui/QLabel>
00026 #include <QtGui/QLayout>
00027 #include <QtCore/QFileInfo>
00028 #include <QtCore/QDir>
00029
00030 #include <ktoolinvocation.h>
00031 #include <kconfig.h>
00032 #include <kdebug.h>
00033 #include <kdialog.h>
00034 #include <kglobal.h>
00035 #include <kguiitem.h>
00036 #include <klineedit.h>
00037 #include <klocale.h>
00038 #include <kpushbutton.h>
00039 #include <kstandardguiitem.h>
00040
00041 #include <config.h>
00042 #include <kconfiggroup.h>
00043
00044 class K3SpellConfigPrivate
00045 {
00046 public:
00047 QStringList replacelist;
00048 };
00049
00050
00051 K3SpellConfig::K3SpellConfig (const K3SpellConfig &_ksc)
00052 : QWidget(0), nodialog(true)
00053 , cb0(0)
00054 , cb1(0)
00055 , cb2(0)
00056 , dictlist(0)
00057 , dictcombo(0)
00058 , encodingcombo(0)
00059 , clientcombo(0)
00060 , d(new K3SpellConfigPrivate)
00061 {
00062 kDebug(750) << "Entering K3SpellConfig::K3SpellConfig(K3SpellConfig&)";
00063 setDoSpellChecking( _ksc.doSpellChecking() );
00064 setReplaceAllList( _ksc.replaceAllList() );
00065 setNoRootAffix( _ksc.noRootAffix() );
00066 setRunTogether( _ksc.runTogether() );
00067 setDictionary( _ksc.dictionary() );
00068 setDictFromList( _ksc.dictFromList() );
00069
00070 setIgnoreList( _ksc.ignoreList() );
00071 setEncoding( _ksc.encoding() );
00072 setClient( _ksc.client() );
00073 }
00074
00075
00076 K3SpellConfig::K3SpellConfig( QWidget *parent,
00077 K3SpellConfig *_ksc, bool addHelpButton )
00078 : QWidget (parent), nodialog(false)
00079 , kc(0)
00080 , cb0(0)
00081 , cb1(0)
00082 , cb2(0)
00083 , dictlist(0)
00084 , dictcombo(0)
00085 , encodingcombo(0)
00086 , clientcombo(0)
00087 , d(new K3SpellConfigPrivate)
00088 {
00089 kc = KGlobal::config();
00090
00091 if( !_ksc )
00092 {
00093 readGlobalSettings();
00094 }
00095 else
00096 {
00097 setDoSpellChecking( _ksc->doSpellChecking() );
00098 setNoRootAffix( _ksc->noRootAffix() );
00099 setRunTogether( _ksc->runTogether() );
00100 setDictionary( _ksc->dictionary() );
00101 setDictFromList( _ksc->dictFromList() );
00102
00103 setIgnoreList( _ksc->ignoreList() );
00104 setEncoding( _ksc->encoding() );
00105 setClient( _ksc->client() );
00106 }
00107
00108 QGridLayout *glay = new QGridLayout( this );
00109 glay->setSpacing( KDialog::spacingHint() );
00110 cb0 = new QCheckBox( i18nc("@option:check", "Do Spellchecking"), this );
00111 cb0->setObjectName( "DoSpellChecking" );
00112 connect( cb0, SIGNAL(toggled(bool)), SLOT(sDoSpell()) );
00113 cb1 = new QCheckBox( i18nc("@option:check",
00114 "Create &root/affix combinations not in dictionary"), this );
00115 cb1->setObjectName( "NoRootAffix" );
00116 connect( cb1, SIGNAL(toggled(bool)), SLOT(sNoAff(bool)) );
00117 glay->addWidget( cb0, 0, 0, 1, 3 );
00118 glay->addWidget( cb1, 1, 0, 1, 3 );
00119
00120 cb2 = new QCheckBox( i18nc("@option:check",
00121 "Consider run-together &words as spelling errors"), this );
00122 cb2->setObjectName( "RunTogether" );
00123 connect( cb2, SIGNAL(toggled(bool)), SLOT(sRunTogether(bool)) );
00124 glay->addWidget( cb2, 2, 0, 1, 3 );
00125
00126 dictcombo = new QComboBox( this );
00127 dictcombo->setObjectName( "DictFromList" );
00128 dictcombo->setInsertPolicy( QComboBox::NoInsert );
00129 connect( dictcombo, SIGNAL (activated(int)),
00130 this, SLOT (sSetDictionary(int)) );
00131 glay->addWidget( dictcombo, 3, 1, 1, 2 );
00132
00133 dictlist = new QLabel( i18nc("@label:listbox", "&Dictionary:"), this );
00134 dictlist->setBuddy( dictcombo );
00135 glay->addWidget( dictlist, 3 ,0 );
00136
00137 encodingcombo = new QComboBox( this );
00138 encodingcombo->setObjectName( "Encoding" );
00139 encodingcombo->addItem( "US-ASCII" );
00140 encodingcombo->addItem( "ISO 8859-1" );
00141 encodingcombo->addItem( "ISO 8859-2" );
00142 encodingcombo->addItem( "ISO 8859-3" );
00143 encodingcombo->addItem( "ISO 8859-4" );
00144 encodingcombo->addItem( "ISO 8859-5" );
00145 encodingcombo->addItem( "ISO 8859-7" );
00146 encodingcombo->addItem( "ISO 8859-8" );
00147 encodingcombo->addItem( "ISO 8859-9" );
00148 encodingcombo->addItem( "ISO 8859-13" );
00149 encodingcombo->addItem( "ISO 8859-15" );
00150 encodingcombo->addItem( "UTF-8" );
00151 encodingcombo->addItem( "KOI8-R" );
00152 encodingcombo->addItem( "KOI8-U" );
00153 encodingcombo->addItem( "CP1251" );
00154 encodingcombo->addItem( "CP1255" );
00155
00156 connect( encodingcombo, SIGNAL(activated(int)), this,
00157 SLOT(sChangeEncoding(int)) );
00158 glay->addWidget( encodingcombo, 4, 1, 1, 2 );
00159
00160 QLabel *tmpQLabel = new QLabel( i18nc("@label:listbox", "&Encoding:"), this);
00161 tmpQLabel->setBuddy( encodingcombo );
00162 glay->addWidget( tmpQLabel, 4, 0 );
00163
00164
00165 clientcombo = new QComboBox( this );
00166 clientcombo->setObjectName( "Client" );
00167 clientcombo->addItem( i18nc("@item:inlistbox Spell checker", "International <application>Ispell</application>") );
00168 clientcombo->addItem( i18nc("@item:inlistbox Spell checker", "<application>Aspell</application>") );
00169 clientcombo->addItem( i18nc("@item:inlistbox Spell checker", "<application>Hspell</application>") );
00170 clientcombo->addItem( i18nc("@item:inlistbox Spell checker", "<application>Zemberek</application>") );
00171 clientcombo->addItem( i18nc("@item:inlistbox Spell checker", "<application>Hunspell</application>") );
00172 connect( clientcombo, SIGNAL (activated(int)), this,
00173 SLOT (sChangeClient(int)) );
00174 glay->addWidget( clientcombo, 5, 1, 1, 2 );
00175
00176 tmpQLabel = new QLabel( i18nc("@label:listbox", "&Client:"), this );
00177 tmpQLabel->setBuddy( clientcombo );
00178 glay->addWidget( tmpQLabel, 5, 0 );
00179
00180 if( addHelpButton )
00181 {
00182 QPushButton *pushButton = new KPushButton( KStandardGuiItem::help(), this );
00183 connect( pushButton, SIGNAL(clicked()), this, SLOT(sHelp()) );
00184 glay->addWidget(pushButton, 6, 2);
00185 }
00186
00187 fillInDialog();
00188 }
00189
00190 K3SpellConfig::~K3SpellConfig()
00191 {
00192 delete d;
00193 }
00194
00195
00196 bool
00197 K3SpellConfig::dictFromList() const
00198 {
00199 return dictfromlist;
00200 }
00201
00202 bool
00203 K3SpellConfig::readGlobalSettings()
00204 {
00205 kDebug(750) << "Entering K3SpellConfig::readGlobalSettings (see k3sconfig.cpp)";
00206 KConfigGroup cg( kc,"K3Spell" );
00207
00208 setDoSpellChecking ( cg.readEntry("K3Spell_DoSpellChecking", false ) );
00209 setNoRootAffix ( cg.readEntry("K3Spell_NoRootAffix", 0) );
00210 setRunTogether ( cg.readEntry("K3Spell_RunTogether", 0) );
00211 setDictionary ( cg.readEntry("K3Spell_Dictionary") );
00212 setDictFromList ( cg.readEntry("K3Spell_DictFromList", 0) );
00213 setEncoding ( cg.readEntry ("K3Spell_Encoding", int(KS_E_ASCII)) );
00214 setClient ( cg.readEntry ("K3Spell_Client", int(KS_CLIENT_ISPELL)) );
00215
00216 return true;
00217 }
00218
00219 bool
00220 K3SpellConfig::writeGlobalSettings ()
00221 {
00222 KConfigGroup cg( kc,"K3Spell" );
00223
00224 KConfigBase::WriteConfigFlags flags(KConfigBase::Global|KConfigBase::Persistent);
00225 cg.writeEntry ("K3Spell_DoSpellChecking", doSpellChecking(), flags);
00226 cg.writeEntry ("K3Spell_NoRootAffix",(int) noRootAffix(), flags);
00227 cg.writeEntry ("K3Spell_RunTogether", (int) runTogether(), flags);
00228 cg.writeEntry ("K3Spell_Dictionary", dictionary(), flags);
00229 cg.writeEntry ("K3Spell_DictFromList",(int) dictFromList(), flags);
00230 cg.writeEntry ("K3Spell_Encoding", (int) encoding(), flags);
00231 cg.writeEntry ("K3Spell_Client", client(), flags);
00232 kc->sync();
00233
00234 return true;
00235 }
00236
00237 void
00238 K3SpellConfig::sChangeEncoding( int i )
00239 {
00240 kDebug(750) << "K3SpellConfig::sChangeEncoding(" << i << ")";
00241 setEncoding( i );
00242 emit configChanged();
00243 }
00244
00245 void
00246 K3SpellConfig::sChangeClient( int i )
00247 {
00248 setClient( i );
00249
00250
00251 if ( dictcombo ) {
00252 if ( iclient == KS_CLIENT_ISPELL )
00253 getAvailDictsIspell();
00254 else if ( iclient == KS_CLIENT_HSPELL )
00255 {
00256 langfnames.clear();
00257 dictcombo->clear();
00258 dictcombo->addItem( i18nc("@item Spelling dictionary", "Hebrew") );
00259 sChangeEncoding( KS_E_CP1255 );
00260 } else if ( iclient == KS_CLIENT_ZEMBEREK ) {
00261 langfnames.clear();
00262 dictcombo->clear();
00263 dictcombo->addItem( i18nc("@item Spelling dictionary", "Turkish") );
00264 sChangeEncoding( KS_E_UTF8 );
00265 }
00266 else if ( iclient == KS_CLIENT_ASPELL )
00267 getAvailDictsAspell();
00268 else
00269 getAvailDictsHunspell();
00270 }
00271 emit configChanged();
00272 }
00273
00274 bool
00275 K3SpellConfig::interpret( const QString &fname, QString &lname,
00276 QString &hname )
00277
00278 {
00279
00280 kDebug(750) << "K3SpellConfig::interpret [" << fname << "]";
00281
00282 QString dname( fname );
00283
00284 if( dname.endsWith( '+' ) )
00285 dname.remove( dname.length()-1, 1 );
00286
00287 if( dname.endsWith("sml") || dname.endsWith("med") || dname.endsWith("lrg") ||
00288 dname.endsWith("xlg"))
00289 dname.remove(dname.length()-3,3);
00290
00291 QString extension;
00292
00293 int i = dname.indexOf('-');
00294 if ( i != -1 )
00295 {
00296 extension = dname.mid(i+1);
00297 dname.truncate(i);
00298 }
00299
00300
00301
00302 if ( (dname.length() == 2) || (dname.length() == 3) ) {
00303 lname = dname;
00304 hname = KGlobal::locale()->languageCodeToName( lname );
00305 }
00306 else if ( (dname.length() == 5) && (dname[2] == '_') ) {
00307 lname = dname.left(2);
00308 hname = KGlobal::locale()->languageCodeToName( lname );
00309 QString country = KGlobal::locale()->countryCodeToName( dname.right(2) );
00310 if ( extension.isEmpty() )
00311 extension = country;
00312 else
00313 extension = country + " - " + extension;
00314 }
00315
00316 else if ( dname=="english" || dname=="american" ||
00317 dname=="british" || dname=="canadian" ) {
00318 lname="en"; hname=i18nc("@item Spelling dictionary", "English");
00319 }
00320 else if ( dname == "espa~nol" || dname == "espanol" ) {
00321 lname="es"; hname=i18nc("@item Spelling dictionary", "Spanish");
00322 }
00323 else if (dname=="dansk") {
00324 lname="da"; hname=i18nc("@item Spelling dictionary", "Danish");
00325 }
00326 else if (dname=="deutsch") {
00327 lname="de"; hname=i18nc("@item Spelling dictionary", "German");
00328 }
00329 else if (dname=="german") {
00330 lname="de"; hname=i18nc("@item Spelling dictionary", "German (new spelling)");
00331 }
00332 else if (dname=="portuguesb" || dname=="br") {
00333 lname="br"; hname=i18nc("@item Spelling dictionary", "Brazilian Portuguese");
00334 }
00335 else if (dname=="portugues") {
00336 lname="pt"; hname=i18nc("@item Spelling dictionary", "Portuguese");
00337 }
00338 else if (dname=="esperanto") {
00339 lname="eo"; hname=i18nc("@item Spelling dictionary", "Esperanto");
00340 }
00341 else if (dname=="norsk") {
00342 lname="no"; hname=i18nc("@item Spelling dictionary", "Norwegian");
00343 }
00344 else if (dname=="polish") {
00345 lname="pl"; hname=i18nc("@item Spelling dictionary", "Polish"); sChangeEncoding(KS_E_LATIN2);
00346 }
00347 else if (dname=="russian") {
00348 lname="ru"; hname=i18nc("@item Spelling dictionary", "Russian");
00349 }
00350 else if (dname=="slovensko") {
00351 lname="si"; hname=i18nc("@item Spelling dictionary", "Slovenian"); sChangeEncoding(KS_E_LATIN2);
00352 }
00353 else if (dname=="slovak"){
00354 lname="sk"; hname=i18nc("@item Spelling dictionary", "Slovak"); sChangeEncoding(KS_E_LATIN2);
00355 }
00356 else if (dname=="czech") {
00357 lname="cs"; hname=i18nc("@item Spelling dictionary", "Czech"); sChangeEncoding(KS_E_LATIN2);
00358 }
00359 else if (dname=="svenska") {
00360 lname="sv"; hname=i18nc("@item Spelling dictionary", "Swedish");
00361 }
00362 else if (dname=="swiss") {
00363 lname="de"; hname=i18nc("@item Spelling dictionary", "Swiss German");
00364 }
00365 else if (dname=="ukrainian") {
00366 lname="uk"; hname=i18nc("@item Spelling dictionary", "Ukrainian");
00367 }
00368 else if (dname=="lietuviu" || dname=="lithuanian") {
00369 lname="lt"; hname=i18nc("@item Spelling dictionary", "Lithuanian");
00370 }
00371 else if (dname=="francais" || dname=="french") {
00372 lname="fr"; hname=i18nc("@item Spelling dictionary", "French");
00373 }
00374 else if (dname=="belarusian") {
00375 lname="be"; hname=i18nc("@item Spelling dictionary", "Belarusian");
00376 }
00377 else if( dname == "magyar" ) {
00378 lname="hu"; hname=i18nc("@item Spelling dictionary", "Hungarian");
00379 sChangeEncoding(KS_E_LATIN2);
00380 }
00381 else {
00382 lname=""; hname=i18nc("@item Spelling dictionary", "Unknown");
00383 }
00384 if (!extension.isEmpty())
00385 {
00386 hname = hname + " (" + extension + ')';
00387 }
00388
00389
00390 if ( ( KGlobal::locale()->language() == QLatin1String("C") &&
00391 lname==QLatin1String("en") ) ||
00392 KGlobal::locale()->language() == lname )
00393 return true;
00394
00395 return false;
00396 }
00397
00398 void
00399 K3SpellConfig::fillInDialog ()
00400 {
00401 if ( nodialog )
00402 return;
00403
00404 kDebug(750) << "K3SpellConfig::fillinDialog";
00405
00406 cb0->setChecked( doSpellChecking() );
00407 cb1->setChecked( noRootAffix() );
00408 cb2->setChecked( runTogether() );
00409 encodingcombo->setCurrentIndex( encoding() );
00410 clientcombo->setCurrentIndex( client() );
00411
00412
00413 if ( iclient == KS_CLIENT_ISPELL )
00414 getAvailDictsIspell();
00415 else if ( iclient == KS_CLIENT_HSPELL )
00416 {
00417 langfnames.clear();
00418 dictcombo->clear();
00419 langfnames.append("");
00420 dictcombo->addItem( i18nc("@item Spelling dictionary", "Hebrew") );
00421 } else if ( iclient == KS_CLIENT_ZEMBEREK ) {
00422 langfnames.clear();
00423 dictcombo->clear();
00424 langfnames.append("");
00425 dictcombo->addItem( i18nc("@item Spelling dictionary", "Turkish") );
00426 }
00427 else if ( iclient == KS_CLIENT_ASPELL )
00428 getAvailDictsAspell();
00429 else
00430 getAvailDictsHunspell();
00431
00432
00433 int whichelement=-1;
00434
00435 if ( dictFromList() )
00436 whichelement = langfnames.indexOf(dictionary());
00437
00438 dictcombo->setMinimumWidth (dictcombo->sizeHint().width());
00439
00440 if (dictionary().isEmpty() || whichelement!=-1)
00441 {
00442 setDictFromList (true);
00443 if (whichelement!=-1)
00444 dictcombo->setCurrentIndex(whichelement);
00445 }
00446 else
00447
00448 if ( !langfnames.empty() )
00449 {
00450 setDictFromList( true );
00451 dictcombo->setCurrentIndex(0);
00452 }
00453 else
00454 setDictFromList( false );
00455
00456 sDictionary( dictFromList() );
00457 sPathDictionary( !dictFromList() );
00458
00459 }
00460
00461
00462 void K3SpellConfig::getAvailDictsIspell () {
00463
00464 langfnames.clear();
00465 dictcombo->clear();
00466 langfnames.append("");
00467 dictcombo->addItem( i18nc("@item Spelling dictionary",
00468 "<application>ISpell</application> Default") );
00469
00470
00471 QFileInfo dir ("/usr/lib/ispell");
00472 if (!dir.exists() || !dir.isDir())
00473 dir.setFile ("/usr/local/lib/ispell");
00474 if (!dir.exists() || !dir.isDir())
00475 dir.setFile ("/usr/local/share/ispell");
00476 if (!dir.exists() || !dir.isDir())
00477 dir.setFile ("/usr/share/ispell");
00478 if (!dir.exists() || !dir.isDir())
00479 dir.setFile ("/usr/pkg/lib");
00480
00481
00482
00483
00484
00485 if (!dir.exists() || !dir.isDir()) return;
00486
00487 kDebug(750) << "K3SpellConfig::getAvailDictsIspell "
00488 << dir.filePath() << " " << dir.path() << endl;
00489
00490 const QDir thedir (dir.filePath(),"*.hash");
00491 const QStringList entryList = thedir.entryList();
00492
00493 kDebug(750) << "K3SpellConfig" << thedir.path() << "\n";
00494 kDebug(750) << "entryList().count()="
00495 << entryList.count() << endl;
00496
00497 QStringList::const_iterator entryListItr = entryList.constBegin();
00498 const QStringList::const_iterator entryListEnd = entryList.constEnd();
00499
00500 for ( ; entryListItr != entryListEnd; ++entryListItr)
00501 {
00502 QString fname, lname, hname;
00503 fname = *entryListItr;
00504
00505
00506 if (fname.endsWith(".hash")) fname.remove (fname.length()-5,5);
00507
00508 if (interpret (fname, lname, hname) && langfnames.first().isEmpty())
00509 {
00510
00511
00512 langfnames.removeFirst();
00513 langfnames.prepend ( fname );
00514
00515 hname=i18nc("@item Spelling dictionary: %1 dictionary name, %2 file name",
00516 "Default - %1 [%2]", hname, fname);
00517
00518 dictcombo->setItemText (0,hname);
00519 }
00520 else
00521 {
00522 langfnames.append (fname);
00523 hname=hname+" ["+fname+']';
00524
00525 dictcombo->addItem (hname);
00526 }
00527 }
00528 }
00529
00530 void K3SpellConfig::getAvailDictsAspell () {
00531
00532 langfnames.clear();
00533 dictcombo->clear();
00534
00535 langfnames.append("");
00536 dictcombo->addItem (i18nc("@item Spelling dictionary",
00537 "<application>ASpell</application> Default"));
00538
00539
00540
00541 QFileInfo dir ("/usr/lib" KDELIBSUFF "/aspell");
00542 if (!dir.exists() || !dir.isDir())
00543 dir.setFile ("/usr/lib" KDELIBSUFF "/aspell-0.60");
00544 if (!dir.exists() || !dir.isDir())
00545 dir.setFile ("/usr/local/lib" KDELIBSUFF "/aspell");
00546 if (!dir.exists() || !dir.isDir())
00547 dir.setFile ("/usr/share/aspell");
00548 if (!dir.exists() || !dir.isDir())
00549 dir.setFile ("/usr/local/share/aspell");
00550 if (!dir.exists() || !dir.isDir())
00551 dir.setFile ("/usr/pkg/lib/aspell");
00552 if (!dir.exists() || !dir.isDir()) return;
00553
00554 kDebug(750) << "K3SpellConfig::getAvailDictsAspell "
00555 << dir.filePath() << " " << dir.path() << endl;
00556
00557 const QDir thedir (dir.filePath(),"*");
00558 const QStringList entryList = thedir.entryList();
00559
00560 kDebug(750) << "K3SpellConfig" << thedir.path() << "\n";
00561 kDebug(750) << "entryList().count()="
00562 << entryList.count() << endl;
00563
00564 QStringList::const_iterator entryListItr = entryList.constBegin();
00565 const QStringList::const_iterator entryListEnd = entryList.constEnd();
00566
00567 for ( ; entryListItr != entryListEnd; ++entryListItr)
00568 {
00569 QString fname, lname, hname;
00570 fname = *entryListItr;
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582 if ( !( fname.endsWith(".rws") || fname.endsWith(".multi") ) ) {
00583
00584 continue;
00585 }
00586 if (fname[0] != '.')
00587 {
00588
00589
00590 if (fname.endsWith(".multi")) fname.remove (fname.length()-6,6);
00591
00592 if (fname.endsWith(".rws")) fname.remove (fname.length()-4,4);
00593
00594 if (interpret (fname, lname, hname) && langfnames.first().isEmpty())
00595 {
00596
00597
00598 langfnames.erase ( langfnames.begin() );
00599 langfnames.prepend ( fname );
00600
00601 hname=i18nc("@item Spelling dictionary: %1 dictionary name",
00602 "Default - %1", hname);
00603
00604 dictcombo->setItemText (0,hname);
00605 }
00606 else
00607 {
00608 langfnames.append (fname);
00609 dictcombo->addItem (hname);
00610 }
00611 }
00612 }
00613 }
00614
00615 void K3SpellConfig::getAvailDictsHunspell () {
00616
00617 langfnames.clear();
00618 dictcombo->clear();
00619 langfnames.append("");
00620 dictcombo->addItem( i18nc("@item Spelling dictionary",
00621 "<application>Hunspell</application> Default") );
00622
00623
00624 QFileInfo dir ("/usr/share/myspell");
00625 if (!dir.exists() || !dir.isDir())
00626 dir.setFile ("/usr/share/hunspell");
00627 if (!dir.exists() || !dir.isDir()) return;
00628
00629 kDebug(750) << "K3SpellConfig::getAvailDictsHunspell "
00630 << dir.filePath() << " " << dir.path() << endl;
00631
00632 const QDir thedir (dir.filePath(),"*.dic");
00633 const QStringList entryList = thedir.entryList();
00634
00635 kDebug(750) << "K3SpellConfig" << thedir.path() << "\n";
00636 kDebug(750) << "entryList().count()="
00637 << entryList.count() << endl;
00638
00639 QStringList::const_iterator entryListItr = entryList.constBegin();
00640 const QStringList::const_iterator entryListEnd = entryList.constEnd();
00641
00642 for ( ; entryListItr != entryListEnd; ++entryListItr)
00643 {
00644 QString fname, lname, hname;
00645 fname = *entryListItr;
00646
00647
00648 if (fname.endsWith(".dic")) fname.remove (fname.length()-4,4);
00649
00650 if (interpret (fname, lname, hname) && langfnames.first().isEmpty())
00651 {
00652
00653
00654 langfnames.removeFirst();
00655 langfnames.prepend ( fname );
00656
00657 hname=i18nc("@item Spelling dictionary: %1 dictionary name, %2 file name",
00658 "Default - %1 [%2]", hname, fname);
00659
00660 dictcombo->setItemText (0,hname);
00661 }
00662 else
00663 {
00664 langfnames.append (fname);
00665 hname=hname+" ["+fname+']';
00666
00667 dictcombo->addItem (hname);
00668 }
00669 }
00670 }
00671
00672 void
00673 K3SpellConfig::fillDicts( QComboBox* box, QStringList* dictionaries )
00674 {
00675 langfnames.clear();
00676 if ( box ) {
00677 if ( iclient == KS_CLIENT_ISPELL ) {
00678 box->clear();
00679 langfnames.append("");
00680 box->addItem( i18nc("@item Spelling dictionary",
00681 "<application>ISpell</application> Default") );
00682
00683
00684 QFileInfo dir ("/usr/lib/ispell");
00685 if (!dir.exists() || !dir.isDir())
00686 dir.setFile ("/usr/local/lib/ispell");
00687 if (!dir.exists() || !dir.isDir())
00688 dir.setFile ("/usr/local/share/ispell");
00689 if (!dir.exists() || !dir.isDir())
00690 dir.setFile ("/usr/share/ispell");
00691 if (!dir.exists() || !dir.isDir())
00692 dir.setFile ("/usr/pkg/lib");
00693
00694
00695
00696
00697
00698 if (!dir.exists() || !dir.isDir()) return;
00699
00700 kDebug(750) << "K3SpellConfig::getAvailDictsIspell "
00701 << dir.filePath() << " " << dir.path() << endl;
00702
00703 const QDir thedir (dir.filePath(),"*.hash");
00704 const QStringList entryList = thedir.entryList();
00705
00706 kDebug(750) << "K3SpellConfig" << thedir.path() << "\n";
00707 kDebug(750) << "entryList().count()="
00708 << entryList.count() << endl;
00709
00710 QStringList::const_iterator entryListItr = entryList.constBegin();
00711 const QStringList::const_iterator entryListEnd = entryList.constEnd();
00712
00713 for ( ; entryListItr != entryListEnd; ++entryListItr)
00714 {
00715 QString fname, lname, hname;
00716 fname = *entryListItr;
00717
00718
00719 if (fname.endsWith(".hash")) fname.remove (fname.length()-5,5);
00720
00721 if (interpret (fname, lname, hname) && langfnames.first().isEmpty())
00722 {
00723
00724
00725 langfnames.erase ( langfnames.begin() );
00726 langfnames.prepend ( fname );
00727
00728 hname=i18nc("@item Spelling dictionary: %1 dictionary name, %2 file name",
00729 "Default - %1 [%2]", hname, fname);
00730
00731 box->setItemText (0,hname);
00732 }
00733 else
00734 {
00735 langfnames.append (fname);
00736 hname=hname+" ["+fname+']';
00737
00738 box->addItem (hname);
00739 }
00740 }
00741 } else if ( iclient == KS_CLIENT_HSPELL ) {
00742 box->clear();
00743 box->addItem( i18nc("@item Spelling dictionary", "Hebrew") );
00744 langfnames.append("");
00745 sChangeEncoding( KS_E_CP1255 );
00746 } else if ( iclient == KS_CLIENT_ZEMBEREK ) {
00747 box->clear();
00748 box->addItem( i18nc("@item Spelling dictionary", "Turkish") );
00749 langfnames.append("");
00750 sChangeEncoding( KS_E_UTF8 );
00751 } else if ( iclient == KS_CLIENT_ASPELL ) {
00752 box->clear();
00753 langfnames.append("");
00754 box->addItem (i18nc("@item Spelling dictionary",
00755 "<application>ASpell</application> Default"));
00756
00757
00758
00759 QFileInfo dir ("/usr/lib" KDELIBSUFF "/aspell");
00760 if (!dir.exists() || !dir.isDir())
00761 dir.setFile ("/usr/lib" KDELIBSUFF "/aspell-0.60");
00762 if (!dir.exists() || !dir.isDir())
00763 dir.setFile ("/usr/local/lib" KDELIBSUFF "/aspell");
00764 if (!dir.exists() || !dir.isDir())
00765 dir.setFile ("/usr/share/aspell");
00766 if (!dir.exists() || !dir.isDir())
00767 dir.setFile ("/usr/local/share/aspell");
00768 if (!dir.exists() || !dir.isDir())
00769 dir.setFile ("/usr/pkg/lib/aspell");
00770 if (!dir.exists() || !dir.isDir()) return;
00771
00772 kDebug(750) << "K3SpellConfig::getAvailDictsAspell "
00773 << dir.filePath() << " " << dir.path() << endl;
00774
00775 const QDir thedir (dir.filePath(),"*");
00776 const QStringList entryList = thedir.entryList();
00777
00778 kDebug(750) << "K3SpellConfig" << thedir.path() << "\n";
00779 kDebug(750) << "entryList().count()="
00780 << entryList.count() << endl;
00781
00782 QStringList::const_iterator entryListItr = entryList.constBegin();
00783 const QStringList::const_iterator entryListEnd = entryList.constEnd();
00784
00785 for ( ; entryListItr != entryListEnd; ++entryListItr)
00786 {
00787 QString fname, lname, hname;
00788 fname = *entryListItr;
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800 if ( !( fname.endsWith(".rws") || fname.endsWith(".multi") ) ) {
00801
00802 continue;
00803 }
00804 if (fname[0] != '.')
00805 {
00806
00807
00808 if (fname.endsWith(".multi")) fname.remove (fname.length()-6,6);
00809
00810 if (fname.endsWith(".rws")) fname.remove (fname.length()-4,4);
00811
00812 if (interpret (fname, lname, hname) && langfnames.first().isEmpty())
00813 {
00814
00815
00816 langfnames.erase ( langfnames.begin() );
00817 langfnames.prepend ( fname );
00818
00819 hname=i18nc("@item Spelling dictionary: %1 dictionary name",
00820 "Default - %1", hname);
00821
00822 box->setItemText (0,hname);
00823 }
00824 else
00825 {
00826 langfnames.append (fname);
00827 box->addItem (hname);
00828 }
00829 }
00830 }
00831 } else {
00832 box->clear();
00833 langfnames.append("");
00834 box->addItem( i18nc("@item Spelling dictionary",
00835 "<application>Hunspell</application> Default") );
00836
00837
00838 QFileInfo dir ("/usr/share/myspell");
00839 if (!dir.exists() || !dir.isDir())
00840 dir.setFile ("/usr/share/hunspell");
00841 if (!dir.exists() || !dir.isDir()) return;
00842
00843 kDebug(750) << "K3SpellConfig::getAvailDictsHunspell "
00844 << dir.filePath() << " " << dir.path() << endl;
00845
00846 const QDir thedir (dir.filePath(),"*.dic");
00847 const QStringList entryList = thedir.entryList();
00848
00849 kDebug(750) << "K3SpellConfig" << thedir.path() << "\n";
00850 kDebug(750) << "entryList().count()="
00851 << entryList.count() << endl;
00852
00853 QStringList::const_iterator entryListItr = entryList.constBegin();
00854 const QStringList::const_iterator entryListEnd = entryList.constEnd();
00855
00856 for ( ; entryListItr != entryListEnd; ++entryListItr)
00857 {
00858 QString fname, lname, hname;
00859 fname = *entryListItr;
00860
00861
00862 if (fname.endsWith(".dic")) fname.remove (fname.length()-4,4);
00863
00864 if (interpret (fname, lname, hname) && langfnames.first().isEmpty())
00865 {
00866
00867
00868 langfnames.erase ( langfnames.begin() );
00869 langfnames.prepend ( fname );
00870
00871 hname=i18nc("@item Spelling dictionary: %1 dictionary name, %2 file name",
00872 "Default - %1 [%2]", hname, fname);
00873
00874 box->setItemText (0,hname);
00875 }
00876 else
00877 {
00878 langfnames.append (fname);
00879 hname=hname+" ["+fname+']';
00880
00881 box->addItem (hname);
00882 }
00883 }
00884 }
00885 int whichelement = langfnames.indexOf(qsdict);
00886 if ( whichelement >= 0 ) {
00887 box->setCurrentIndex( whichelement );
00888 }
00889 if ( dictionaries )
00890 *dictionaries = langfnames;
00891 }
00892 }
00893
00894
00895
00896
00897
00898 void
00899 K3SpellConfig::setClient (int c)
00900 {
00901 iclient = c;
00902
00903 if (clientcombo)
00904 clientcombo->setCurrentIndex(c);
00905 }
00906
00907 void
00908 K3SpellConfig::setDoSpellChecking (bool b)
00909 {
00910 bdospellchecking=b;
00911
00912 if(cb0)
00913 cb0->setChecked(b);
00914 }
00915
00916 void
00917 K3SpellConfig::setNoRootAffix (bool b)
00918 {
00919 bnorootaffix=b;
00920
00921 if(cb1)
00922 cb1->setChecked(b);
00923 }
00924
00925 void
00926 K3SpellConfig::setRunTogether(bool b)
00927 {
00928 bruntogether=b;
00929
00930 if(cb2)
00931 cb2->setChecked(b);
00932 }
00933
00934 void
00935 K3SpellConfig::setDictionary (const QString s)
00936 {
00937 qsdict=s;
00938
00939 if (qsdict.length()>5)
00940 if ((signed)qsdict.indexOf(".hash")==(signed)qsdict.length()-5)
00941 qsdict.remove (qsdict.length()-5,5);
00942
00943
00944 if(dictcombo)
00945 {
00946 int whichelement=-1;
00947 if (dictFromList())
00948 {
00949 whichelement = langfnames.indexOf(s);
00950
00951 if(whichelement >= 0)
00952 {
00953 dictcombo->setCurrentIndex(whichelement);
00954 }
00955 }
00956 }
00957
00958
00959 }
00960
00961 void
00962 K3SpellConfig::setDictFromList (bool dfl)
00963 {
00964
00965 dictfromlist=dfl;
00966 }
00967
00968
00969
00970
00971
00972
00973
00974
00975 void
00976 K3SpellConfig::setEncoding (int enctype)
00977 {
00978 enc=enctype;
00979
00980 if(encodingcombo)
00981 encodingcombo->setCurrentIndex(enctype);
00982 }
00983
00984
00985
00986
00987 int
00988 K3SpellConfig::client () const
00989 {
00990 return iclient;
00991 }
00992
00993
00994 bool
00995 K3SpellConfig::doSpellChecking () const
00996 {
00997 return bdospellchecking;
00998 }
00999
01000 bool
01001 K3SpellConfig::noRootAffix () const
01002 {
01003 return bnorootaffix;
01004 }
01005
01006 bool
01007 K3SpellConfig::runTogether() const
01008 {
01009 return bruntogether;
01010 }
01011
01012 const
01013 QString K3SpellConfig::dictionary () const
01014 {
01015 return qsdict;
01016 }
01017
01018
01019
01020
01021
01022
01023
01024
01025 int
01026 K3SpellConfig::encoding () const
01027 {
01028 return enc;
01029 }
01030
01031 void
01032 K3SpellConfig::sRunTogether(bool)
01033 {
01034 setRunTogether (cb2->isChecked());
01035 emit configChanged();
01036 }
01037
01038 void
01039 K3SpellConfig::sNoAff(bool)
01040 {
01041 setNoRootAffix (cb1->isChecked());
01042 emit configChanged();
01043 }
01044
01045 void
01046 K3SpellConfig::sDoSpell()
01047 {
01048 setDoSpellChecking (cb0->isChecked());
01049 emit configChanged();
01050 }
01051
01052
01053
01054
01055
01056
01057
01058
01059
01060
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070
01071
01072
01073
01074
01075
01076
01077 void
01078 K3SpellConfig::sSetDictionary (int i)
01079 {
01080 setDictionary (langfnames[i]);
01081 setDictFromList (true);
01082 emit configChanged();
01083 }
01084
01085 void
01086 K3SpellConfig::sDictionary(bool on)
01087 {
01088 if (on)
01089 {
01090 dictcombo->setEnabled (true);
01091 setDictionary (langfnames[dictcombo->currentIndex()] );
01092 setDictFromList (true);
01093 }
01094 else
01095 {
01096 dictcombo->setEnabled (false);
01097 }
01098 emit configChanged();
01099 }
01100
01101 void
01102 K3SpellConfig::sPathDictionary(bool on)
01103 {
01104 return;
01105
01106
01107 if (on)
01108 {
01109
01110
01111
01112 setDictFromList (false);
01113 }
01114 else
01115 {
01116
01117
01118 }
01119 emit configChanged();
01120 }
01121
01122
01123 void K3SpellConfig::activateHelp( void )
01124 {
01125 sHelp();
01126 }
01127
01128 void K3SpellConfig::sHelp( void )
01129 {
01130 KToolInvocation::invokeHelp("configuration", "k3spell");
01131 }
01132
01133
01134
01135
01136
01137
01138
01139
01140
01141
01142
01143
01144
01145 void
01146 K3SpellConfig::operator= (const K3SpellConfig &ksc)
01147 {
01148
01149
01150 setDoSpellChecking (ksc.doSpellChecking());
01151 setNoRootAffix (ksc.noRootAffix());
01152 setRunTogether (ksc.runTogether());
01153 setDictionary (ksc.dictionary());
01154 setDictFromList (ksc.dictFromList());
01155
01156 setEncoding (ksc.encoding());
01157 setClient (ksc.client());
01158
01159 fillInDialog();
01160 }
01161
01162 void
01163 K3SpellConfig::setIgnoreList (const QStringList &_ignorelist)
01164 {
01165 ignorelist=_ignorelist;
01166 }
01167
01168 QStringList
01169 K3SpellConfig::ignoreList () const
01170 {
01171 return ignorelist;
01172 }
01173
01174 void
01175 K3SpellConfig::setReplaceAllList (const QStringList &_replacelist)
01176 {
01177 d->replacelist=_replacelist;
01178 }
01179
01180 QStringList
01181 K3SpellConfig::replaceAllList() const
01182 {
01183 return d->replacelist;
01184 }
01185
01186 #include "k3sconfig.moc"
01187
01188
01189