]> git.lyx.org Git - features.git/commitdiff
Edwin's spellchecker3 patch
authorAngus Leeming <leeming@lyx.org>
Tue, 17 Jul 2001 09:00:17 +0000 (09:00 +0000)
committerAngus Leeming <leeming@lyx.org>
Tue, 17 Jul 2001 09:00:17 +0000 (09:00 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2261 a592a061-630c-0410-9148-cb99ea01b6c8

src/ChangeLog
src/frontends/controllers/ChangeLog
src/frontends/controllers/ControlSpellchecker.C
src/frontends/controllers/ControlSpellchecker.h
src/frontends/xforms/FormSpellchecker.C
src/frontends/xforms/FormSpellchecker.h
src/frontends/xforms/form_spellchecker.C
src/frontends/xforms/form_spellchecker.h
src/frontends/xforms/forms/form_spellchecker.fd
src/sp_spell.C

index 6f975a09f36d3c5ff18a054030684991a6d30b77..d29299500ebe9127fb011ea18aec5449946b2a65 100644 (file)
@@ -1,3 +1,7 @@
+2001-07-17  Edwin Leuven  <leuven@fee.uva.nl>
+
+       * sp_spell.C: repair language selection for pspell
+
 2001-07-12  Lars Gullik Bjønnes  <larsbj@birdstep.com>
 
        * lyxfunc.h: change more methods to begin with lower char.
index 58507542d6eb93adb05e79791321d892a0b3baeb..6e4301c02d951559c6524b58bafc877abc2a27fe 100644 (file)
@@ -1,3 +1,11 @@
+2001-07-17  Angus Leeming  <a.leeming@ic.ac.uk>
+
+       * ControlSpellchecker.[Ch]: remove d-tor.
+
+2001-07-17  Edwin Leuven  <leuven@fee.uva.nl>
+
+       * ControlSpellchecker.[Ch]: remove member quit() and some cleaning
+       
 2001-07-16  Juergen Vigna  <jug@sad.it>
 
        * ControlSpellchecker.C (show): use the lyxrc.use_pspell flag (if
index 595ef6f1bcd5c85334254c461e07fe750e114ad3..d2961b50d020b49ef21adcee623e1638f08a9937 100644 (file)
 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;
@@ -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();
 }
-
-
index 9b4cb72a599617a160d27ce0ef3e01e02c9df70e..767c344a1c4f44280e06be94e8fc2b04cb48205b 100644 (file)
@@ -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
-
-
index 8e1cde6f0f8b5e986f0ffa3ef901fd62f35c6048..1f1ac9a37fdfe6863b6176e119e5cbcd756f90ad 100644 (file)
@@ -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);
+}
index 171687a075779fbc3d760a3d3b7c17542dbf2663..96f0b1d70a1cc29f3e37cec14b0907b69904ac29 100644 (file)
@@ -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
index a06a62c8198e12c80d003d7489ad61e153f82227..6afe9d1ea5f14dd7448cf1460f12174a7718496b 100644 (file)
@@ -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);
index 2f14d0cab72f60255136ec95ebe76b9a3e5e1475..f0106f191be695b4824c0bd693acb0dc4e10c184 100644 (file)
@@ -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 ****/
index 78310c5fdcd4128ff16d766080db89b9a0c3852a..c4dd3aa2a9d12c1a118ab3a0cc614ffe896ed252 100644 (file)
@@ -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
 
 --------------------
index 55fdd0484762fbe806901732ba9d558126b6490a..33db1f4cfa1a848713618916fafb7752946bc23e 100644 (file)
@@ -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);