/**
* \file FormSpellchecker.C
- * Copyright 2001 The LyX Team.
- * See the file COPYING.
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
*
* \author Edwin Leuven
+ *
+ * Full author contact details are available in file CREDITS
*/
#include <config.h>
#pragma implementation
#endif
+#include "Tooltips.h"
#include "xformsBC.h"
#include "xforms_helpers.h"
#include "ControlSpellchecker.h"
#include "FormSpellchecker.h"
-#include "form_spellchecker.h"
+#include "forms/form_spellchecker.h"
+#include FORMS_H_LOCATION
-typedef FormCB<ControlSpellchecker, FormDB<FD_form_spellchecker> > base_class;
+typedef FormCB<ControlSpellchecker, FormDB<FD_spellchecker> > base_class;
-FormSpellchecker::FormSpellchecker(ControlSpellchecker & c)
- : base_class(c, _("LyX: Spellchecker")), clickline_(-1)
+FormSpellchecker::FormSpellchecker()
+ : base_class(_("Spellchecker"))
{}
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);
+ dialog_.reset(build_spellchecker(this));
+
+ fl_set_browser_dblclick_callback(dialog_->browser,
+ C_FormBaseInputCB, 2);
+
+ fl_set_input_return(dialog_->input, FL_RETURN_CHANGED);
+ setPrehandler(dialog_->input);
// Manage the buttons
- bc().setCancel(dialog_->done);
- bc().addReadOnly(dialog_->replace);
- bc().addReadOnly(dialog_->accept);
- bc().addReadOnly(dialog_->insert);
- bc().addReadOnly(dialog_->ignore);
- bc().addReadOnly(dialog_->start);
- bc().addReadOnly(dialog_->stop);
+ bc().setCancel(dialog_->button_close);
+ bc().addReadOnly(dialog_->button_replace);
+ bc().addReadOnly(dialog_->button_accept);
+ bc().addReadOnly(dialog_->button_add);
+ bc().addReadOnly(dialog_->button_ignore);
+ bc().addReadOnly(dialog_->button_start);
bc().addReadOnly(dialog_->browser);
+
+ // set up the tooltips
+ string str = _("Type replacement for unknown word "
+ " or select from suggestions.");
+ tooltips().init(dialog_->input, str);
+ str = _("List of replacement suggestions from dictionary.");
+ tooltips().init(dialog_->browser, str);
+ str = _("Start the spellingchecker.");
+ tooltips().init(dialog_->button_start, str);
+ str = _("Replace unknown word.");
+ tooltips().init(dialog_->button_replace, str);
+ str = _("Ignore unknown word.");
+ tooltips().init(dialog_->button_ignore, str);
+ str = _("Accept unknown word as known in this session.");
+ tooltips().init(dialog_->button_accept, str);
+ str = _("Add unknown word to personal dictionary.");
+ tooltips().init(dialog_->button_add, str);
}
void FormSpellchecker::update()
{
- string w = "";
- fl_set_input(dialog_->input, w.c_str());
- fl_set_object_label(dialog_->text, w.c_str());
+ fl_set_input(dialog_->input, "");
+ fl_set_object_label(dialog_->text, "");
fl_clear_browser(dialog_->browser);
fl_set_slider_value(dialog_->slider, 0);
+ start(true);
}
-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 const tmp = fl_get_input(dialog_->input);
+ if (obj == dialog_->button_replace) {
+ string const tmp = getString(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) {
+
+ } else if (obj == dialog_->button_start) {
+ if (start())
+ controller().check();
+ else
+ controller().stop();
+
+ } else if (obj == dialog_->button_ignore) {
controller().check();
- } else if (obj == dialog_->accept) {
+
+ } else if (obj == dialog_->button_accept) {
controller().ignoreAll();
- } else if (obj == dialog_->insert) {
+
+ } else if (obj == dialog_->button_add) {
controller().insert();
- } else if (obj == dialog_->options) {
- controller().options();
+
} else if (obj == dialog_->browser) {
- int const sel = fl_get_browser(dialog_->browser);
- if (sel < 1)
+ int const line = fl_get_browser(dialog_->browser);
+ string const tmp =
+ getString(dialog_->browser, line);
+ if (tmp.empty())
return ButtonPolicy::SMI_NOOP;
- if (clickline_ == sel) {
- string const tmp = fl_get_input(dialog_->input);
+ 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;
- char const * cptmp = fl_get_browser_line(dialog_->browser,
- clickline_);
- string const tmp = (cptmp) ? cptmp : "";
- fl_set_input(dialog_->input, tmp.c_str());
}
return ButtonPolicy::SMI_VALID;
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());
}
}
- break;
+ break;
case 2:
// show exit message
fl_show_messages(controller().getMessage().c_str());
hide();
}
-
}
-
+
void FormSpellchecker::showMessage(const char * msg)
{
fl_show_message(msg, "", "");
}
-void FormSpellchecker::stop(bool stop)
+bool FormSpellchecker::start(bool init)
{
- 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);
+ static bool running = false;
+
+ if (init) {
+ running = false;
+ } else {
+ running = !running;
+ }
+
+ fl_set_object_label(dialog_->button_start,
+ (running ? _("Stop") : _("Start")));
+ fl_set_button_shortcut(dialog_->button_start, "#S", 1);
+ fl_show_object(dialog_->button_start);
+
+ string const str = (running ? _("Stop the spellingchecker.") :
+ _("Start the spellingchecker."));
+ tooltips().init(dialog_->button_start, str);
+
+ setEnabled(dialog_->button_replace, running);
+ setEnabled(dialog_->button_ignore, running);
+ setEnabled(dialog_->button_accept, running);
+ setEnabled(dialog_->button_add, running);
+ setEnabled(dialog_->browser, running);
+ setEnabled(dialog_->input, running);
+
+ return running;
}