]> git.lyx.org Git - features.git/commitdiff
Add GTK Reference dialog (GRef)
authorJohn Spray <spray@lyx.org>
Fri, 5 Aug 2005 07:20:38 +0000 (07:20 +0000)
committerJohn Spray <spray@lyx.org>
Fri, 5 Aug 2005 07:20:38 +0000 (07:20 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@10389 a592a061-630c-0410-9148-cb99ea01b6c8

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

index 96fdac833c0fff9871112251ef7981b2efacff1c..76f1b441bec3b61b3d92d73ad14e0be2087cca97 100644 (file)
@@ -1,3 +1,7 @@
+2005-07-05  John Spray  <spray@lyx.org>
+       * GRef.[Ch], glade/ref.glade: Add the reference insertion dialog
+       * Dialogs.C, Makefile.am, glade/Makefile.am: Use GRef
+
 2005-07-02  John Spray  <spray@lyx.org>
        * xftFontMetrics.C: Add error checking to call to mbstowcs 
        in font_metrics::width, estimate width for strings that  
index 7887c04e83e7b87833b7c75dbb2121a3505eea08..a9fa419d2437912d9cc9d828c08069796c1638ea 100644 (file)
@@ -85,7 +85,7 @@
 #include "FormPreamble.h"
 #include "FormPreferences.h"
 #include "GPrint.h"
-#include "FormRef.h"
+#include "GRef.h"
 #include "GSearch.h"
 #include "GSendto.h"
 #include "FormTabular.h"
@@ -490,8 +490,9 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
                dialog->setView(new GPrint(*dialog));
                dialog->bc().bp(new OkCancelPolicy);
        } else if (name == "ref") {
+               dialog->bc().view(new GBC(dialog->bc()));
                dialog->setController(new ControlRef(*dialog));
-               dialog->setView(new FormRef(*dialog));
+               dialog->setView(new GRef(*dialog));
                dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
        } else if (name == "sendto") {
                dialog->bc().view(new GBC(dialog->bc()));
diff --git a/src/frontends/gtk/GRef.C b/src/frontends/gtk/GRef.C
new file mode 100644 (file)
index 0000000..19faad7
--- /dev/null
@@ -0,0 +1,262 @@
+/**
+ * \file GRef.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author John Spray
+ * \author Andreas Klostermann
+ * Full author contact details are available in file CREDITS.
+ */
+
+#include <config.h>
+
+// Too hard to make concept checks work with this file
+#ifdef _GLIBCXX_CONCEPT_CHECKS
+#undef _GLIBCXX_CONCEPT_CHECKS
+#endif
+#ifdef _GLIBCPP_CONCEPT_CHECKS
+#undef _GLIBCPP_CONCEPT_CHECKS
+#endif
+
+#include "GRef.h"
+#include "ControlRef.h"
+#include "ghelpers.h"
+#include "insets/insetref.h"
+#include "debug.h"
+#include "buffer.h"
+#include "insets/insetnote.h"
+
+#include <libglademm.h>
+
+using std::string;
+using std::vector;
+
+
+namespace lyx {
+namespace frontend {
+
+class refModelColumns : public Gtk::TreeModel::ColumnRecord
+{
+public:
+
+  refModelColumns()
+    { add(name);}
+
+  Gtk::TreeModelColumn<Glib::ustring> name;
+};
+
+refModelColumns refColumns;
+
+
+class bufferModelColumns : public Gtk::TreeModel::ColumnRecord
+{
+public:
+
+  bufferModelColumns()
+    { add(name);}
+
+  Gtk::TreeModelColumn<Glib::ustring> name;
+};
+
+bufferModelColumns bufferColumns;
+
+
+GRef::GRef(Dialog & parent)
+       : GViewCB<ControlRef, GViewGladeB>(parent, _("Cross-reference"), false)
+{}
+
+
+void GRef::doBuild()
+{
+       string const gladeName = findGladeFile("ref");
+       xml_ = Gnome::Glade::Xml::create(gladeName);
+       xml_->get_widget("Cancel", cancelbutton_);
+       setCancel(cancelbutton_);
+       xml_->get_widget("Apply", applybutton_);
+       setApply(applybutton_);
+       xml_->get_widget("OK", okbutton_);
+       setOK(okbutton_);
+
+       xml_->get_widget("Labels", refview_);
+       xml_->get_widget("Label", labelentry_);
+       xml_->get_widget("Name", nameentry_);
+       xml_->get_widget("Format", formatcombo_);
+       xml_->get_widget("Buffer", buffercombo_ );
+       xml_->get_widget("JumpTo", jumptobutton_);
+       xml_->get_widget("Back", backbutton_);
+       xml_->get_widget("Refresh", refreshbutton_);
+
+       refview_->append_column(_("Label"), refColumns.name);
+
+       buffercombo_->signal_changed().connect(
+               sigc::mem_fun(*this, &GRef::buffer_changed));
+       refview_->signal_cursor_changed().connect(
+               sigc::mem_fun(*this, &GRef::selection_changed));
+       refview_->signal_row_activated().connect(
+               sigc::mem_fun(*this, &GRef::refview_activated));
+       jumptobutton_->signal_clicked().connect(
+               sigc::mem_fun(*this, &GRef::jumpto));
+       backbutton_->signal_clicked().connect(
+               sigc::mem_fun(*this, &GRef::back));
+       refreshbutton_->signal_clicked().connect(
+               sigc::mem_fun(*this, &GRef::update_labels));
+       
+       labelentry_->signal_changed().connect(
+               sigc::mem_fun(*this, &GRef::update_validity));
+       formatcombo_->signal_changed().connect(
+               sigc::mem_fun(*this, &GRef::update_validity));
+       nameentry_->signal_changed().connect(
+               sigc::mem_fun(*this, &GRef::update_validity));
+       
+       applylock_ = false;
+       bc().valid(false);
+}
+
+
+void GRef::selection_changed ()
+{
+       if (applylock_)
+               return;
+
+       Gtk::TreeModel::iterator iter = refview_->get_selection()->get_selected();
+       if(iter) {
+               Gtk::TreeModel::Row row = *iter;
+               labelentry_->set_text(row[refColumns.name]);            
+       }
+}
+
+
+void GRef::jumpto()
+{
+       
+       if (backbutton_->is_sensitive()) {
+//             controller().gotoAnotherRef(labelentry_->get_text());
+//             OR
+//             kernel().dispatch(FuncRequest(LFUN_LABEL_GOTO, ref));
+//             OR
+               controller().gotoBookmark();
+               controller().gotoRef(labelentry_->get_text());
+       } else {
+               controller().gotoRef(labelentry_->get_text());
+       }
+       backbutton_->set_sensitive(true);
+}
+
+
+void GRef::back()
+{
+       controller().gotoBookmark();    
+       backbutton_->set_sensitive(false);
+       jumptobutton_->set_sensitive(true);
+}
+
+
+void GRef::buffer_changed()
+{
+       if (applylock_)
+               return;
+       update_labels();
+}
+
+
+void GRef::update()
+{
+       applylock_ = true;
+       
+       bc().refreshReadOnly();
+       jumptobutton_->set_sensitive(true);
+       backbutton_->set_sensitive(false);
+       labelentry_->set_text(controller().params().getContents());
+       nameentry_->set_text(controller().params().getOptions());
+
+       // Name is irrelevant to LaTeX/Literate documents
+       Kernel::DocType doctype = kernel().docType();
+       if (doctype == Kernel::LATEX || doctype == Kernel::LITERATE) {
+               nameentry_->set_sensitive(false);
+       } else {
+               nameentry_->set_sensitive(true);
+       }
+
+       // Format is irrelevant to LinuxDoc/DocBook.
+       if (doctype == Kernel::LINUXDOC || doctype == Kernel::DOCBOOK) {
+               formatcombo_->set_active(0);
+               formatcombo_->set_sensitive(false);
+               
+       } else {
+               formatcombo_->set_active(InsetRef::getType(controller().params().getCmdName()));
+               formatcombo_->set_sensitive(true);
+       }
+       
+       bufferstore_ = Gtk::ListStore::create(bufferColumns);
+       vector<string> const buffers = controller().getBufferList();
+       buffercombo_->set_model(bufferstore_);
+
+       vector<string>::const_iterator it = buffers.begin();
+       vector<string>::const_iterator const end = buffers.end();
+       for (; it != end; ++it) {
+               Gtk::TreeModel::iterator iter = bufferstore_->append();
+               (*iter)[bufferColumns.name]  = *it;
+       }
+
+       buffercombo_->set_active(controller().getBufferNum());
+
+       update_labels();
+       applylock_ = false;
+       bc().valid(false);
+}
+
+
+void GRef::update_labels()
+{
+       int buffernum = buffercombo_->get_active_row_number();
+       if (buffernum < 0)
+               buffernum=0;
+
+       string const name = controller().getBufferName(buffernum);
+       vector<string> keys = controller().getLabelList(name);
+       refListStore_ = Gtk::ListStore::create(refColumns);
+
+       if (!keys.empty()) {
+               vector<string>::const_iterator it = keys.begin();
+               vector<string>::const_iterator end = keys.end();
+               for (;it != keys.end(); ++it) {
+                       Gtk::TreeModel::iterator iter =refListStore_->append();
+                       (*iter)[refColumns.name] = *it;
+               }
+               refview_->set_sensitive(true);
+       } else {
+               Gtk::TreeModel::iterator iter =refListStore_->append();
+               (*iter)[refColumns.name] = _("No labels found.");
+               refview_->set_sensitive(false);
+       }
+       refview_->set_model(refListStore_);
+}
+
+
+void GRef::apply()
+{
+       if (applylock_)
+               return;
+
+       controller().params().setContents(labelentry_->get_text());
+       controller().params().setOptions(nameentry_->get_text());
+       int const type = formatcombo_->get_active_row_number();
+       controller().params().setCmdName(InsetRef::getName(type));
+}
+
+
+void GRef::update_validity()
+{
+       bc().valid(!labelentry_->get_text().empty());
+}
+
+
+void GRef::refview_activated(const Gtk::TreeModel::Path&, Gtk::TreeViewColumn*)
+{
+       if (!labelentry_->get_text().empty())
+               okbutton_->clicked();
+}
+
+
+} // namespace frontend
+} // namespace lyx
diff --git a/src/frontends/gtk/GRef.h b/src/frontends/gtk/GRef.h
new file mode 100644 (file)
index 0000000..ddbb018
--- /dev/null
@@ -0,0 +1,62 @@
+// -*- C++ -*-
+/**
+ * \file GRef.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author John Spray
+ * \author Andreas Klostermann
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#ifndef GREF_H
+#define GREF_H
+
+#include "GViewBase.h"
+#include <string>
+namespace lyx {
+namespace frontend {
+
+class ControlRef;
+
+/** This class provides a GTK+ implementation of the Note Dialog.
+ */
+class GRef : public GViewCB<ControlRef, GViewGladeB> {
+public:
+       GRef(Dialog & parent);
+private:
+       virtual void apply();
+       virtual void doBuild();
+       virtual void update();
+       virtual void update_labels();
+       // Signal callbacks
+       void selection_changed ();
+       void buffer_changed();
+       void update_validity();
+       void jumpto();
+       void back();
+       void refview_activated(const Gtk::TreeModel::Path&, Gtk::TreeViewColumn*);
+       // apply() won't act when this is true
+       bool applylock_;
+       std::string lastbuffer_;
+       Gtk::Entry * labelentry_;
+       Gtk::Entry * nameentry_;
+       Gtk::TreeView * refview_;
+       Glib::RefPtr<Gtk::ListStore> refListStore_;
+       Glib::RefPtr<Gtk::ListStore> bufferstore_;
+       Gtk::ComboBox * formatcombo_;
+       Gtk::ComboBox * buffercombo_;
+       Gtk::Button * jumptobutton_;
+       Gtk::Button * backbutton_;
+       Gtk::Button * cancelbutton_;
+       Gtk::Button * okbutton_;
+       Gtk::Button * applybutton_;
+       Gtk::Button * refreshbutton_;
+
+};
+
+} // namespace frontend
+} // namespace lyx
+
+#endif // GREF_H
index 36a4c4f87c0b5f95e3f6509e0b44506ed8ae0cbb..24ae7268e475cdf06b42bb72aa0f9a8f050fda27 100644 (file)
@@ -71,6 +71,8 @@ libgtk_la_SOURCES = \
        GParagraph.h \
        GPrint.C \
        GPrint.h \
+       GRef.C \
+       GRef.h \
        GScreen.C \
        GScreen.h \
        GSearch.C \
@@ -143,7 +145,6 @@ xforms_objects = \
        ../xforms/FormMathsStyle.lo \
        ../xforms/FormPreamble.lo \
        ../xforms/FormPreferences.lo \
-       ../xforms/FormRef.lo \
        ../xforms/forms_gettext.lo \
        ../xforms/FormTabular.lo \
        ../xforms/FormText.lo \
index e6c500fd06f33f203ae1a981afe637bc692c92fe..7e32022ee3a31e87ac83c60c22df462c7a9fbc71 100644 (file)
@@ -21,6 +21,7 @@ dist_glade_DATA = \
        note.glade \
        paragraph.glade \
        print.glade \
+       ref.glade \
        search.glade \
        sendto.glade \
        showfile.glade \
diff --git a/src/frontends/gtk/glade/ref.glade b/src/frontends/gtk/glade/ref.glade
new file mode 100644 (file)
index 0000000..6695cbc
--- /dev/null
@@ -0,0 +1,416 @@
+<?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">dialog1</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="focus_on_map">True</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="GtkVBox" id="vbox2">
+         <property name="border_width">12</property>
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">12</property>
+
+         <child>
+           <widget class="GtkHBox" id="hbox2">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">12</property>
+
+             <child>
+               <widget class="GtkLabel" id="label2">
+                 <property name="visible">True</property>
+                 <property name="can_focus">True</property>
+                 <property name="label" translatable="yes">_Document:</property>
+                 <property name="use_underline">True</property>
+                 <property name="use_markup">True</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">True</property>
+                 <property name="xalign">0.490000009537</property>
+                 <property name="yalign">0.490000009537</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</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="Buffer">
+                 <property name="width_request">150</property>
+                 <property name="visible">True</property>
+                 <property name="items" translatable="yes">help</property>
+                 <property name="add_tearoffs">False</property>
+                 <property name="focus_on_click">True</property>
+               </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>
+
+         <child>
+           <widget class="GtkHBox" id="hbox3">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">12</property>
+
+             <child>
+               <widget class="GtkScrolledWindow" id="scrolledwindow1">
+                 <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="Labels">
+                     <property name="width_request">150</property>
+                     <property name="height_request">300</property>
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="headers_visible">True</property>
+                     <property name="rules_hint">False</property>
+                     <property name="reorderable">False</property>
+                     <property name="enable_search">True</property>
+                     <property name="fixed_height_mode">False</property>
+                     <property name="hover_selection">False</property>
+                     <property name="hover_expand">False</property>
+                   </widget>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">True</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVButtonBox" id="vbuttonbox1">
+                 <property name="visible">True</property>
+                 <property name="layout_style">GTK_BUTTONBOX_START</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkButton" id="JumpTo">
+                     <property name="visible">True</property>
+                     <property name="tooltip" translatable="yes">Jump to the position of the selected label</property>
+                     <property name="can_default">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="label">gtk-jump-to</property>
+                     <property name="use_stock">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkButton" id="Back">
+                     <property name="visible">True</property>
+                     <property name="tooltip" translatable="yes">Return to original position in document</property>
+                     <property name="can_default">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="label">gtk-go-back</property>
+                     <property name="use_stock">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkButton" id="Refresh">
+                     <property name="visible">True</property>
+                     <property name="tooltip" translatable="yes">Refresh the label list</property>
+                     <property name="can_default">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="label">gtk-refresh</property>
+                     <property name="use_stock">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+                   </widget>
+                 </child>
+               </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">True</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkTable" id="table1">
+             <property name="visible">True</property>
+             <property name="n_rows">3</property>
+             <property name="n_columns">2</property>
+             <property name="homogeneous">False</property>
+             <property name="row_spacing">6</property>
+             <property name="column_spacing">6</property>
+
+             <child>
+               <widget class="GtkEntry" id="Name">
+                 <property name="visible">True</property>
+                 <property name="sensitive">False</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">*</property>
+                 <property name="activates_default">False</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="y_options"></property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label3">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">_Label:</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="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</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="label4">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">_Format:</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="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">0</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</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="label5">
+                 <property name="visible">True</property>
+                 <property name="sensitive">False</property>
+                 <property name="label" translatable="yes">_Name:</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="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</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="GtkComboBox" id="Format">
+                 <property name="visible">True</property>
+                 <property name="items" translatable="yes">&lt;reference&gt;
+(&lt;reference&gt;)
+&lt;page&gt;
+on page &lt;page&gt;
+&lt;reference&gt; on page &lt;page&gt;
+Formatted reference</property>
+                 <property name="add_tearoffs">False</property>
+                 <property name="focus_on_click">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_options">fill</property>
+                 <property name="y_options">fill</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkEntry" id="Label">
+                 <property name="visible">True</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">*</property>
+                 <property name="activates_default">False</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="y_options"></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>