Close the spell checker after all lines have been checked rather than only once there are no errors remaining. Closes #1442.

Originally committed to SVN as r6410.
This commit is contained in:
Thomas Goyne 2012-02-01 00:47:57 +00:00
parent 3af57cdbcd
commit 04cc422391
2 changed files with 20 additions and 9 deletions

View file

@ -56,6 +56,9 @@ DialogSpellChecker::DialogSpellChecker(agi::Context *context)
: wxDialog(context->parent, -1, _("Spell Checker"))
, context(context)
, spellchecker(SpellCheckerFactory::GetSpellChecker())
, start_line(0)
, active_line(0)
, has_looped(false)
{
SetIcon(BitmapToIcon(GETIMAGE(spellcheck_toolbutton_24)));
@ -203,16 +206,21 @@ void DialogSpellChecker::OnClose(wxCommandEvent&) {
}
bool DialogSpellChecker::FindNext() {
AssDialogue *active_line = context->selectionController->GetActiveLine();
AssDialogue *real_active_line = context->selectionController->GetActiveLine();
// User has changed the active line; restart search from this position
if (real_active_line != active_line) {
active_line = real_active_line;
has_looped = false;
start_line = active_line;
}
int start_pos = context->editBox->GetReverseUnicodePosition(context->editBox->GetCurrentPos());
int commit_id = -1;
if (CheckLine(active_line, start_pos, &commit_id))
return true;
AssDialogue *start_line = active_line;
std::list<AssEntry*>::iterator it = find(context->ass->Line.begin(), context->ass->Line.end(), active_line);
bool has_looped = false;
// Note that it is deliberate that the start line is checked twice, as if
// the cursor is past the first misspelled word in the current line, that
@ -298,4 +306,3 @@ void DialogSpellChecker::SetWord(wxString const& word) {
add_button->Enable(spellchecker->CanAddWord(word));
}

View file

@ -58,16 +58,20 @@ class DialogSpellChecker : public wxDialog {
wxArrayString dictionary_lang_codes;
int word_start; ///< Start index of the current misspelled word
int word_end; ///< End index of the current misspelled word
int word_end; ///< End index of the current misspelled word
wxTextCtrl *orig_word; ///< The word being corrected
wxTextCtrl *orig_word; ///< The word being corrected
wxTextCtrl *replace_word; ///< The replacement that will be used if "Replace" is clicked
wxListBox *suggest_list; ///< The list of suggested replacements
wxListBox *suggest_list; ///< The list of suggested replacements
wxComboBox *language; ///< The list of available languages
wxButton *add_button; ///< Add word to currently active dictionary
wxComboBox *language; ///< The list of available languages
wxButton *add_button; ///< Add word to currently active dictionary
wxCheckBox *skip_comments; ///< Skip over commented lines
AssDialogue *start_line; ///< The first line checked
AssDialogue *active_line; ///< The most recently checked line
bool has_looped; ///< Has the search already looped from the end to beginning?
/// Find the next misspelled word and close the dialog if there are none
/// @return Are there any more misspelled words?
bool FindNext();