]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormSpellchecker.C
use exclicit temp var
[lyx.git] / src / frontends / xforms / FormSpellchecker.C
index b363e6c5b94bf3c5a5f36648d0b0cca19f7724e4..97790852676ce535d728a5c91660e0500a15557f 100644 (file)
@@ -21,7 +21,7 @@
 typedef FormCB<ControlSpellchecker, FormDB<FD_form_spellchecker> > base_class;
 
 FormSpellchecker::FormSpellchecker(ControlSpellchecker & c)
-       : base_class(c, _("LyX: Spellchecker")), clickline_(-1)
+       : base_class(c, _("LyX: Spellchecker"), false)
 {}
 
 
@@ -32,6 +32,9 @@ void FormSpellchecker::build()
        fl_set_slider_bounds(dialog_->slider, 0.0, 100.0);
        fl_set_slider_step(dialog_->slider, 1.0);
 
+       fl_set_browser_dblclick_callback(dialog_->browser,
+                                        C_FormBaseInputCB, 2);
+
        // Manage the buttons
        bc().setCancel(dialog_->done);
        bc().addReadOnly(dialog_->replace);
@@ -45,49 +48,58 @@ void FormSpellchecker::build()
 
 void FormSpellchecker::update()
 {
-       string w = "";
+       string const w;
        fl_set_input(dialog_->input, w.c_str());
        fl_set_object_label(dialog_->text, w.c_str());
        fl_clear_browser(dialog_->browser);
        fl_set_slider_value(dialog_->slider, 0);
 }
 
-void FormSpellchecker::hide()
-{
-       clickline_ = -1;
-       
-       if (form() && form()->visible)
-               fl_hide_form(form());
-}
-
-ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long)
+ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long val)
 {
        if (obj == dialog_->replace) {
-               string tmp = fl_get_input(dialog_->input);
+               string const tmp = getStringFromInput(dialog_->input);
                controller().replace(tmp);
+
        } else if (obj == dialog_->start) {
                controller().check();
                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_->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 line = fl_get_browser(dialog_->browser);
+               string const tmp =
+                       getStringFromBrowser(dialog_->browser, line);
+               if (tmp.empty())
+                       return ButtonPolicy::SMI_NOOP;
+
+               if (val != 2) {
+                       // single-click
+                       // place the chosen string in the input as feedback
+                       fl_set_input(dialog_->input, tmp.c_str());
+
+               } else {
+                       // double-click
                        controller().replace(tmp);
+                       // reset the browser so that the following
+                       // single-click callback doesn't do anything
+                       fl_deselect_browser_line(dialog_->browser, line);
                }
-               clickline_ = sel;
-               string tmp = fl_get_browser_line(dialog_->browser, clickline_);
-               fl_set_input(dialog_->input, tmp.c_str());
        }
 
        return ButtonPolicy::SMI_VALID;
@@ -108,7 +120,7 @@ void FormSpellchecker::partialUpdate(int id)
                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());
                }
        }