00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <qstringlist.h>
00023 #include <qpushbutton.h>
00024 #include <qlabel.h>
00025 #include <qlayout.h>
00026
00027 #include <kapplication.h>
00028 #include <klocale.h>
00029 #include <klistbox.h>
00030 #include <klineedit.h>
00031 #include <kbuttonbox.h>
00032 #include <kdebug.h>
00033 #include <qcombobox.h>
00034 #include <koSconfig.h>
00035 #include "koSpelldlg.h"
00036 #include <qcheckbox.h>
00037
00038 KOSpellDlg::KOSpellDlg(
00039 QWidget * parent,
00040 KOSpellConfig *_ksc,
00041 const char * name,
00042 int indexOfLanguage,
00043 bool _modal,
00044 bool _autocorrect
00045 )
00046 : KDialogBase(parent, name, _modal, i18n("Check Spelling"), Help|Cancel|User1, Cancel, true, i18n("&Stop"))
00047 {
00048 QWidget * w = new QWidget(this);
00049 setMainWidget(w);
00050 m_indexLanguage=0;
00051 m_previous = 0L;
00052
00053 wordlabel = new QLabel(w, "wordlabel");
00054 wordlabel->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
00055
00056 editbox = new KLineEdit(w, "editbox");
00057
00058 listbox = new KListBox(w, "listbox");
00059
00060
00061 QLabel * l_language = new QLabel(i18n("Language:"), w, "l_language");
00062
00063 language = new QComboBox( w, "language");
00064
00065 language->insertStringList( KOSpellConfig::listOfAspellLanguages());
00066 language->setCurrentItem( indexOfLanguage);
00067 if ( _autocorrect )
00068 {
00069 m_previous = new QCheckBox( i18n("Previous word"), w);
00070 }
00071
00072 if( _ksc->client() == KOS_CLIENT_ISPELL)
00073 {
00074 language->hide();
00075 l_language->hide();
00076 if( m_previous )
00077 m_previous->hide();
00078 }
00079
00080 QLabel * l_misspelled = new QLabel(i18n("Misspelled word:"), w, "l_misspelled");
00081
00082 QLabel * l_replacement = new QLabel(i18n("Replacement:"), w, "l_replacement");
00083
00084 QLabel * l_suggestions = new QLabel(i18n("Suggestions:"), w, "l_suggestions");
00085 l_suggestions->setAlignment(Qt::AlignLeft | Qt::AlignTop );
00086
00087 KButtonBox * buttonBox = new KButtonBox(w, Vertical);
00088
00089 QPushButton * b = 0L;
00090
00091 b = buttonBox->addButton(i18n("&Replace"), this, SLOT(replace()));
00092 connect(this, SIGNAL(ready(bool)), b, SLOT(setEnabled(bool)));
00093 qpbrep = b;
00094
00095 b = buttonBox->addButton(i18n("Replace &All"), this, SLOT(replaceAll()));
00096 connect(this, SIGNAL(ready(bool)), b, SLOT(setEnabled(bool)));
00097 qpbrepa = b;
00098
00099 b = buttonBox->addButton(i18n("&Ignore"), this, SLOT(ignore()));
00100 connect(this, SIGNAL(ready(bool)), b, SLOT(setEnabled(bool)));
00101
00102 b = buttonBox->addButton(i18n("I&gnore All"), this, SLOT(ignoreAll()));
00103 connect(this, SIGNAL(ready(bool)), this, SLOT(setEnabled(bool)));
00104
00105 b = buttonBox->addButton(i18n("A&dd"), this, SLOT(add()));
00106 connect(this, SIGNAL(ready(bool)), b, SLOT(setEnabled(bool)));
00107
00108 if ( _autocorrect )
00109 {
00110 b = buttonBox->addButton( i18n("AutoCorrection"), this, SLOT(addToAutoCorrect()));
00111 connect( this, SIGNAL( ready(bool)), b, SLOT(setEnabled(bool)));
00112 }
00113
00114 connect(this, SIGNAL(user1Clicked()), this, SLOT(stop()));
00115
00116 connect( language, SIGNAL( activated ( int )), this, SLOT( changeLanguage( int)));
00117
00118 buttonBox->layout();
00119
00120 QHBoxLayout * layout = new QHBoxLayout(w, KDialog::marginHint(), KDialog::spacingHint());
00121 QGridLayout * leftGrid = new QGridLayout(layout);
00122
00123 leftGrid->addWidget(l_misspelled, 0, 0);
00124 leftGrid->addWidget(l_replacement, 1, 0);
00125
00126 leftGrid->addWidget(l_suggestions, 2, 0);
00127 leftGrid->addMultiCellWidget(wordlabel, 0,0, 1, 2);
00128 leftGrid->addMultiCellWidget(editbox, 1, 1, 1, 2);
00129 leftGrid->addMultiCellWidget(listbox, 2, 2, 1, 2);
00130
00131 leftGrid->addWidget(l_language, 3, 0);
00132 leftGrid->addMultiCellWidget(language, 3, 3, 1, 2);
00133
00134 if( m_previous )
00135 leftGrid->addMultiCellWidget( m_previous, 4, 4, 0, 2);
00136
00137 layout->addWidget(buttonBox);
00138
00139 connect( editbox, SIGNAL(textChanged(const QString &)), SLOT(textChanged(const QString &)));
00140
00141 connect(editbox, SIGNAL(returnPressed()), SLOT(replace()));
00142 connect(listbox, SIGNAL(selected(int)), SLOT(selected(int)));
00143 connect(listbox, SIGNAL(highlighted(int)), SLOT(highlighted (int)));
00144
00145 QSize bs = sizeHint();
00146 if (bs.width() < bs.height()) {
00147 resize(9 * bs.height() / 6, bs.height());
00148 }
00149
00150 setHelp("spelldlg", "kspell");
00151
00152 emit(ready(false));
00153 }
00154
00155 void KOSpellDlg::addToAutoCorrect()
00156 {
00157 newword = editbox->text();
00158 done (KOS_ADDAUTOCORRECT);
00159 }
00160
00161 void KOSpellDlg::spellCheckAgain()
00162 {
00163 newword = editbox->text();
00164 done (KOS_CHECKAGAIN);
00165 }
00166
00167 void KOSpellDlg::changeLanguage( int index)
00168 {
00169 newword = word;
00170 m_indexLanguage = index;
00171 done (KOS_CHECKAGAINWITHNEWLANGUAGE);
00172 }
00173
00174 void KOSpellDlg::changeSuggList( QStringList *_lst )
00175 {
00176 sugg = _lst;
00177
00178 listbox->clear();
00179 emit(ready(true));
00180 listbox->insertStringList(*_lst);
00181 changeButtonState( _lst );
00182 }
00183
00184 void KOSpellDlg::init(const QString & _word, QStringList * _sugg)
00185 {
00186 sugg = _sugg;
00187 word = _word;
00188
00189 listbox->clear();
00190 listbox->insertStringList(*sugg);
00191
00192 kdDebug(30006) << "KOSpellDlg::init [" << word << "]" << endl;
00193
00194 emit(ready(true));
00195
00196 wordlabel->setText(_word);
00197
00198 if (sugg->count() == 0) {
00199 editbox->setText(_word);
00200 }
00201 changeButtonState( _sugg );
00202
00203 }
00204
00205 void KOSpellDlg::changeButtonState( QStringList * _sugg )
00206 {
00207 if (_sugg->count() == 0) {
00208 qpbrep->setEnabled(false);
00209 qpbrepa->setEnabled(false);
00210
00211 } else {
00212
00213 editbox->setText((*_sugg)[0]);
00214 qpbrep->setEnabled(true);
00215 qpbrepa->setEnabled(true);
00216 listbox->setCurrentItem (0);
00217 }
00218 }
00219
00220
00221 void KOSpellDlg::textChanged (const QString &)
00222 {
00223 qpbrep->setEnabled(true);
00224 qpbrepa->setEnabled(true);
00225 }
00226
00227 void KOSpellDlg::selected (int i)
00228 {
00229 highlighted (i);
00230 replace();
00231 }
00232
00233 void KOSpellDlg::highlighted (int i)
00234 {
00235 if (listbox->text (i)!=0)
00236 editbox->setText (listbox->text (i));
00237 }
00238
00239
00240
00241
00242
00243 void KOSpellDlg::closeEvent( QCloseEvent * )
00244 {
00245 cancel();
00246 }
00247
00248 void KOSpellDlg::done (int result)
00249 {
00250 emit command (result);
00251 }
00252 void KOSpellDlg::ignore()
00253 {
00254 newword = word;
00255 done (KOS_IGNORE);
00256 }
00257
00258 void KOSpellDlg::ignoreAll()
00259 {
00260 newword = word;
00261 done (KOS_IGNOREALL);
00262 }
00263
00264 void KOSpellDlg::add()
00265 {
00266 newword = word;
00267 done (KOS_ADD);
00268 }
00269
00270
00271 void KOSpellDlg::cancel()
00272 {
00273 newword=word;
00274 done (KOS_CANCEL);
00275 }
00276
00277 void KOSpellDlg::replace()
00278 {
00279 newword = editbox->text();
00280 done (KOS_REPLACE);
00281 }
00282
00283 void KOSpellDlg::stop()
00284 {
00285 newword = word;
00286 done (KOS_STOP);
00287 }
00288
00289 void KOSpellDlg::replaceAll()
00290 {
00291 newword = editbox->text();
00292 done (KOS_REPLACEALL);
00293 }
00294
00295 bool KOSpellDlg::previousWord() const
00296 {
00297 return m_previous ? m_previous->isChecked(): false;
00298 }
00299
00300 #include "koSpelldlg.moc"