From: Angus Leeming Date: Tue, 17 Jul 2001 09:00:17 +0000 (+0000) Subject: Edwin's spellchecker3 patch X-Git-Tag: 1.6.10~21065 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=188ec04f7037803047fed9837263435f54acc585;p=features.git Edwin's spellchecker3 patch git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2261 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/ChangeLog b/src/ChangeLog index 6f975a09f3..d29299500e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2001-07-17 Edwin Leuven + + * sp_spell.C: repair language selection for pspell + 2001-07-12 Lars Gullik Bjønnes * lyxfunc.h: change more methods to begin with lower char. diff --git a/src/frontends/controllers/ChangeLog b/src/frontends/controllers/ChangeLog index 58507542d6..6e4301c02d 100644 --- a/src/frontends/controllers/ChangeLog +++ b/src/frontends/controllers/ChangeLog @@ -1,3 +1,11 @@ +2001-07-17 Angus Leeming + + * ControlSpellchecker.[Ch]: remove d-tor. + +2001-07-17 Edwin Leuven + + * ControlSpellchecker.[Ch]: remove member quit() and some cleaning + 2001-07-16 Juergen Vigna * ControlSpellchecker.C (show): use the lyxrc.use_pspell flag (if diff --git a/src/frontends/controllers/ControlSpellchecker.C b/src/frontends/controllers/ControlSpellchecker.C index 595ef6f1bc..d2961b50d0 100644 --- a/src/frontends/controllers/ControlSpellchecker.C +++ b/src/frontends/controllers/ControlSpellchecker.C @@ -54,34 +54,16 @@ using SigC::slot; ControlSpellchecker::ControlSpellchecker(LyXView & lv, Dialogs & d) - : ControlDialog(lv, d) + : ControlDialog(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; @@ -111,24 +93,12 @@ void ControlSpellchecker::show() 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(); } @@ -139,13 +109,14 @@ void ControlSpellchecker::check() 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_) { @@ -154,7 +125,7 @@ void ControlSpellchecker::check() view().partialUpdate(0); } - if (!speller_->alive()) quit(); + if (!speller_->alive()) clearParams(); result_ = speller_->check(word_); } @@ -223,32 +194,36 @@ void ControlSpellchecker::ignoreAll() 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); @@ -262,6 +237,7 @@ void ControlSpellchecker::quit() message_ = ""; stop_ = false; result_ = SpellBase::ISP_UNKNOWN; + speller_ = 0; } @@ -269,5 +245,3 @@ void ControlSpellchecker::options() { lv_.getDialogs()->showSpellcheckerPreferences(); } - - diff --git a/src/frontends/controllers/ControlSpellchecker.h b/src/frontends/controllers/ControlSpellchecker.h index 9b4cb72a59..767c344a1c 100644 --- a/src/frontends/controllers/ControlSpellchecker.h +++ b/src/frontends/controllers/ControlSpellchecker.h @@ -29,9 +29,6 @@ public: /// ControlSpellchecker(LyXView &, Dialogs &); - /// - ~ControlSpellchecker(); - /// replace word with replacement void replace(string const &); @@ -44,9 +41,6 @@ public: /// ignore all occurances of word void ignoreAll(); - /// quit spellchecker - void quit(); - /// stop checking void stop(); @@ -75,10 +69,9 @@ public: private: /// set the params before show or update - void show(); - + void setParams(); /// clean-up on hide. - void hide(); + void clearParams(); /// not needed. virtual void apply() {} @@ -112,5 +105,3 @@ private: }; #endif // CONTROLSPELLCHECKER_H - - diff --git a/src/frontends/xforms/FormSpellchecker.C b/src/frontends/xforms/FormSpellchecker.C index 8e1cde6f0f..1f1ac9a37f 100644 --- a/src/frontends/xforms/FormSpellchecker.C +++ b/src/frontends/xforms/FormSpellchecker.C @@ -13,6 +13,7 @@ #endif #include "xformsBC.h" +#include "xforms_helpers.h" #include "ControlSpellchecker.h" #include "FormSpellchecker.h" #include "form_spellchecker.h" @@ -36,6 +37,7 @@ void FormSpellchecker::build() bc().addReadOnly(dialog_->ignore); bc().addReadOnly(dialog_->start); bc().addReadOnly(dialog_->stop); + bc().addReadOnly(dialog_->browser); } void FormSpellchecker::update() @@ -45,9 +47,15 @@ void FormSpellchecker::update() fl_set_object_label(dialog_->text, w.c_str()); fl_clear_browser(dialog_->browser); fl_set_slider_value(dialog_->slider, 0); - clickline_ = -1 ; } +void FormSpellchecker::hide() +{ + clickline_ = -1; + + if (form() && form()->visible) + fl_hide_form(form()); +} ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long) { @@ -56,16 +64,16 @@ ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long) controller().replace(tmp); } else if (obj == dialog_->start) { controller().check(); - fl_deactivate_object(dialog_->start); - fl_set_object_lcol(dialog_->start, FL_INACTIVE); + stop(false); + } else if (obj == dialog_->stop) { + controller().stop(); + stop(true); } else if (obj == dialog_->ignore) { controller().check(); } else if (obj == dialog_->accept) { controller().ignoreAll(); } else if (obj == dialog_->insert) { controller().insert(); - } else if (obj == dialog_->done) { - controller().quit(); } else if (obj == dialog_->options) { controller().options(); } else if (obj == dialog_->browser) { @@ -84,22 +92,30 @@ ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long) void FormSpellchecker::partialUpdate(int id) { - // set suggestions - if (id==0) { - // set progress bar (always) + switch (id) { + case 0: + // set progress bar fl_set_slider_value(dialog_->slider, controller().getProgress()); - } else if (id==1) { + break; + case 1: + { + // set suggestions string w = controller().getWord(); fl_set_input(dialog_->input, w.c_str()); fl_set_object_label(dialog_->text, w.c_str()); fl_clear_browser(dialog_->browser); - while (!(w = controller().getSuggestion()).empty() ) { + while ( !(w = controller().getSuggestion()).empty() ) { fl_add_browser_line(dialog_->browser, w.c_str()); } - } else if (id==2) { + } + break; + case 2: + // show exit message fl_show_messages(controller().getMessage().c_str()); + hide(); } + } @@ -108,7 +124,14 @@ void FormSpellchecker::showMessage(const char * msg) fl_show_message(msg, "", ""); } -// note there is a button accept in session -// it is not clear whether this is ingoreall or replaceall - - +void FormSpellchecker::stop(bool stop) +{ + setEnabled(dialog_->start, stop); + setEnabled(dialog_->replace, !stop); + setEnabled(dialog_->ignore, !stop); + setEnabled(dialog_->accept, !stop); + setEnabled(dialog_->insert, !stop); + setEnabled(dialog_->stop, !stop); + setEnabled(dialog_->browser, !stop); + setEnabled(dialog_->input, !stop); +} diff --git a/src/frontends/xforms/FormSpellchecker.h b/src/frontends/xforms/FormSpellchecker.h index 171687a075..96f0b1d70a 100644 --- a/src/frontends/xforms/FormSpellchecker.h +++ b/src/frontends/xforms/FormSpellchecker.h @@ -28,19 +28,24 @@ public: private: /// not needed. - virtual void apply() {} + void apply() {} /// Build the dialog - virtual void build(); - /// not needed. - virtual void update(); - - /// update progress bar and suggestions + void build(); + /// + void update(); + /// + void hide(); + + /// enable/disable widgets when start/stop + void stop(bool); + + /// update progress bar, set suggestions, exit message void partialUpdate(int); /// show an error message void showMessage(const char * msg); - /// line clicked in browser, necessart for double clicking + /// line clicked in browser, necessary for double clicking int clickline_; /// Filter the inputs diff --git a/src/frontends/xforms/form_spellchecker.C b/src/frontends/xforms/form_spellchecker.C index a06a62c819..6afe9d1ea5 100644 --- a/src/frontends/xforms/form_spellchecker.C +++ b/src/frontends/xforms/form_spellchecker.C @@ -34,9 +34,10 @@ FD_form_spellchecker * FormSpellchecker::build_spellchecker() fdui->input = obj = fl_add_input(FL_NORMAL_INPUT, 80, 40, 220, 30, _("Replace")); fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_callback(obj, C_FormBaseInputCB, 0); - fdui->browser = obj = fl_add_browser(FL_SELECT_BROWSER, 80, 70, 220, 150, _("Near\nMisses")); + fdui->browser = obj = fl_add_browser(FL_SELECT_BROWSER, 80, 70, 220, 150, _("Suggestions")); fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lalign(obj, FL_ALIGN_LEFT); + fl_set_object_callback(obj, C_FormBaseInputCB, 0); { char const * const dummy = N_("Spellchecker Options...|#O"); fdui->options = obj = fl_add_button(FL_NORMAL_BUTTON, 310, 210, 220, 30, idex(_(dummy))); @@ -85,7 +86,7 @@ FD_form_spellchecker * FormSpellchecker::build_spellchecker() fl_set_button_shortcut(obj, scex(_(dummy)), 1); } fl_set_object_lsize(obj, FL_NORMAL_SIZE); - fl_set_object_callback(obj, C_FormBaseInputCB, 0); + fl_set_object_callback(obj, C_FormBaseCancelCB, 0); // xgettext:no-c-format obj = fl_add_box(FL_NO_BOX, 10, 250, 50, 20, _("0 %")); fl_set_object_lsize(obj, FL_NORMAL_SIZE); diff --git a/src/frontends/xforms/form_spellchecker.h b/src/frontends/xforms/form_spellchecker.h index 2f14d0cab7..f0106f191b 100644 --- a/src/frontends/xforms/form_spellchecker.h +++ b/src/frontends/xforms/form_spellchecker.h @@ -6,6 +6,7 @@ /** Callbacks, globals and object handlers **/ extern "C" void C_FormBaseInputCB(FL_OBJECT *, long); +extern "C" void C_FormBaseCancelCB(FL_OBJECT *, long); /**** Forms and Objects ****/ diff --git a/src/frontends/xforms/forms/form_spellchecker.fd b/src/frontends/xforms/forms/form_spellchecker.fd index 78310c5fdc..c4dd3aa2a9 100644 --- a/src/frontends/xforms/forms/form_spellchecker.fd +++ b/src/frontends/xforms/forms/form_spellchecker.fd @@ -76,13 +76,13 @@ alignment: FL_ALIGN_LEFT style: FL_NORMAL_STYLE size: FL_NORMAL_SIZE lcol: FL_BLACK -label: Near\nMisses +label: Suggestions shortcut: resize: FL_RESIZE_ALL gravity: FL_NoGravity FL_NoGravity name: browser -callback: -argument: +callback: C_FormBaseInputCB +argument: 0 -------------------- class: FL_BUTTON @@ -207,7 +207,7 @@ shortcut: resize: FL_RESIZE_ALL gravity: FL_NoGravity FL_NoGravity name: done -callback: C_FormBaseInputCB +callback: C_FormBaseCancelCB argument: 0 -------------------- diff --git a/src/sp_spell.C b/src/sp_spell.C index 55fdd04847..33db1f4cfa 100644 --- a/src/sp_spell.C +++ b/src/sp_spell.C @@ -74,19 +74,13 @@ extern void sigchldchecker(pid_t pid, int * status); PSpell::PSpell() + : els(0), sc(0), spell_error_object(0), flag(ISP_UNKNOWN) { - els = 0; - sc = 0; - spell_error_object = 0; - flag = ISP_UNKNOWN; } PSpell::PSpell(BufferParams const & params, string const & lang) + : els(0), sc(0), spell_error_object(0), flag(ISP_UNKNOWN) { - els = 0; - sc = 0; - spell_error_object = 0; - flag = ISP_UNKNOWN; initialize(params, lang); } @@ -102,9 +96,7 @@ PSpell::~PSpell() void PSpell::initialize(BufferParams const &, string const & lang) { PspellConfig * config = new_pspell_config(); - string code; - split(lang, code, '_'); - config->replace("language-tag", code.c_str()); + config->replace("language-tag", lang.c_str()); spell_error_object = new_pspell_manager(config); if (pspell_error_number(spell_error_object) != 0) { error_ = pspell_error_message(spell_error_object);