]> git.lyx.org Git - features.git/commitdiff
The Spellchecker dialog
authorJohn Spray <spray@lyx.org>
Wed, 6 Oct 2004 15:15:37 +0000 (15:15 +0000)
committerJohn Spray <spray@lyx.org>
Wed, 6 Oct 2004 15:15:37 +0000 (15:15 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9059 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/gtk/ChangeLog
src/frontends/gtk/Dialogs.C
src/frontends/gtk/GSpellchecker.C [new file with mode: 0644]
src/frontends/gtk/GSpellchecker.h [new file with mode: 0644]
src/frontends/gtk/Makefile.am
src/frontends/gtk/glade/spellcheck.glade [new file with mode: 0644]

index de12548bc5f1efaddf78ba8b97ae8158997a2a30..680bbafaf082d7a38493c6495151d1c06c33f10d 100644 (file)
@@ -1,3 +1,8 @@
+2004-10-06  John Spray  <spray_john@users.sourceforge.net>
+
+       * The Spellchecker dialog
+       * Dialogs.C, GSpellchecker.C, GSpellchecker.h, Makefile.am
+
 2004-10-06  John Spray  <spray_john@users.sourceforge.net>
 
        * GView.C (c-tor): get the layout engine working correctly by
index 1d15cab6026bf282acb37de771268c2ab06bc5fa..83058457acd4653b1f000709b548a4b98b949882 100644 (file)
@@ -83,7 +83,7 @@
 #include "FormTabular.h"
 #include "FormTexinfo.h"
 #include "FormShowFile.h"
-#include "FormSpellchecker.h"
+#include "GSpellchecker.h"
 #include "GTableCreate.h"
 #include "GToc.h"
 #include "GUrl.h"
@@ -479,8 +479,9 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
                dialog->setView(new FormSendto(*dialog));
                dialog->bc().bp(new OkApplyCancelPolicy);
        } else if (name == "spellchecker") {
+               dialog->bc().view(new GBC(dialog->bc()));
                dialog->setController(new ControlSpellchecker(*dialog));
-               dialog->setView(new FormSpellchecker(*dialog));
+               dialog->setView(new GSpellchecker(*dialog));
                dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
        } else if (name == "tabular") {
                dialog->setController(new ControlTabular(*dialog));
diff --git a/src/frontends/gtk/GSpellchecker.C b/src/frontends/gtk/GSpellchecker.C
new file mode 100644 (file)
index 0000000..815de85
--- /dev/null
@@ -0,0 +1,184 @@
+/**
+ * \file GSpellchecker.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author John Spray
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#include <config.h>
+
+#include "GSpellchecker.h"
+#include "controllers/ControlSpellchecker.h"
+
+#include "ghelpers.h"
+
+#include "support/tostr.h"
+
+using std::string;
+
+namespace lyx {
+namespace frontend {
+
+GSpellchecker::GSpellchecker(Dialog & parent)
+       : GViewCB<ControlSpellchecker, GViewGladeB>
+               (parent, _("Spell-check document"), false)
+{}
+
+
+void GSpellchecker::doBuild()
+{
+       string const gladeName = findGladeFile("spellcheck");
+       xml_ = Gnome::Glade::Xml::create(gladeName);
+
+       Gtk::Button * button;
+       xml_->get_widget("Close", button);
+       setCancel(button);
+
+       xml_->get_widget("Suggestions", suggestionsview_);
+       xml_->get_widget("Unknown", unknownentry_);
+       xml_->get_widget("Replacement", replacemententry_);
+       xml_->get_widget("Progress", progress_);
+
+       listCols_.add(listCol_);
+       suggestionsstore_ = Gtk::ListStore::create(listCols_);
+       suggestionsview_->set_model(suggestionsstore_);
+       suggestionsview_->append_column("Suggestion", listCol_);
+       suggestionssel_ = suggestionsview_->get_selection();
+
+       // Single click in suggestion list
+       suggestionssel_->signal_changed().connect(
+               sigc::mem_fun(*this, &GSpellchecker::onSuggestionSelection));
+
+       // Double click in suggestion list
+       suggestionsview_->signal_row_activated().connect(
+               sigc::mem_fun(*this, &GSpellchecker::onSuggestionActivate));
+
+       // Because it's like a Replace button when double clicked
+       bcview().addReadOnly(suggestionsview_);
+
+       xml_->get_widget("Replace", button);
+       bcview().addReadOnly(button);
+       button->signal_clicked().connect(
+               sigc::bind<bool>(
+                       sigc::mem_fun(*this, &GSpellchecker::onReplace), false));
+
+       xml_->get_widget("ReplaceAll", button);
+       bcview().addReadOnly(button);
+       button->signal_clicked().connect(
+               sigc::bind<bool>(
+                       sigc::mem_fun(*this, &GSpellchecker::onReplace), true));
+
+       xml_->get_widget("Ignore", ignorebutton_);
+       ignorebutton_->signal_clicked().connect(
+               sigc::mem_fun(*this, &GSpellchecker::onIgnore));
+
+       xml_->get_widget("IgnoreAll", button);
+       button->signal_clicked().connect(
+               sigc::mem_fun(*this, &GSpellchecker::onIgnoreAll));
+
+       xml_->get_widget("Add", button);
+       button->signal_clicked().connect(
+               sigc::mem_fun(*this, &GSpellchecker::onAdd));
+}
+
+
+void GSpellchecker::show()
+{
+       if (!window()) {
+               build();
+       }
+       bcview().refreshReadOnly();
+       controller().check();
+       if (!controller().getWord().empty())
+               window()->show();
+}
+
+void GSpellchecker::partialUpdate(int s)
+{
+       ControlSpellchecker::State const state =
+               static_cast<ControlSpellchecker::State>(s);
+
+       if (state == ControlSpellchecker::SPELL_FOUND_WORD) {
+               string word = controller().getWord();
+               Glib::ustring utfword = Glib::locale_to_utf8(word);
+               unknownentry_->set_text(utfword);
+               replacemententry_->set_text(utfword);
+
+               // Get the list of suggestions
+               suggestionsstore_->clear();
+               while (!(word = controller().getSuggestion()).empty()) {
+                       utfword = Glib::locale_to_utf8(word);
+                       (*suggestionsstore_->append())[listCol_] = utfword;
+               }
+
+               if (readOnly())
+                       // In readonly docs the user must just be browsing through
+                       ignorebutton_->grab_focus();
+               else
+                       // In general we expect the user to type their replacement
+                       replacemententry_->grab_focus();
+       }
+
+       int const progress = controller().getProgress();
+       if (progress != 0) {
+               progress_->set_fraction(float(progress)/100.0f);
+               progress_->set_text(tostr(progress) + "% " + _("checked"));
+       }
+}
+
+
+void GSpellchecker::onSuggestionActivate(
+       Gtk::TreeModel::Path const & path,
+       Gtk::TreeViewColumn * col)
+{
+       Glib::ustring const suggestion =
+               (*suggestionsstore_->get_iter(path))[listCol_];
+
+       if (!suggestion.empty())
+               controller().replace(suggestion);
+}
+
+
+void GSpellchecker::onSuggestionSelection()
+{
+       Glib::ustring const suggestion =
+               (*suggestionssel_->get_selected())[listCol_];
+
+       if (!suggestion.empty())
+               replacemententry_->set_text(suggestion);
+}
+
+
+void GSpellchecker::onIgnore()
+{
+       controller().check();
+}
+
+
+void GSpellchecker::onIgnoreAll()
+{
+       controller().ignoreAll();
+}
+
+
+void GSpellchecker::onAdd()
+{
+       controller().insert();
+}
+
+
+void GSpellchecker::onReplace(bool const all)
+{
+       Glib::ustring const replacement = replacemententry_->get_text();
+       if (all)
+               controller().replaceAll(replacement);
+       else
+               controller().replace(replacement);
+}
+
+
+} // namespace frontend
+} // namespace lyx
diff --git a/src/frontends/gtk/GSpellchecker.h b/src/frontends/gtk/GSpellchecker.h
new file mode 100644 (file)
index 0000000..c588c16
--- /dev/null
@@ -0,0 +1,71 @@
+// -*- C++ -*-
+/**
+ * \file GSpellchecker.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author John Spray
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#ifndef GSPELLCHECKER_H
+#define GSPELLCHECKER_H
+
+#include "GViewBase.h"
+
+namespace lyx {
+namespace frontend {
+
+class ControlSpellchecker;
+
+/** This class provides a GTK+ implementation of the FormSpellchecker Dialog.
+ */
+class GSpellchecker
+       : public GViewCB<ControlSpellchecker, GViewGladeB> {
+public:
+
+       GSpellchecker(Dialog &);
+private:
+       // not needed.
+       virtual void apply() {}
+       // Build the dialog
+       virtual void doBuild();
+
+       virtual void update() {}
+
+       virtual void show();
+
+       // Fill in unknown word, suggestions, progress from backend
+       virtual void partialUpdate(int);
+
+       Glib::RefPtr<Gtk::ListStore> suggestionsstore_;
+       Glib::RefPtr<Gtk::TreeSelection> suggestionssel_;
+
+       Gtk::TreeModelColumn<Glib::ustring> listCol_;
+       Gtk::TreeModel::ColumnRecord listCols_;
+
+       Gtk::TreeView * suggestionsview_;
+       Gtk::Entry * replacemententry_;
+       Gtk::Entry * unknownentry_;
+       Gtk::ProgressBar * progress_;
+       Gtk::Button * ignorebutton_;
+
+       // Replace button
+       void onReplace(bool const all);
+       // Suggestion list single click
+       void onSuggestionSelection();
+       // Suggestion list double click
+       void onSuggestionActivate(Gtk::TreeModel::Path const & path, Gtk::TreeViewColumn * col);
+       // Ignore button
+       void onIgnore();
+       // Ignore All button
+       void onIgnoreAll();
+       // Add button
+       void onAdd();
+};
+
+} // namespace frontend
+} // namespace lyx
+
+#endif // GSPELLCHECKER_H
index 4c14451910077929562fa8e59c72e5e702b94df9..8b231db32656b3fee4886f3a7b0b6738e6a5d5ea 100644 (file)
@@ -48,6 +48,8 @@ libgtk_la_SOURCES = \
        GScreen.h \
        GSearch.C \
        GSearch.h \
+       GSpellchecker.C \
+       GSpellchecker.h \
        GTableCreate.C \
        GTableCreate.h \
        GText.C \
@@ -120,7 +122,6 @@ xforms_objects = \
        ../xforms/FormSendto.lo \
        ../xforms/forms_gettext.lo \
        ../xforms/FormShowFile.lo \
-       ../xforms/FormSpellchecker.lo \
        ../xforms/FormTabular.lo \
        ../xforms/FormTexinfo.lo \
        ../xforms/FormText.lo \
@@ -135,11 +136,3 @@ xforms_objects = \
        ../xforms/xforms_helpers.lo \
        ../xforms/xformsImage.lo \
        ../xforms/xforms_resize.lo
-
-#      ../xforms/Dialogs.lo
-#      ../xforms/FormFiledialog.lo
-#      ../xforms/FileDialog.lo
-#      ../xforms/FormAboutlyx.lo
-#      ../xforms/FormUrl.lo
-#      ../xforms/FormTabularCreate.lo
-#      ../xforms/FormMathsPanel.lo
diff --git a/src/frontends/gtk/glade/spellcheck.glade b/src/frontends/gtk/glade/spellcheck.glade
new file mode 100644 (file)
index 0000000..e98c032
--- /dev/null
@@ -0,0 +1,607 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkDialog" id="dialog">
+  <property name="border_width">6</property>
+  <property name="title" translatable="yes">Spell Check</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+  <property name="modal">True</property>
+  <property name="resizable">False</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="has_separator">False</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox1">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+       <widget class="GtkHButtonBox" id="dialog-action_area1">
+         <property name="visible">True</property>
+         <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+         <child>
+           <widget class="GtkButton" id="Close">
+             <property name="visible">True</property>
+             <property name="can_default">True</property>
+             <property name="can_focus">True</property>
+             <property name="label">gtk-close</property>
+             <property name="use_stock">True</property>
+             <property name="relief">GTK_RELIEF_NORMAL</property>
+             <property name="focus_on_click">True</property>
+             <property name="response_id">-7</property>
+           </widget>
+         </child>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">False</property>
+         <property name="fill">True</property>
+         <property name="pack_type">GTK_PACK_END</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkHBox" id="ControlsBox">
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">0</property>
+
+         <child>
+           <widget class="GtkVBox" id="vbox2">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">0</property>
+
+             <child>
+               <widget class="GtkLabel" id="label2">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">_Unknown word:</property>
+                 <property name="use_underline">True</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="mnemonic_widget">Unknown</property>
+               </widget>
+               <packing>
+                 <property name="padding">5</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkEntry" id="Unknown">
+                 <property name="visible">True</property>
+                 <property name="can_focus">True</property>
+                 <property name="editable">False</property>
+                 <property name="visibility">True</property>
+                 <property name="max_length">0</property>
+                 <property name="text" translatable="yes"></property>
+                 <property name="has_frame">True</property>
+                 <property name="invisible_char" translatable="yes">*</property>
+                 <property name="activates_default">False</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkHBox" id="hbox2">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">0</property>
+
+                 <child>
+                   <widget class="GtkButton" id="Ignore">
+                     <property name="visible">True</property>
+                     <property name="tooltip" translatable="yes">Ignore unknown word</property>
+                     <property name="can_focus">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+
+                     <child>
+                       <widget class="GtkAlignment" id="alignment2">
+                         <property name="visible">True</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xscale">0</property>
+                         <property name="yscale">0</property>
+                         <property name="top_padding">0</property>
+                         <property name="bottom_padding">0</property>
+                         <property name="left_padding">0</property>
+                         <property name="right_padding">0</property>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox5">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">2</property>
+
+                             <child>
+                               <widget class="GtkImage" id="image2">
+                                 <property name="visible">True</property>
+                                 <property name="stock">gtk-cancel</property>
+                                 <property name="icon_size">4</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkLabel" id="label5">
+                                 <property name="visible">True</property>
+                                 <property name="label" translatable="yes">_Ignore</property>
+                                 <property name="use_underline">True</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">False</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                         </child>
+                       </widget>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                     <property name="pack_type">GTK_PACK_END</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkButton" id="IgnoreAll">
+                     <property name="visible">True</property>
+                     <property name="tooltip" translatable="yes">Accept unknown word as known in this session</property>
+                     <property name="can_focus">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+
+                     <child>
+                       <widget class="GtkAlignment" id="alignment4">
+                         <property name="visible">True</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xscale">0</property>
+                         <property name="yscale">0</property>
+                         <property name="top_padding">0</property>
+                         <property name="bottom_padding">0</property>
+                         <property name="left_padding">0</property>
+                         <property name="right_padding">0</property>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox7">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">2</property>
+
+                             <child>
+                               <widget class="GtkImage" id="image4">
+                                 <property name="visible">True</property>
+                                 <property name="stock">gtk-cancel</property>
+                                 <property name="icon_size">4</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkLabel" id="label7">
+                                 <property name="visible">True</property>
+                                 <property name="label" translatable="yes">Ignore _All</property>
+                                 <property name="use_underline">True</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">False</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                         </child>
+                       </widget>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">6</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                     <property name="pack_type">GTK_PACK_END</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkButton" id="Add">
+                     <property name="visible">True</property>
+                     <property name="tooltip" translatable="yes">Add unknown word to personal dictionary</property>
+                     <property name="can_focus">True</property>
+                     <property name="label">gtk-add</property>
+                     <property name="use_stock">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                     <property name="pack_type">GTK_PACK_END</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">6</property>
+                 <property name="expand">True</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label3">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">R_eplace with:</property>
+                 <property name="use_underline">True</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="mnemonic_widget">Replacement</property>
+               </widget>
+               <packing>
+                 <property name="padding">5</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkEntry" id="Replacement">
+                 <property name="visible">True</property>
+                 <property name="tooltip" translatable="yes">Type replacement word or select from list of suggestions</property>
+                 <property name="can_focus">True</property>
+                 <property name="editable">True</property>
+                 <property name="visibility">True</property>
+                 <property name="max_length">0</property>
+                 <property name="text" translatable="yes"></property>
+                 <property name="has_frame">True</property>
+                 <property name="invisible_char" translatable="yes">*</property>
+                 <property name="activates_default">False</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkHBox" id="hbox3">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">0</property>
+
+                 <child>
+                   <placeholder/>
+                 </child>
+
+                 <child>
+                   <widget class="GtkButton" id="Replace">
+                     <property name="visible">True</property>
+                     <property name="tooltip" translatable="yes">Replace unknown word</property>
+                     <property name="can_focus">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+
+                     <child>
+                       <widget class="GtkAlignment" id="alignment3">
+                         <property name="visible">True</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xscale">0</property>
+                         <property name="yscale">0</property>
+                         <property name="top_padding">0</property>
+                         <property name="bottom_padding">0</property>
+                         <property name="left_padding">0</property>
+                         <property name="right_padding">0</property>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox6">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">2</property>
+
+                             <child>
+                               <widget class="GtkImage" id="image3">
+                                 <property name="visible">True</property>
+                                 <property name="stock">gtk-spell-check</property>
+                                 <property name="icon_size">4</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkLabel" id="label6">
+                                 <property name="visible">True</property>
+                                 <property name="label" translatable="yes">_Replace</property>
+                                 <property name="use_underline">True</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">False</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                         </child>
+                       </widget>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                     <property name="pack_type">GTK_PACK_END</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkButton" id="ReplaceAll">
+                     <property name="visible">True</property>
+                     <property name="tooltip" translatable="yes">Replace all instances of unknown word</property>
+                     <property name="can_focus">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+
+                     <child>
+                       <widget class="GtkAlignment" id="alignment5">
+                         <property name="visible">True</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xscale">0</property>
+                         <property name="yscale">0</property>
+                         <property name="top_padding">0</property>
+                         <property name="bottom_padding">0</property>
+                         <property name="left_padding">0</property>
+                         <property name="right_padding">0</property>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox8">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">2</property>
+
+                             <child>
+                               <widget class="GtkImage" id="image5">
+                                 <property name="visible">True</property>
+                                 <property name="stock">gtk-spell-check</property>
+                                 <property name="icon_size">4</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkLabel" id="label8">
+                                 <property name="visible">True</property>
+                                 <property name="label" translatable="yes">Replace A_ll</property>
+                                 <property name="use_underline">True</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">False</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                         </child>
+                       </widget>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">6</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                     <property name="pack_type">GTK_PACK_END</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">6</property>
+                 <property name="expand">True</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkProgressBar" id="Progress">
+                 <property name="visible">True</property>
+                 <property name="tooltip" translatable="yes">Proportion of document checked</property>
+                 <property name="orientation">GTK_PROGRESS_LEFT_TO_RIGHT</property>
+                 <property name="fraction">0</property>
+                 <property name="pulse_step">0.1</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkVSeparator" id="vseparator1">
+             <property name="visible">True</property>
+           </widget>
+           <packing>
+             <property name="padding">5</property>
+             <property name="expand">False</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkVBox" id="vbox1">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">0</property>
+
+             <child>
+               <widget class="GtkLabel" id="label1">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">_Suggested Replacements:</property>
+                 <property name="use_underline">True</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="mnemonic_widget">Suggestions</property>
+               </widget>
+               <packing>
+                 <property name="padding">4</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkScrolledWindow" id="scrolledwindow1">
+                 <property name="border_width">3</property>
+                 <property name="visible">True</property>
+                 <property name="can_focus">True</property>
+                 <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                 <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                 <property name="shadow_type">GTK_SHADOW_IN</property>
+                 <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+                 <child>
+                   <widget class="GtkTreeView" id="Suggestions">
+                     <property name="visible">True</property>
+                     <property name="tooltip" translatable="yes">List of replacement suggestions from dictionary</property>
+                     <property name="can_focus">True</property>
+                     <property name="headers_visible">False</property>
+                     <property name="rules_hint">False</property>
+                     <property name="reorderable">False</property>
+                     <property name="enable_search">True</property>
+                   </widget>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">True</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">True</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">False</property>
+         <property name="fill">True</property>
+       </packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>