#include <config.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "Tooltips.h"
#include "xformsBC.h"
-#include "xforms_helpers.h"
-#include "ControlSpellchecker.h"
#include "FormSpellchecker.h"
+#include "ControlSpellchecker.h"
#include "forms/form_spellchecker.h"
+
+#include "forms_gettext.h"
+#include "Tooltips.h"
+#include "xforms_helpers.h"
#include "support/lstrings.h"
#include FORMS_H_LOCATION
-typedef FormCB<ControlSpellchecker, FormDB<FD_spellchecker> > base_class;
+using std::endl;
+typedef FormCB<ControlSpellchecker, FormDB<FD_spellchecker> > base_class;
FormSpellchecker::FormSpellchecker()
- : base_class(_("Spellchecker")), state_(STOP)
+ : base_class(_("Spellchecker"))
{}
dialog_.reset(build_spellchecker(this));
// Manage the buttons
- bc().setCancel(dialog_->button_close);
+ bcview().setCancel(dialog_->button_close);
// disable for read-only documents
- bc().addReadOnly(dialog_->button_replace);
+ bcview().addReadOnly(dialog_->button_replace);
// trigger an input event for cut&paste with middle mouse button.
setPrehandler(dialog_->input_replacement);
// set up the tooltips
string str = _("Type replacement for unknown word "
- " or select from suggestions.");
+ "or select from suggestions.");
tooltips().init(dialog_->input_replacement, str);
str = _("List of replacement suggestions from dictionary.");
tooltips().init(dialog_->browser_suggestions, str);
// Work-around xforms' bug; enable tooltips for browser widgets.
setPrehandler(dialog_->browser_suggestions);
- str = _("Start the spellingchecker.");
- tooltips().init(dialog_->button_start, str);
str = _("Replace unknown word.");
tooltips().init(dialog_->button_replace, str);
str = _("Ignore unknown word.");
}
-void FormSpellchecker::updateState(State state)
+void FormSpellchecker::partialUpdate(int s)
{
+ ControlSpellchecker::State const state =
+ static_cast<ControlSpellchecker::State>(s);
+
switch (state) {
- case START:
- fl_set_slider_value(dialog_->slider_progress, 0.0);
- fl_set_object_label(dialog_->slider_progress, "0 %");
- break;
- case RUNNING:
- {
- controller().check();
+ case ControlSpellchecker::SPELL_FOUND_WORD: {
+ // Set suggestions.
+ string w = controller().getWord();
+ fl_set_input(dialog_->input_replacement, w.c_str());
+ fl_set_object_label(dialog_->text_unknown, w.c_str());
+ fl_clear_browser(dialog_->browser_suggestions);
+ while (!(w = controller().getSuggestion()).empty()) {
+ fl_add_browser_line(dialog_->browser_suggestions,
+ w.c_str());
+ }
+ // Fall through...
+ }
+ case ControlSpellchecker::SPELL_PROGRESSED: {
int const progress = controller().getProgress();
if (progress == 0)
break;
fl_set_slider_bounds(dialog_->slider_progress, 0.0, total);
fl_set_slider_value(dialog_->slider_progress, wordcount);
fl_set_object_label(dialog_->slider_progress, label.c_str());
+ fl_redraw_object(dialog_->slider_progress);
break;
}
- case STOP:
- {
- controller().stop();
-
- double const wordcount = controller().getCount();
-
- // set slider 'finished' status
- fl_set_slider_bounds(dialog_->slider_progress, 0.0, wordcount);
- fl_set_slider_value(dialog_->slider_progress, wordcount);
- fl_set_object_label(dialog_->slider_progress, "100 %");
- break;
- }
}
-
- bool const state_change = state_ != state;
- state_ = state;
-
- if (!state_change)
- return;
-
- bool const set_running = (state == RUNNING);
- string const label = set_running ? _("Stop") : _("Start");
-
- fl_set_object_label(dialog_->button_start, label.c_str());
- fl_set_button_shortcut(dialog_->button_start, "#S", 1);
- fl_redraw_object(dialog_->button_start);
-
- string const tip = set_running ?
- _("Stop the spellingchecker.") :
- _("Start the spellingchecker.");
- tooltips().init(dialog_->button_start, tip);
-
- setEnabled(dialog_->button_replace, set_running);
- setEnabled(dialog_->button_ignore, set_running);
- setEnabled(dialog_->button_accept, set_running);
- setEnabled(dialog_->button_add, set_running);
- setEnabled(dialog_->browser_suggestions, set_running);
- setEnabled(dialog_->input_replacement, set_running);
-}
-
-
-void FormSpellchecker::update()
-{
- // clear input fields
- fl_set_input(dialog_->input_replacement, "");
- fl_set_object_label(dialog_->text_unknown, "");
- fl_clear_browser(dialog_->browser_suggestions);
-
- // reset dialog and buttons into start condition
- updateState(START);
}
ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * ob, long ob_value)
{
- if (ob == dialog_->button_start) {
- updateState(RUNNING);
-
- } else if (ob == dialog_->button_replace) {
+ if (ob == dialog_->button_replace) {
string const tmp = getString(dialog_->input_replacement);
controller().replace(tmp);
return ButtonPolicy::SMI_VALID;
}
-
-
-void FormSpellchecker::partialUpdate(int id)
-{
- switch (id) {
- case 1:
- {
- // Set suggestions.
- string w = controller().getWord();
- fl_set_input(dialog_->input_replacement, w.c_str());
- fl_set_object_label(dialog_->text_unknown, w.c_str());
- fl_clear_browser(dialog_->browser_suggestions);
- while (!(w = controller().getSuggestion()).empty()) {
- fl_add_browser_line(dialog_->browser_suggestions,
- w.c_str());
- }
- break;
- }
- case 2:
- // End of spell checking.
- updateState(STOP);
- break;
- }
-}