X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fcontrollers%2FControlSpellchecker.C;h=0465137acbef8bb1ba0f1e24cbbed20bb3c8e91b;hb=b1dd13a9c2f6898e68339e19fcf2c55ae5f6426b;hp=0bd1ce36e7aecd861d073c6c2a1a3e97b48e90f9;hpb=609734fc4668e7900e9f2bcc74595500f151f030;p=lyx.git diff --git a/src/frontends/controllers/ControlSpellchecker.C b/src/frontends/controllers/ControlSpellchecker.C index 0bd1ce36e7..0465137acb 100644 --- a/src/frontends/controllers/ControlSpellchecker.C +++ b/src/frontends/controllers/ControlSpellchecker.C @@ -1,5 +1,5 @@ /* This file is part of - * ====================================================== + * ====================================================== * * LyX, The Document Processor * @@ -17,47 +17,45 @@ #pragma implementation #endif -#ifdef HAVE_SYS_SELECT_H -# ifdef HAVE_STRINGS_H - // is needed at least on AIX because FD_ZERO uses bzero(). - // BUT we cannot include both string.h and strings.h on Irix 6.5 :( -# ifdef _AIX -# include -# endif -# endif -#include -#endif - +#include "ControlSpellchecker.h" #include "buffer.h" #include "lyxrc.h" #include "BufferView.h" -#include "LyXView.h" +#include "lyxtext.h" #include "gettext.h" -#include "support/lstrings.h" #include "language.h" #include "ViewBase.h" -#include "ButtonControllerBase.h" -#include "ControlSpellchecker.h" #include "Dialogs.h" #include "Liason.h" +#include "frontends/LyXView.h" + +#include "support/lstrings.h" + # include "sp_ispell.h" #ifdef USE_PSPELL # include "sp_pspell.h" #endif -#include "debug.h" +#include // needed by at least on freebsd -using SigC::slot; +#ifdef HAVE_SYS_SELECT_H +# ifdef HAVE_STRINGS_H + // is needed at least on AIX because FD_ZERO uses bzero(). + // BUT we cannot include both string.h and strings.h on Irix 6.5 :( +# ifdef _AIX +# include +# endif +# endif +#include +#endif ControlSpellchecker::ControlSpellchecker(LyXView & lv, Dialogs & d) - : ControlDialog(lv, d), + : ControlDialogBD(lv, d), rtl_(false), newval_(0.0), oldval_(0), newvalue_(0), count_(0), stop_(false), result_(SpellBase::ISP_OK), speller_(0) -{ - d_.showSpellchecker.connect(SigC::slot(this, &ControlSpellchecker::show)); -} +{} void ControlSpellchecker::setParams() @@ -69,18 +67,18 @@ void ControlSpellchecker::setParams() if (lyxrc.use_pspell) { tmp = (lyxrc.isp_use_alt_lang) ? lyxrc.isp_alt_lang : lv_.buffer()->params.language->code(); - + speller_ = new PSpell(lv_.view()->buffer()->params, tmp); } else { #endif tmp = (lyxrc.isp_use_alt_lang) ? lyxrc.isp_alt_lang : lv_.buffer()->params.language->lang(); - + speller_ = new ISpell(lv_.view()->buffer()->params, tmp); #ifdef USE_PSPELL } #endif - + if (lyxrc.isp_use_alt_lang) { Language const * lang = languages.getLanguage(tmp); if (lang) @@ -88,7 +86,7 @@ void ControlSpellchecker::setParams() } else { rtl_ = lv_.buffer()->params.language->RightToLeft(); } - + if (speller_->error() != 0) { #if 0 message_ = speller_->error(); @@ -106,16 +104,21 @@ void ControlSpellchecker::check() { result_ = SpellBase::ISP_OK; stop_ = false; - + + // clear any old selection + LyXText * text = lv_.view()->getLyXText(); + lv_.view()->toggleSelection(true); + lv_.view()->update(text, BufferView::SELECT); + while ((result_==SpellBase::ISP_OK || result_==SpellBase::ISP_IGNORE) && !stop_) { word_ = lv_.view()->nextWord(newval_); - + if (word_.empty()) { clearParams(); break; } - + ++count_; // Update slider if and only if value has changed @@ -125,12 +128,12 @@ void ControlSpellchecker::check() // set progress bar view().partialUpdate(0); } - + if (!speller_->alive()) clearParams(); - + result_ = speller_->check(word_); } - + if (!stop_ && !word_.empty()) lv_.view()->selectLastWord(); @@ -168,12 +171,12 @@ string ControlSpellchecker::getSuggestion() // segfaults when nextMiss is 0 string tmp; char const * w = speller_->nextMiss(); - + if (w!=0) { tmp = w; if (rtl_) std::reverse(tmp.begin(), tmp.end()); } - + return tmp; } @@ -203,7 +206,7 @@ void ControlSpellchecker::stop() void ControlSpellchecker::clearParams() { if (!speller_) return; - + if (speller_->alive()) { speller_->close(); message_ = tostr(count_); @@ -226,29 +229,24 @@ void ControlSpellchecker::clearParams() // make sure that the dialog is not launched emergency_exit_ = true; } - + delete speller_; - + lv_.view()->endOfSpellCheck(); - // show closing message - view().partialUpdate(2); + // show closing message if any words were checked. + if (count_ > 0) + view().partialUpdate(2); // reset values to initial rtl_ = false; - word_ = ""; + word_.erase(); newval_ = 0.0; oldval_ = 0; newvalue_ = 0; count_ = 0; - message_ = ""; + message_.erase(); stop_ = false; result_ = SpellBase::ISP_OK; speller_ = 0; } - - -void ControlSpellchecker::options() -{ - lv_.getDialogs()->showSpellcheckerPreferences(); -}