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 <kcombobox.h>
00031 #include <klistview.h>
00032 #include <klineedit.h>
00033 #include <kpushbutton.h>
00034 #include <kprogress.h>
00035 #include <kbuttonbox.h>
00036 #include <kdebug.h>
00037
00038 #include "ksconfig.h"
00039 #include "kspelldlg.h"
00040 #include "kspellui.h"
00041
00042
00043 #define NONSORTINGCOLUMN 2
00044
00045 class KSpellDlg::KSpellDlgPrivate {
00046 public:
00047 KSpellUI* ui;
00048 KSpellConfig* spellConfig;
00049 };
00050
00051 KSpellDlg::KSpellDlg( QWidget * parent, const char * name, bool _progressbar, bool _modal )
00052 : KDialogBase(
00053 parent, name, _modal, i18n("Check Spelling"), Help|Cancel|User1,
00054 Cancel, true, i18n("&Finished")
00055 ),
00056 progressbar( false )
00057 {
00058 Q_UNUSED( _progressbar );
00059 d = new KSpellDlgPrivate;
00060 d->ui = new KSpellUI( this );
00061 setMainWidget( d->ui );
00062
00063 connect( d->ui->m_replaceBtn, SIGNAL(clicked()),
00064 this, SLOT(replace()));
00065 connect( this, SIGNAL(ready(bool)),
00066 d->ui->m_replaceBtn, SLOT(setEnabled(bool)) );
00067
00068 connect( d->ui->m_replaceAllBtn, SIGNAL(clicked()), this, SLOT(replaceAll()));
00069 connect(this, SIGNAL(ready(bool)), d->ui->m_replaceAllBtn, SLOT(setEnabled(bool)));
00070
00071 connect( d->ui->m_skipBtn, SIGNAL(clicked()), this, SLOT(ignore()));
00072 connect( this, SIGNAL(ready(bool)), d->ui->m_skipBtn, SLOT(setEnabled(bool)));
00073
00074 connect( d->ui->m_skipAllBtn, SIGNAL(clicked()), this, SLOT(ignoreAll()));
00075 connect( this, SIGNAL(ready(bool)), d->ui->m_skipAllBtn, SLOT(setEnabled(bool)));
00076
00077 connect( d->ui->m_addBtn, SIGNAL(clicked()), this, SLOT(add()));
00078 connect( this, SIGNAL(ready(bool)), d->ui->m_addBtn, SLOT(setEnabled(bool)));
00079
00080 connect( d->ui->m_suggestBtn, SIGNAL(clicked()), this, SLOT(suggest()));
00081 connect( this, SIGNAL(ready(bool)), d->ui->m_suggestBtn, SLOT(setEnabled(bool)) );
00082 d->ui->m_suggestBtn->hide();
00083
00084 connect(this, SIGNAL(user1Clicked()), this, SLOT(stop()));
00085
00086 connect( d->ui->m_replacement, SIGNAL(textChanged(const QString &)),
00087 SLOT(textChanged(const QString &)) );
00088
00089 connect( d->ui->m_replacement, SIGNAL(returnPressed()), SLOT(replace()) );
00090 connect( d->ui->m_suggestions, SIGNAL(selectionChanged(QListViewItem*)),
00091 SLOT(slotSelectionChanged(QListViewItem*)) );
00092
00093 connect( d->ui->m_suggestions, SIGNAL( doubleClicked ( QListViewItem *, const QPoint &, int ) ),
00094 SLOT( replace() ) );
00095 d->spellConfig = new KSpellConfig( 0, 0 ,0, false );
00096 d->spellConfig->fillDicts( d->ui->m_language );
00097 connect( d->ui->m_language, SIGNAL(activated(int)),
00098 d->spellConfig, SLOT(sSetDictionary(int)) );
00099 connect( d->spellConfig, SIGNAL(configChanged()),
00100 SLOT(slotConfigChanged()) );
00101
00102 setHelp( "spelldlg", "kspell" );
00103 setMinimumSize( sizeHint() );
00104 emit ready( false );
00105 }
00106
00107 KSpellDlg::~KSpellDlg()
00108 {
00109 delete d;
00110 }
00111
00112 void
00113 KSpellDlg::init( const QString & _word, QStringList * _sugg )
00114 {
00115 sugg = _sugg;
00116 word = _word;
00117
00118 d->ui->m_suggestions->clear();
00119 d->ui->m_suggestions->setSorting( NONSORTINGCOLUMN );
00120 for ( QStringList::Iterator it = _sugg->begin(); it != _sugg->end(); ++it ) {
00121 QListViewItem *item = new QListViewItem( d->ui->m_suggestions,
00122 d->ui->m_suggestions->lastItem() );
00123 item->setText( 0, *it );
00124 }
00125 kdDebug(750) << "KSpellDlg::init [" << word << "]" << endl;
00126
00127 emit ready( true );
00128
00129 d->ui->m_unknownWord->setText( _word );
00130
00131 if ( sugg->count() == 0 ) {
00132 d->ui->m_replacement->setText( _word );
00133 d->ui->m_replaceBtn->setEnabled( false );
00134 d->ui->m_replaceAllBtn->setEnabled( false );
00135 d->ui->m_suggestBtn->setEnabled( false );
00136 } else {
00137 d->ui->m_replacement->setText( (*sugg)[0] );
00138 d->ui->m_replaceBtn->setEnabled( true );
00139 d->ui->m_replaceAllBtn->setEnabled( true );
00140 d->ui->m_suggestBtn->setEnabled( false );
00141 d->ui->m_suggestions->setSelected( d->ui->m_suggestions->firstChild(), true );
00142 }
00143 }
00144
00145 void
00146 KSpellDlg::init( const QString& _word, QStringList* _sugg,
00147 const QString& context )
00148 {
00149 sugg = _sugg;
00150 word = _word;
00151
00152 d->ui->m_suggestions->clear();
00153 d->ui->m_suggestions->setSorting( NONSORTINGCOLUMN );
00154 for ( QStringList::Iterator it = _sugg->begin(); it != _sugg->end(); ++it ) {
00155 QListViewItem *item = new QListViewItem( d->ui->m_suggestions,
00156 d->ui->m_suggestions->lastItem() );
00157 item->setText( 0, *it );
00158 }
00159
00160 kdDebug(750) << "KSpellDlg::init [" << word << "]" << endl;
00161
00162 emit ready( true );
00163
00164 d->ui->m_unknownWord->setText( _word );
00165 d->ui->m_contextLabel->setText( context );
00166
00167 if ( sugg->count() == 0 ) {
00168 d->ui->m_replacement->setText( _word );
00169 d->ui->m_replaceBtn->setEnabled( false );
00170 d->ui->m_replaceAllBtn->setEnabled( false );
00171 d->ui->m_suggestBtn->setEnabled( false );
00172 } else {
00173 d->ui->m_replacement->setText( (*sugg)[0] );
00174 d->ui->m_replaceBtn->setEnabled( true );
00175 d->ui->m_replaceAllBtn->setEnabled( true );
00176 d->ui->m_suggestBtn->setEnabled( false );
00177 d->ui->m_suggestions->setSelected( d->ui->m_suggestions->firstChild(), true );
00178 }
00179 }
00180
00181 void
00182 KSpellDlg::slotProgress( unsigned int p )
00183 {
00184 if (!progressbar)
00185 return;
00186
00187 progbar->setValue( (int) p );
00188 }
00189
00190 void
00191 KSpellDlg::textChanged( const QString & )
00192 {
00193 d->ui->m_replaceBtn->setEnabled( true );
00194 d->ui->m_replaceAllBtn->setEnabled( true );
00195 d->ui->m_suggestBtn->setEnabled( true );
00196 }
00197
00198 void
00199 KSpellDlg::slotSelectionChanged( QListViewItem* item )
00200 {
00201 if ( item )
00202 d->ui->m_replacement->setText( item->text( 0 ) );
00203 }
00204
00205
00206
00207
00208
00209 void
00210 KSpellDlg::closeEvent( QCloseEvent * )
00211 {
00212 cancel();
00213 }
00214
00215 void
00216 KSpellDlg::done( int result )
00217 {
00218 emit command( result );
00219 }
00220 void
00221 KSpellDlg::ignore()
00222 {
00223 newword = word;
00224 done( KS_IGNORE );
00225 }
00226
00227 void
00228 KSpellDlg::ignoreAll()
00229 {
00230 newword = word;
00231 done( KS_IGNOREALL );
00232 }
00233
00234 void
00235 KSpellDlg::add()
00236 {
00237 newword = word;
00238 done( KS_ADD );
00239 }
00240
00241
00242 void
00243 KSpellDlg::cancel()
00244 {
00245 newword = word;
00246 done( KS_CANCEL );
00247 }
00248
00249 void
00250 KSpellDlg::replace()
00251 {
00252 newword = d->ui->m_replacement->text();
00253 done( KS_REPLACE );
00254 }
00255
00256 void
00257 KSpellDlg::stop()
00258 {
00259 newword = word;
00260 done( KS_STOP );
00261 }
00262
00263 void
00264 KSpellDlg::replaceAll()
00265 {
00266 newword = d->ui->m_replacement->text();
00267 done( KS_REPLACEALL );
00268 }
00269
00270 void
00271 KSpellDlg::suggest()
00272 {
00273 newword = d->ui->m_replacement->text();
00274 done( KS_SUGGEST );
00275 }
00276
00277 void
00278 KSpellDlg::slotConfigChanged()
00279 {
00280 d->spellConfig->writeGlobalSettings();
00281 done( KS_CONFIG );
00282 }
00283
00284 #include "kspelldlg.moc"