]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormSpellchecker.C
John's spellchecker patch plus a new helper function getStringFromBrowser.
[lyx.git] / src / frontends / xforms / FormSpellchecker.C
index 8e1cde6f0f8b5e986f0ffa3ef901fd62f35c6048..d13d6fe23b89f445e0ad187f0d779a377d672d2f 100644 (file)
@@ -13,6 +13,7 @@
 #endif
 
 #include "xformsBC.h"
+#include "xforms_helpers.h"
 #include "ControlSpellchecker.h"
 #include "FormSpellchecker.h"
 #include "form_spellchecker.h"
@@ -28,6 +29,9 @@ void FormSpellchecker::build()
 {
        dialog_.reset(build_spellchecker());
        
+       fl_set_slider_bounds(dialog_->slider, 0.0, 100.0);
+       fl_set_slider_step(dialog_->slider, 1.0);
+
        // Manage the buttons
        bc().setCancel(dialog_->done);
        bc().addReadOnly(dialog_->replace);
@@ -36,6 +40,7 @@ void FormSpellchecker::build()
        bc().addReadOnly(dialog_->ignore);
        bc().addReadOnly(dialog_->start);
        bc().addReadOnly(dialog_->stop);
+       bc().addReadOnly(dialog_->browser);
 }
 
 void FormSpellchecker::update()
@@ -45,37 +50,49 @@ 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)
 {
        if (obj == dialog_->replace) {
-               string tmp = fl_get_input(dialog_->input);
+               string const tmp = fl_get_input(dialog_->input);
                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) {
-               int sel = fl_get_browser(dialog_->browser);
-               if (clickline_==sel) {
-                       string tmp = fl_get_input(dialog_->input);
+               int const sel = fl_get_browser(dialog_->browser);
+               if (sel < 1)
+                       return ButtonPolicy::SMI_NOOP;
+
+               if (clickline_ == sel) {
+                       string const tmp = fl_get_input(dialog_->input);
                        controller().replace(tmp);
                }
+
                clickline_ = sel;
-               string tmp = fl_get_browser_line(dialog_->browser, clickline_);
+               char const * cptmp = fl_get_browser_line(dialog_->browser,
+                                                        clickline_);
+               string const tmp = (cptmp) ? cptmp : "";
                fl_set_input(dialog_->input, tmp.c_str());
        }
 
@@ -84,22 +101,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 +133,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);
+}