#include "Dialogs.h"
#include "Liason.h"
+# include "sp_ispell.h"
#ifdef USE_PSPELL
# include "sp_pspell.h"
-#else
-# include "sp_ispell.h"
#endif
#include "debug.h"
using SigC::slot;
ControlSpellchecker::ControlSpellchecker(LyXView & lv, Dialogs & d)
- : ControlDialog<ControlConnectBD>(lv, d)
+ : ControlDialog<ControlConnectBD>(lv, d),
+ rtl_(false), newval_(0.0), oldval_(0), newvalue_(0), count_(0),
+ stop_(false), result_(SpellBase::ISP_UNKNOWN), speller_(0)
{
d_.showSpellchecker.connect(SigC::slot(this, &ControlSpellchecker::show));
-
- rtl_ = false;
- word_ = "";
- newval_ = 0.0;
- oldval_ = 0;
- newvalue_ = 0;
- count_ = 0;
- message_ = "";
- stop_ = false;
- result_ = SpellBase::ISP_UNKNOWN;
- speller_ = 0;
-
-}
-
-
-ControlSpellchecker::~ControlSpellchecker()
-{
}
-void ControlSpellchecker::show()
+void ControlSpellchecker::setParams()
{
- if (isBufferDependent() && !lv_.view()->available())
- return;
-
if (!speller_) {
// create spell object
+ string tmp;
#ifdef USE_PSPELL
- string tmp = (lyxrc.isp_use_alt_lang) ?
- lyxrc.isp_alt_lang : lv_.buffer()->params.language->code();
-
- speller_ = new PSpell(lv_.view()->buffer()->params, tmp);
-#else
- string tmp = (lyxrc.isp_use_alt_lang) ?
- lyxrc.isp_alt_lang : lv_.buffer()->params.language->lang();
-
- speller_ = new ISpell(lv_.view()->buffer()->params, tmp);
+ 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) {
if (speller_->error() != 0) {
message_ = speller_->error();
+ // show error message
view().partialUpdate(2);
- hide();
+ clearParams();
return;
}
}
-
- bc().readOnly(isReadonly());
- view().show();
-}
-
-
-void ControlSpellchecker::hide()
-{
- delete speller_;
- speller_ = 0;
-
- disconnect();
- view().hide();
}
while (result_!=SpellBase::ISP_MISSED && !stop_) {
word_ = lv_.view()->nextWord(newval_);
+
if (word_.empty()) {
- quit();
+ clearParams();
break;
}
++count_;
-
+
// Update slider if and only if value has changed
newvalue_ = int(100.0*newval_);
if (newvalue_!= oldval_) {
view().partialUpdate(0);
}
- if (!speller_->alive()) quit();
+ if (!speller_->alive()) clearParams();
result_ = speller_->check(word_);
}
void ControlSpellchecker::insert()
{
speller_->insert(word_);
+ check();
}
void ControlSpellchecker::stop()
{
stop_ = true;
+ lv_.view()->endOfSpellCheck();
}
-void ControlSpellchecker::quit()
+void ControlSpellchecker::clearParams()
{
+ if (!speller_) return;
+
if (speller_->alive()) {
speller_->close();
message_ = tostr(count_);
if (count_ != 1) {
message_ += _(" words checked.");
+
} else {
message_ += _(" word checked.");
}
message_ = "\n" + message_;
message_ = _("Spellchecking completed! ") + message_;
+
} else {
speller_->cleanUp();
message_ = _("The spell checker has died for some reason.\n"
- "Maybe it has been killed.");
+ "Maybe it has been killed.");
}
-
+
+ delete speller_;
+
lv_.view()->endOfSpellCheck();
- // hide dialog, disconnect and delete speller
- hide();
-
// show closing message
view().partialUpdate(2);
message_ = "";
stop_ = false;
result_ = SpellBase::ISP_UNKNOWN;
+ speller_ = 0;
}
{
lv_.getDialogs()->showSpellcheckerPreferences();
}
-
-