]> git.lyx.org Git - lyx.git/commitdiff
the character dialog
authorLars Gullik Bjønnes <larsbj@gullik.org>
Mon, 27 Sep 2004 18:52:43 +0000 (18:52 +0000)
committerLars Gullik Bjønnes <larsbj@gullik.org>
Mon, 27 Sep 2004 18:52:43 +0000 (18:52 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9016 a592a061-630c-0410-9148-cb99ea01b6c8

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

index 362747435a6b76cf58ce2002fc7a8e33a5ecf8d3..674f172458a15b70aa102d4ac1f218887c4fc866 100644 (file)
@@ -1,3 +1,9 @@
+2004-09-27  John Spray  <spray_john@users.sourceforge.net>
+
+       * The Character dialog
+       * Dialogs.C, GCharacter.C, GCharacter.h, Makefile.am, ghelpers.h,
+       glade/Makefile.am, glade/character.glade
+
 2004-09-27  Lars Gullik Bjonnes  <larsbj@gullik.net>
 
        * GXpmBtnTbl.C (construct): use Boost.Assert
index 54dd0fcdf63ef7fa9990961ec859f628155fcb7f..8b6780ca1ca608c3917fe34eb9f84c0c9a15e7e8 100644 (file)
@@ -57,7 +57,7 @@
 #include "FormBox.h"
 #include "FormBranch.h"
 #include "FormChanges.h"
-#include "FormCharacter.h"
+#include "GCharacter.h"
 #include "FormCitation.h"
 #include "FormDocument.h"
 #include "FormErrorList.h"
@@ -198,8 +198,9 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
                dialog->setView(new FormChanges(*dialog));
                dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
        } else if (name == "character") {
+               dialog->bc().view(new GBC(dialog->bc()));
                dialog->setController(new ControlCharacter(*dialog));
-               dialog->setView(new FormCharacter(*dialog));
+               dialog->setView(new GCharacter(*dialog));
                dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
        } else if (name == "citation") {
                dialog->setController(new ControlCitation(*dialog));
diff --git a/src/frontends/gtk/GCharacter.C b/src/frontends/gtk/GCharacter.C
new file mode 100644 (file)
index 0000000..6f7d1ab
--- /dev/null
@@ -0,0 +1,245 @@
+/**
+ * \file GCharacter.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 "GCharacter.h"
+#include "ghelpers.h"
+#include "LColor.h"
+
+#include "controllers/frnt_lang.h"
+#include "controllers/helper_funcs.h"
+
+#include "support/lstrings.h"
+
+#include <libglademm.h>
+
+using std::vector;
+using std::string;
+
+namespace lyx {
+namespace frontend {
+
+
+GCharacter::GCharacter(Dialog & parent)
+       : GViewCB<ControlCharacter, GViewGladeB>(parent, _("Text Style"), false)
+{}
+
+
+class stringcolumns : public Gtk::TreeModel::ColumnRecord {
+public:
+       stringcolumns()
+       {
+               add(name);
+       }
+       
+       Gtk::TreeModelColumn<Glib::ustring> name;
+};
+
+
+void GCharacter::PopulateComboBox(Gtk::ComboBox * combo,
+                                  vector<string> const & strings)
+{
+       stringcolumns * cols = new stringcolumns;
+       Glib::RefPtr<Gtk::ListStore> model = Gtk::ListStore::create(*cols);
+       vector<string>::const_iterator it = strings.begin();
+       vector<string>::const_iterator end = strings.end();
+       for(; it != end; ++it){
+               Gtk::TreeModel::iterator iter = model->append();
+               Gtk::TreeModel::Row row = *iter;
+               row[cols->name] = *it;
+       }
+       combo->set_model(model);
+       Gtk::CellRendererText * cell = Gtk::manage(new Gtk::CellRendererText);
+       combo->pack_start(*cell, true);
+       combo->add_attribute(*cell,"text",0);
+}
+
+
+void GCharacter::doBuild()
+{
+       string const gladeName = findGladeFile("character");
+       xml_ = Gnome::Glade::Xml::create(gladeName);
+       Gtk::Button * button;
+
+       // Manage the ok, apply and cancel/close buttons
+       xml_->get_widget("Ok", button);
+       setOK(button);
+       xml_->get_widget("Apply", button);
+       setApply(button);
+       xml_->get_widget("Cancel", button);
+       setCancel(button);
+
+       xml_->get_widget("ToggleAll", toggleallcheck_);
+
+       //Get combobox addresses
+       xml_->get_widget("Family", familycombo_);
+       xml_->get_widget("Series", seriescombo_);
+       xml_->get_widget("Shape", shapecombo_);
+       xml_->get_widget("Color", colorcombo_);
+       xml_->get_widget("Language", languagecombo_);
+       xml_->get_widget("Size", sizecombo_);
+       xml_->get_widget("Misc", misccombo_);
+
+       //Don't let the user change anything for read only documents
+       bcview().addReadOnly(familycombo_);
+       bcview().addReadOnly(seriescombo_);
+       bcview().addReadOnly(shapecombo_);
+       bcview().addReadOnly(colorcombo_);
+       bcview().addReadOnly(languagecombo_);
+       bcview().addReadOnly(sizecombo_);
+       bcview().addReadOnly(misccombo_);
+       bcview().addReadOnly(toggleallcheck_);
+
+       //Caption/identifier pairs for the parameters
+       vector<FamilyPair>   const family = getFamilyData();
+       vector<SeriesPair>   const series = getSeriesData();
+       vector<ShapePair>    const shape  = getShapeData();
+       vector<SizePair>     const size   = getSizeData();
+       vector<BarPair>      const bar    = getBarData();
+       vector<ColorPair>    const color  = getColorData();
+       vector<LanguagePair> const language  = getLanguageData(true);
+
+       // Store the identifiers for later
+       family_ = getSecond(family);
+       series_ = getSecond(series);
+       shape_  = getSecond(shape);
+       size_   = getSecond(size);
+       bar_    = getSecond(bar);
+       color_  = getSecond(color);
+       lang_   = getSecond(language);
+
+       // Load the captions into the comboboxes
+       PopulateComboBox(familycombo_, getFirst(family));
+       PopulateComboBox(seriescombo_, getFirst(series));
+       PopulateComboBox(shapecombo_, getFirst(shape));
+       PopulateComboBox(sizecombo_, getFirst(size));
+       PopulateComboBox(misccombo_, getFirst(bar));
+       PopulateComboBox(colorcombo_, getFirst(color));
+       PopulateComboBox(languagecombo_, getFirst(language));
+
+       /* We use a table so that people with decent size screens don't
+       * have to scroll.  However, this risks the popup being too wide
+       * for people with small screens, and it doesn't scroll horizontally.
+       * Hopefully this is not too wide (and hopefully gtk gets fixed).*/
+       languagecombo_->set_wrap_width(3);
+
+       //Load in the current settings
+       update();
+
+       familycombo_->signal_changed().connect(
+               sigc::mem_fun(*this, &GCharacter::onChange));
+       seriescombo_->signal_changed().connect(
+               sigc::mem_fun(*this, &GCharacter::onChange));
+       shapecombo_->signal_changed().connect(
+               sigc::mem_fun(*this, &GCharacter::onChange));
+       sizecombo_->signal_changed().connect(
+               sigc::mem_fun(*this, &GCharacter::onChange));
+       misccombo_->signal_changed().connect(
+               sigc::mem_fun(*this, &GCharacter::onChange));
+       colorcombo_->signal_changed().connect(
+               sigc::mem_fun(*this, &GCharacter::onChange));
+       languagecombo_->signal_changed().connect(
+               sigc::mem_fun(*this, &GCharacter::onChange));
+}
+
+
+void GCharacter::apply()
+{
+       int pos = familycombo_->get_active_row_number();
+       controller().setFamily(family_[pos]);
+
+       pos = seriescombo_->get_active_row_number();
+       controller().setSeries(series_[pos]);
+
+       pos = shapecombo_->get_active_row_number();
+       controller().setShape(shape_[pos]);
+
+       pos = sizecombo_->get_active_row_number();
+       controller().setSize(size_[pos]);
+
+       pos = misccombo_->get_active_row_number();
+       controller().setBar(bar_[pos]);
+
+       pos = colorcombo_->get_active_row_number();
+       controller().setColor(color_[pos]);
+
+       pos = languagecombo_->get_active_row_number();
+       controller().setLanguage(lang_[pos]);
+
+       bool const toggleall = toggleallcheck_->get_active();
+       controller().setToggleAll(toggleall);
+}
+
+
+void GCharacter::update()
+{
+       int pos = int(findPos(family_, controller().getFamily()));
+       familycombo_->set_active(pos);
+
+       pos = int(findPos(series_, controller().getSeries()));
+       seriescombo_->set_active(pos);
+
+       pos = int(findPos(shape_, controller().getShape()));
+       shapecombo_->set_active(pos);
+
+       pos = int(findPos(size_, controller().getSize()));
+       sizecombo_->set_active(pos);
+
+       pos = int(findPos(bar_, controller().getBar()));
+       misccombo_->set_active(pos);
+
+       pos = int(findPos(color_, controller().getColor()));
+       colorcombo_->set_active(pos);
+
+       pos = int(findPos(lang_, controller().getLanguage()));
+       languagecombo_->set_active(pos);
+
+       toggleallcheck_->set_active(controller().getToggleAll());
+}
+
+
+void GCharacter::onChange()
+{
+       ButtonPolicy::SMInput activate = ButtonPolicy::SMI_NOOP;
+
+       int pos = familycombo_->get_active_row_number();
+       if (family_[pos] != LyXFont::IGNORE_FAMILY)
+               activate = ButtonPolicy::SMI_VALID;
+
+       pos = seriescombo_->get_active_row_number();
+       if (series_[pos] != LyXFont::IGNORE_SERIES)
+               activate = ButtonPolicy::SMI_VALID;
+
+       pos = shapecombo_->get_active_row_number();
+       if (shape_[pos] != LyXFont::IGNORE_SHAPE)
+               activate = ButtonPolicy::SMI_VALID;
+
+       pos = sizecombo_->get_active_row_number();
+       if (size_[pos] != LyXFont::IGNORE_SIZE)
+               activate = ButtonPolicy::SMI_VALID;
+
+       pos =  misccombo_->get_active_row_number();
+       if (bar_[pos] != IGNORE)
+               activate = ButtonPolicy::SMI_VALID;
+
+       pos = colorcombo_->get_active_row_number();
+       if (color_[pos] != LColor::ignore)
+               activate = ButtonPolicy::SMI_VALID;
+
+       pos = languagecombo_->get_active_row_number();
+       if (lang_[pos] != "No change")
+               activate = ButtonPolicy::SMI_VALID;
+
+       bc().input(activate);
+}
+
+} // namespace frontend
+} // namespace lyx
diff --git a/src/frontends/gtk/GCharacter.h b/src/frontends/gtk/GCharacter.h
new file mode 100644 (file)
index 0000000..ebd7990
--- /dev/null
@@ -0,0 +1,71 @@
+// -*- C++ -*-
+/**
+ * \file GCharacter.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author John Spray
+ * Based on version from xforms frontend
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#ifndef GCHARACTER_H
+#define GCHARACTER_H
+
+#include "GViewBase.h"
+#include "ControlCharacter.h" // for ControlCharacter enum
+
+struct LColor_color;
+
+namespace lyx {
+namespace frontend {
+
+/**
+ * This class provides a GTK+ implementation of the Character Dialog.
+ * The character dialog allows users to change the character settings
+ * in their documents.
+ */
+class GCharacter
+       : public GViewCB<ControlCharacter, GViewGladeB > {
+public:
+       ///
+       GCharacter(Dialog &);
+private:
+       /// Apply from dialog
+       virtual void apply();
+
+       /// Build the dialog
+       virtual void doBuild();
+
+       /// Update the dialog.
+       virtual void update();
+
+       void PopulateComboBox(Gtk::ComboBox * combo,
+                             std::vector<std::string> const & strings);
+
+       std::vector<LyXFont::FONT_FAMILY> family_;
+       std::vector<LyXFont::FONT_SERIES> series_;
+       std::vector<LyXFont::FONT_SHAPE> shape_;
+       std::vector<LyXFont::FONT_SIZE> size_;
+       std::vector<FONT_STATE> bar_;
+       std::vector<LColor_color> color_;
+       std::vector<std::string> lang_;
+
+       Gtk::ComboBox * familycombo_;
+       Gtk::ComboBox * seriescombo_;
+       Gtk::ComboBox * shapecombo_;
+       Gtk::ComboBox * colorcombo_;
+       Gtk::ComboBox * languagecombo_;
+       Gtk::ComboBox * sizecombo_;
+       Gtk::ComboBox * misccombo_;
+
+       Gtk::CheckButton * toggleallcheck_;
+
+       void GCharacter::onChange();
+};
+
+} // namespace frontend
+} // namespace lyx
+
+#endif
index a46f161e5fd863c18d152d9be1585c701f5616f7..d1e50f55a8cebfa0cce78cd9a85bc3e4a156d060 100644 (file)
@@ -24,6 +24,8 @@ libgtk_la_SOURCES = \
        GAboutlyx.h \
        GBC.C \
        GBC.h \
+       GCharacter.C \
+       GCharacter.h \
        GLyXKeySym.C \
        GLyXKeySym.h \
        GMathDelim.C \
@@ -90,7 +92,6 @@ xforms_objects = \
        ../xforms/FormBranch.lo \
        ../xforms/FormBrowser.lo \
        ../xforms/FormChanges.lo \
-       ../xforms/FormCharacter.lo \
        ../xforms/FormCitation.lo \
        ../xforms/FormColorpicker.lo \
        ../xforms/FormDialogView.lo \
index f86b921e09ccb6fdc58118660e06f83f82ef5f77..738ca8a12690dd75133cc8c905aab41711842b50 100644 (file)
@@ -13,6 +13,7 @@
 #define GHELPERS_H
 
 #include <string>
+#include <vector>
 
 namespace lyx {
 namespace frontend {
@@ -22,6 +23,17 @@ namespace frontend {
  */
 std::string const findGladeFile(std::string const & name);
 
+template<class A>
+typename std::vector<A>::size_type
+findPos(std::vector<A> const & vec, A const & val)
+{
+       typename std::vector<A>::const_iterator it =
+               std::find(vec.begin(), vec.end(), val);
+       if (it == vec.end())
+               return 0;
+       return std::distance(vec.begin(), it);
+}
+
 } // namespace frontend
 } // namespace lyx
 
index 98b2f73596103b1ae186be95246ae6d8ce0e91e9..46a275ac6c60dd9a82d62a91d48b00a98ee48fc5 100644 (file)
@@ -4,8 +4,14 @@ MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
 GLADE_DIR = glade
 
 GLADE_FILES = \
-       aboutlyx.glade mathDelim.glade mathPanel.glade \
-       print.glade search.glade tableCreate.glade text.glade \
+       aboutlyx.glade \
+       character.glade \
+       mathDelim.glade \
+       mathPanel.glade \
+       print.glade \
+       search.glade \
+       tableCreate.glade \
+       text.glade \
        url.glade
 
 EXTRA_DIST = ${GLADE_FILES}
diff --git a/src/frontends/gtk/glade/character.glade b/src/frontends/gtk/glade/character.glade
new file mode 100644 (file)
index 0000000..fbbde03
--- /dev/null
@@ -0,0 +1,579 @@
+<?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="visible">True</property>
+  <property name="title" translatable="yes">Character</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</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="Cancel">
+             <property name="visible">True</property>
+             <property name="can_default">True</property>
+             <property name="can_focus">True</property>
+             <property name="label">gtk-cancel</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">-6</property>
+             <accelerator key="Escape" modifiers="0" signal="clicked"/>
+           </widget>
+         </child>
+
+         <child>
+           <widget class="GtkButton" id="Apply">
+             <property name="visible">True</property>
+             <property name="can_default">True</property>
+             <property name="can_focus">True</property>
+             <property name="label">gtk-apply</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">-10</property>
+           </widget>
+         </child>
+
+         <child>
+           <widget class="GtkButton" id="Ok">
+             <property name="visible">True</property>
+             <property name="can_default">True</property>
+             <property name="has_default">True</property>
+             <property name="can_focus">True</property>
+             <property name="label">gtk-ok</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">-5</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="hbox1">
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">0</property>
+
+         <child>
+           <widget class="GtkFrame" id="frame3">
+             <property name="border_width">3</property>
+             <property name="visible">True</property>
+             <property name="label_xalign">0</property>
+             <property name="label_yalign">0.5</property>
+             <property name="shadow_type">GTK_SHADOW_NONE</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">1</property>
+                 <property name="yscale">1</property>
+                 <property name="top_padding">0</property>
+                 <property name="bottom_padding">0</property>
+                 <property name="left_padding">12</property>
+                 <property name="right_padding">0</property>
+
+                 <child>
+                   <widget class="GtkTable" id="table1">
+                     <property name="visible">True</property>
+                     <property name="n_rows">6</property>
+                     <property name="n_columns">2</property>
+                     <property name="homogeneous">False</property>
+                     <property name="row_spacing">4</property>
+                     <property name="column_spacing">0</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="label4">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">_Family:</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">Family</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">1</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkLabel" id="label5">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">_Series</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">Series</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">1</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkLabel" id="label6">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">S_hape:</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">Shape</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">2</property>
+                         <property name="bottom_attach">3</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkLabel" id="label7">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">_Color</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">Color</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">3</property>
+                         <property name="bottom_attach">4</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkLabel" id="label8">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">_Language:</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">Language</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">4</property>
+                         <property name="bottom_attach">5</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkCheckButton" id="ToggleAll">
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="label" translatable="yes">_Toggle all</property>
+                         <property name="use_underline">True</property>
+                         <property name="relief">GTK_RELIEF_NORMAL</property>
+                         <property name="focus_on_click">True</property>
+                         <property name="active">False</property>
+                         <property name="inconsistent">False</property>
+                         <property name="draw_indicator">True</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">5</property>
+                         <property name="bottom_attach">6</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkComboBox" id="Family">
+                         <property name="visible">True</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">1</property>
+                         <property name="x_padding">4</property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkComboBox" id="Series">
+                         <property name="visible">True</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">1</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_padding">4</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkComboBox" id="Shape">
+                         <property name="visible">True</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">2</property>
+                         <property name="bottom_attach">3</property>
+                         <property name="x_padding">4</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkComboBox" id="Color">
+                         <property name="visible">True</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">3</property>
+                         <property name="bottom_attach">4</property>
+                         <property name="x_padding">4</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkComboBox" id="Language">
+                         <property name="visible">True</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">4</property>
+                         <property name="bottom_attach">5</property>
+                         <property name="x_padding">4</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+                   </widget>
+                 </child>
+               </widget>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label3">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">&lt;b&gt;Character&lt;/b&gt;</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">True</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="type">label_item</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">True</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkVSeparator" id="vseparator1">
+             <property name="visible">True</property>
+           </widget>
+           <packing>
+             <property name="padding">3</property>
+             <property name="expand">False</property>
+             <property name="fill">False</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="GtkFrame" id="frame1">
+                 <property name="border_width">3</property>
+                 <property name="visible">True</property>
+                 <property name="label_xalign">0</property>
+                 <property name="label_yalign">0.5</property>
+                 <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+                 <child>
+                   <widget class="GtkAlignment" id="alignment1">
+                     <property name="visible">True</property>
+                     <property name="xalign">0.5</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xscale">1</property>
+                     <property name="yscale">1</property>
+                     <property name="top_padding">6</property>
+                     <property name="bottom_padding">6</property>
+                     <property name="left_padding">12</property>
+                     <property name="right_padding">0</property>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox2">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">0</property>
+
+                         <child>
+                           <widget class="GtkLabel" id="label9">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Si_ze:</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>
+                             <property name="mnemonic_widget">Size</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkComboBox" id="Size">
+                             <property name="visible">True</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">3</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+                       </widget>
+                     </child>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label1">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">&lt;b&gt;Never Toggled&lt;/b&gt;</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">True</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="type">label_item</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="GtkFrame" id="frame2">
+                 <property name="border_width">3</property>
+                 <property name="visible">True</property>
+                 <property name="label_xalign">0</property>
+                 <property name="label_yalign">0.5</property>
+                 <property name="shadow_type">GTK_SHADOW_NONE</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">1</property>
+                     <property name="yscale">1</property>
+                     <property name="top_padding">6</property>
+                     <property name="bottom_padding">6</property>
+                     <property name="left_padding">12</property>
+                     <property name="right_padding">0</property>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox3">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">0</property>
+
+                         <child>
+                           <widget class="GtkLabel" id="label10">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">_Misc:</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">1</property>
+                             <property name="mnemonic_widget">Misc</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkComboBox" id="Misc">
+                             <property name="visible">True</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">3</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+                       </widget>
+                     </child>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label2">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">&lt;b&gt;Always Toggled&lt;/b&gt;</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">True</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="type">label_item</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</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">True</property>
+         <property name="fill">True</property>
+       </packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>