Merge remote branch 'origin/master' into import-gui
authorJohn Darrington <john@darrington.wattle.id.au>
Thu, 9 May 2013 01:40:54 +0000 (03:40 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Thu, 9 May 2013 01:40:54 +0000 (03:40 +0200)
1  2 
src/ui/gui/automake.mk
src/ui/gui/page-assistant.c
src/ui/gui/page-file.c
src/ui/gui/text-data-import-dialog.c
src/ui/gui/text-data-import.ui

diff --combined src/ui/gui/automake.mk
index 941a7fea1c2690b36840188c13d19f3933ee7ed7,ce7864ee2b47416f3e68d1bbbe0f9f01cc4f8f53..694ca57697b0b9334f4e8ff32b4246416c4df2d6
@@@ -1,7 -1,5 +1,5 @@@
  ## Process this file with automake to produce Makefile.in  -*- makefile -*-
  
- include $(top_srcdir)/src/ui/gui/sheet/automake.mk
  UI_FILES = \
        src/ui/gui/aggregate.ui \
        src/ui/gui/autorecode.ui \
@@@ -11,6 -9,7 +9,7 @@@
        src/ui/gui/count.ui \
        src/ui/gui/crosstabs.ui \
        src/ui/gui/chi-square.ui \
+       src/ui/gui/data-sheet.ui \
        src/ui/gui/descriptives.ui \
        src/ui/gui/entry-dialog.ui \
        src/ui/gui/examine.ui \
@@@ -45,6 -44,7 +44,7 @@@
        src/ui/gui/data-editor.ui \
        src/ui/gui/output-viewer.ui \
        src/ui/gui/syntax-editor.ui \
+       src/ui/gui/var-sheet.ui \
        src/ui/gui/var-type-dialog.ui
  
  EXTRA_DIST += \
@@@ -74,8 -74,7 +74,7 @@@ endi
  
  
  src_ui_gui_psppire_LDADD = \
-         src/ui/gui/sheet/libsheet.la \
-       lib/gtk-contrib/libgtksheet.a \
+       lib/gtk-contrib/libxpaned.a \
        src/ui/libuicommon.la \
        src/libpspp.la \
        src/libpspp-core.la \
@@@ -188,8 -187,6 +187,6 @@@ src_ui_gui_psppire_SOURCES = 
        src/ui/gui/chi-square-dialog.h \
        src/ui/gui/count-dialog.c \
        src/ui/gui/count-dialog.h \
-       src/ui/gui/customentry.c \
-       src/ui/gui/customentry.h \
        src/ui/gui/dialog-common.c \
        src/ui/gui/dialog-common.h \
        src/ui/gui/dict-display.h \
        src/ui/gui/psppire-conf.h \
        src/ui/gui/psppire-data-editor.c \
        src/ui/gui/psppire-data-editor.h \
+       src/ui/gui/psppire-data-sheet.c \
+       src/ui/gui/psppire-data-sheet.h \
        src/ui/gui/psppire-data-store.c \
        src/ui/gui/psppire-data-store.h \
        src/ui/gui/psppire-data-window.c \
        src/ui/gui/psppire-var-ptr.h \
        src/ui/gui/psppire-var-sheet.c \
        src/ui/gui/psppire-var-sheet.h \
-       src/ui/gui/psppire-var-store.c \
-       src/ui/gui/psppire-var-store.h \
        src/ui/gui/psppire-vbuttonbox.h \
        src/ui/gui/psppire-window.c \
        src/ui/gui/psppire-window.h \
        src/ui/gui/page-formats.h \
        src/ui/gui/page-separators.c \
        src/ui/gui/page-separators.h \
 +      src/ui/gui/page-sheet-spec.c \
 +      src/ui/gui/page-sheet-spec.h \
        src/ui/gui/text-data-import-dialog.c \
        src/ui/gui/text-data-import-dialog.h \
        src/ui/gui/transpose-dialog.c \
index cad23763de75dcbb99834074ee6d4e40d9e26374,608412b03cd8db782f5fdf8dcc09bf1a92a29307..a83fbb2cd5add5204aa9e315c2336ee830f27fea
@@@ -20,7 -20,6 +20,6 @@@
  
  #include <errno.h>
  #include <fcntl.h>
- #include <gtk-contrib/psppire-sheet.h>
  #include <gtk/gtk.h>
  #include <limits.h>
  #include <stdlib.h>
@@@ -46,7 -45,6 +45,6 @@@
  #include "ui/gui/psppire-encoding-selector.h"
  #include "ui/gui/psppire-empty-list-store.h"
  #include "ui/gui/psppire-var-sheet.h"
- #include "ui/gui/psppire-var-store.h"
  
  #include "gl/error.h"
  #include "gl/intprops.h"
@@@ -160,12 -158,10 +158,12 @@@ on_prepare (GtkAssistant *assistant, Gt
    if ( ia->spreadsheet) 
      {
        if (pn == 0)
 -      {
 -      }
 +      {
 +        prepare_sheet_spec_page (ia);
 +        }
        else if (pn == 1)
        {
 +        post_sheet_spec_page (ia);
          prepare_formats_page (ia);
        }
      }
@@@ -232,8 -228,6 +230,8 @@@ on_reset (GtkButton *button, struct imp
      reset_separators_page (ia);
    else if (page == assist_get_page ((struct assist_page *) ia->formats))
      reset_formats_page (ia);
 +  else if (page == assist_get_page ((struct assist_page *) ia->sheet_spec))
 +    reset_sheet_spec_page (ia);
  }
  
  /* Causes the assistant to close, returning RESPONSE for
diff --combined src/ui/gui/page-file.c
index 517f5fb9ac19d4cd31c740acac5c1c627d59ab81,850f20787d44019324bde4c0889085fe7e20573e..fdbda325f8ffdc0771cfb647a108a6124865874d
@@@ -20,7 -20,6 +20,6 @@@
  
  #include <errno.h>
  #include <fcntl.h>
- #include <gtk-contrib/psppire-sheet.h>
  #include <gtk/gtk.h>
  #include <limits.h>
  #include <stdlib.h>
@@@ -50,7 -49,6 +49,6 @@@
  #include "ui/gui/psppire-encoding-selector.h"
  #include "ui/gui/psppire-empty-list-store.h"
  #include "ui/gui/psppire-var-sheet.h"
- #include "ui/gui/psppire-var-store.h"
  #include "ui/gui/psppire-scanf.h"
  #include "ui/syntax-gen.h"
  
@@@ -230,21 -228,6 +228,21 @@@ choose_file (GtkWindow *parent_window, 
    gtk_file_filter_add_mime_type (filter, "text/tab-separated-values");
    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
  
 +  filter = gtk_file_filter_new ();
 +  gtk_file_filter_set_name (filter, _("Gnumeric Spreadsheet Files"));
 +  gtk_file_filter_add_mime_type (filter, "application/x-gnumeric");
 +  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
 +
 +  filter = gtk_file_filter_new ();
 +  gtk_file_filter_set_name (filter, _("OpenDocument Spreadsheet Files"));
 +  gtk_file_filter_add_mime_type (filter, "application/vnd.oasis.opendocument.spreadsheet");
 +  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
 +
 +  filter = gtk_file_filter_new ();
 +  gtk_file_filter_set_name (filter, _("All Spreadsheet Files"));
 +  gtk_file_filter_add_mime_type (filter, "application/x-gnumeric");
 +  gtk_file_filter_add_mime_type (filter, "application/vnd.oasis.opendocument.spreadsheet");
 +  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
  
    gtk_file_chooser_set_extra_widget (
      GTK_FILE_CHOOSER (dialog), psppire_encoding_selector_new ("Auto", true));
index d24a23242d7a03810de1fff1545cbd679d82767d,ce23093feefa33ea88837236f77fc9a8f43423e7..5317bb05c2a8db4e9e26fbc35598e5a5cedbd3d8
  #include "ui/gui/text-data-import-dialog.h"
  
  #include "page-intro.h"
 +#include "page-sheet-spec.h"
  #include "page-first-line.h"
  #include "page-separators.h"
  #include "page-formats.h"
  
  #include <errno.h>
  #include <fcntl.h>
- #include <gtk-contrib/psppire-sheet.h>
  #include <gtk/gtk.h>
  #include <limits.h>
  #include <stdlib.h>
  #include "ui/gui/executor.h"
  #include "ui/gui/helper.h"
  #include "ui/gui/builder-wrapper.h"
+ #include "ui/gui/pspp-sheet-selection.h"
+ #include "ui/gui/pspp-sheet-view.h"
  #include "ui/gui/psppire-data-window.h"
  #include "ui/gui/psppire-dialog.h"
  #include "ui/gui/psppire-encoding-selector.h"
  #include "ui/gui/psppire-empty-list-store.h"
  #include "ui/gui/psppire-var-sheet.h"
- #include "ui/gui/psppire-var-store.h"
  #include "ui/gui/psppire-scanf.h"
  #include "ui/syntax-gen.h"
  
@@@ -70,7 -69,7 +70,7 @@@ static void apply_dict (const struct di
  static char *generate_syntax (const struct import_assistant *);
  
  static void add_line_number_column (const struct import_assistant *,
-                                     GtkTreeView *);
+                                     PsppSheetView *);
  
  /* Pops up the Text Data Import assistant. */
  void
@@@ -78,7 -77,6 +78,7 @@@ text_data_import_assistant (PsppireData
  {
    GtkWindow *parent_window = GTK_WINDOW (dw);
    struct import_assistant *ia = init_assistant (parent_window);
 +  struct sheet_spec_page *ssp ;
  
    if (!init_file (ia, parent_window))
      {
        return;
      }
  
 +  ssp = ia->sheet_spec;
  
 +  if (ia->spreadsheet)
 +    {
 +      ia->sheet_spec = sheet_spec_page_create (ia);
 +    }
 +  else
      {
        ia->intro = intro_page_create (ia);
        ia->first_line = first_line_page_create (ia);
        break;
      }
  
 +  if (ssp) 
      {
        destroy_formats_page (ia);
        destroy_separators_page (ia);
@@@ -232,7 -223,6 +232,7 @@@ generate_syntax (const struct import_as
  {
    struct string s = DS_EMPTY_INITIALIZER;
  
 +  if (ia->spreadsheet == NULL)
      {
        syntax_gen_pspp (&s,
                       "GET DATA"
        if (ia->file.encoding && strcmp (ia->file.encoding, "Auto"))
        syntax_gen_pspp (&s, "  /ENCODING=%sq\n", ia->file.encoding);
  
 -
        intro_append_syntax (ia->intro, &s);
  
  
        formats_append_syntax (ia, &s);
        apply_dict (ia->dict, &s);
      }
 -
 +  else
 +    {
 +      return sheet_spec_gen_syntax (ia);
 +    }
 +  
    return ds_cstr (&s);
  }
  
  
  
- static void render_input_cell (GtkTreeViewColumn *tree_column,
+ static void render_input_cell (PsppSheetViewColumn *tree_column,
                                 GtkCellRenderer *cell,
                                 GtkTreeModel *model, GtkTreeIter *iter,
                                 gpointer ia);
@@@ -279,7 -266,7 +279,7 @@@ static gboolean on_query_input_tooltip 
  /* Called to render one of the cells in the fields preview tree
     view. */
  static void
- render_input_cell (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
+ render_input_cell (PsppSheetViewColumn *tree_column, GtkCellRenderer *cell,
                     GtkTreeModel *model, GtkTreeIter *iter,
                     gpointer ia_)
  {
@@@ -400,7 -387,7 +400,7 @@@ parse_field (struct import_assistant *i
  /* Called to render one of the cells in the data preview tree
     view. */
  static void
- render_output_cell (GtkTreeViewColumn *tree_column,
+ render_output_cell (PsppSheetViewColumn *tree_column,
                      GtkCellRenderer *cell,
                      GtkTreeModel *model,
                      GtkTreeIter *iter,
@@@ -460,11 -447,11 +460,11 @@@ get_tooltip_location (GtkWidget *widget
                        const struct import_assistant *ia,
                        size_t *row, size_t *column)
  {
-   GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
+   PsppSheetView *tree_view = PSPP_SHEET_VIEW (widget);
    gint bx, by;
    GtkTreePath *path;
    GtkTreeIter iter;
-   GtkTreeViewColumn *tree_column;
+   PsppSheetViewColumn *tree_column;
    GtkTreeModel *tree_model;
    bool ok;
  
    if (!gtk_widget_get_mapped (widget))
      return FALSE;
  
-   gtk_tree_view_convert_widget_to_bin_window_coords (tree_view,
-                                                      wx, wy, &bx, &by);
-   if (!gtk_tree_view_get_path_at_pos (tree_view, bx, by,
+   pspp_sheet_view_convert_widget_to_bin_window_coords (tree_view,
+                                                        wx, wy, &bx, &by);
+   if (!pspp_sheet_view_get_path_at_pos (tree_view, bx, by,
                                        &path, &tree_column, NULL, NULL))
      return FALSE;
  
    *column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tree_column),
                                                  "column-number"));
  
-   tree_model = gtk_tree_view_get_model (tree_view);
+   tree_model = pspp_sheet_view_get_model (tree_view);
    ok = gtk_tree_model_get_iter (tree_model, &iter, path);
    gtk_tree_path_free (path);
    if (!ok)
  void
  make_tree_view (const struct import_assistant *ia,
                  size_t first_line,
-                 GtkTreeView **tree_view)
+                 PsppSheetView **tree_view)
  {
    GtkTreeModel *model;
  
-   *tree_view = GTK_TREE_VIEW (gtk_tree_view_new ());
+   *tree_view = PSPP_SHEET_VIEW (pspp_sheet_view_new ());
+   pspp_sheet_view_set_grid_lines (*tree_view, PSPP_SHEET_VIEW_GRID_LINES_BOTH);
    model = GTK_TREE_MODEL (psppire_empty_list_store_new (
                                                        ia->file.line_cnt - first_line));
    g_object_set_data (G_OBJECT (model), "lines", ia->file.lines + first_line);
    g_object_set_data (G_OBJECT (model), "first-line",
                       GINT_TO_POINTER (first_line));
-   gtk_tree_view_set_model (*tree_view, model);
+   pspp_sheet_view_set_model (*tree_view, model);
    g_object_unref (model);
  
    add_line_number_column (ia, *tree_view);
  }
  
  static void
- render_line_number (GtkTreeViewColumn *tree_column,
+ render_line_number (PsppSheetViewColumn *tree_column,
                      GtkCellRenderer *cell,
                      GtkTreeModel *tree_model,
                      GtkTreeIter *iter,
  
  static void
  add_line_number_column (const struct import_assistant *ia,
-                         GtkTreeView *treeview)
+                         PsppSheetView *treeview)
  {
-   GtkTreeViewColumn *column;
-   column = gtk_tree_view_column_new_with_attributes (
-                                                    _("Line"), ia->asst.prop_renderer, (void *) NULL);
-   gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
-   gtk_tree_view_column_set_fixed_width (
-                                       column, get_monospace_width (treeview, ia->asst.prop_renderer, 5));
-   gtk_tree_view_column_set_resizable (column, TRUE);
-   gtk_tree_view_column_set_cell_data_func (column, ia->asst.prop_renderer,
-                                            render_line_number, NULL, NULL);
-   gtk_tree_view_append_column (treeview, column);
+   PsppSheetViewColumn *column;
+   column = pspp_sheet_view_column_new_with_attributes (
+     _("Line"), ia->asst.prop_renderer, (void *) NULL);
+   pspp_sheet_view_column_set_fixed_width (
+     column, get_monospace_width (treeview, ia->asst.prop_renderer, 5));
+   pspp_sheet_view_column_set_resizable (column, TRUE);
+   pspp_sheet_view_column_set_cell_data_func (column, ia->asst.prop_renderer,
+                                              render_line_number, NULL, NULL);
+   pspp_sheet_view_append_column (treeview, column);
  }
  
  gint
- get_monospace_width (GtkTreeView *treeview, GtkCellRenderer *renderer,
+ get_monospace_width (PsppSheetView *treeview, GtkCellRenderer *renderer,
                       size_t char_cnt)
  {
    struct string s;
  }
  
  gint
- get_string_width (GtkTreeView *treeview, GtkCellRenderer *renderer,
+ get_string_width (PsppSheetView *treeview, GtkCellRenderer *renderer,
                    const char *string)
  {
    gint width;
    return width;
  }
  
GtkTreeViewColumn *
- make_data_column (struct import_assistant *ia, GtkTreeView *tree_view,
PsppSheetViewColumn *
+ make_data_column (struct import_assistant *ia, PsppSheetView *tree_view,
                    bool input, gint dict_idx)
  {
    struct variable *var = NULL;
    struct column *column = NULL;
    size_t char_cnt;
    gint content_width, header_width;
-   GtkTreeViewColumn *tree_column;
+   PsppSheetViewColumn *tree_column;
    char *name;
  
    if (input)
    header_width = get_string_width (tree_view, ia->asst.prop_renderer,
                                     name);
  
-   tree_column = gtk_tree_view_column_new ();
+   tree_column = pspp_sheet_view_column_new ();
    g_object_set_data (G_OBJECT (tree_column), "column-number",
                       GINT_TO_POINTER (dict_idx));
-   gtk_tree_view_column_set_title (tree_column, name);
-   gtk_tree_view_column_pack_start (tree_column, ia->asst.fixed_renderer,
-                                    FALSE);
-   gtk_tree_view_column_set_cell_data_func (
-                                          tree_column, ia->asst.fixed_renderer,
-                                          input ? render_input_cell : render_output_cell, ia, NULL);
-   gtk_tree_view_column_set_sizing (tree_column, GTK_TREE_VIEW_COLUMN_FIXED);
-   gtk_tree_view_column_set_fixed_width (tree_column, MAX (content_width,
-                                                           header_width));
+   pspp_sheet_view_column_set_title (tree_column, name);
+   pspp_sheet_view_column_pack_start (tree_column, ia->asst.fixed_renderer,
+                                      FALSE);
+   pspp_sheet_view_column_set_cell_data_func (
+     tree_column, ia->asst.fixed_renderer,
+     input ? render_input_cell : render_output_cell, ia, NULL);
+   pspp_sheet_view_column_set_fixed_width (tree_column, MAX (content_width,
+                                                             header_width));
  
    free (name);
  
    return tree_column;
  }
  
GtkTreeView *
PsppSheetView *
  create_data_tree_view (bool input, GtkContainer *parent,
                         struct import_assistant *ia)
  {
-   GtkTreeView *tree_view;
+   PsppSheetView *tree_view;
    gint i;
  
    make_tree_view (ia, ia->skip_lines, &tree_view);
-   gtk_tree_selection_set_mode (gtk_tree_view_get_selection (tree_view),
-                                GTK_SELECTION_NONE);
+   pspp_sheet_selection_set_mode (pspp_sheet_view_get_selection (tree_view),
+                                  PSPP_SHEET_SELECTION_NONE);
  
    for (i = 0; i < ia->column_cnt; i++)
-     gtk_tree_view_append_column (tree_view,
-                                  make_data_column (ia, tree_view, input, i));
+     pspp_sheet_view_append_column (tree_view,
+                                    make_data_column (ia, tree_view, input, i));
  
    g_object_set (G_OBJECT (tree_view), "has-tooltip", TRUE, (void *) NULL);
    g_signal_connect (tree_view, "query-tooltip",
                      G_CALLBACK (input ? on_query_input_tooltip
                                  : on_query_output_tooltip), ia);
-   gtk_tree_view_set_fixed_height_mode (tree_view, true);
  
    gtk_container_add (parent, GTK_WIDGET (tree_view));
    gtk_widget_show (GTK_WIDGET (tree_view));
index a7a393ea115c251407f77b19e22010805a5ce624,7c09e49aa2621b1c5f7ee51b2ecf5a045be9ca8a..fc886c2a003ced420c321c1c96d94198b52fa6df
@@@ -158,7 -158,7 +158,7 @@@ The selected file contains N lines of t
              <property name="hscrollbar_policy">automatic</property>
              <property name="vscrollbar_policy">automatic</property>
              <child>
-               <object class="GtkTreeView" id="first-line">
+               <object class="PsppSheetView" id="first-line">
                  <property name="visible">True</property>
                  <property name="can_focus">True</property>
                  <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                      <property name="hscrollbar_policy">automatic</property>
                      <property name="vscrollbar_policy">automatic</property>
                      <child>
-                       <object class="GtkTreeView" id="fields">
+                       <object class="PsppSheetView" id="fields">
                          <property name="visible">True</property>
                          <property name="can_focus">True</property>
                          <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                          <property name="hscrollbar_policy">automatic</property>
                          <property name="vscrollbar_policy">automatic</property>
                          <child>
-                           <object class="GtkTreeView" id="data">
+                           <object class="PsppSheetView" id="data">
                              <property name="visible">True</property>
                              <property name="can_focus">True</property>
                              <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
        </object>
      </child>
    </object>
 -  <object class="GtkAdjustment" id="adjustment1">
 -    <property name="value">100</property>
 -    <property name="lower">1</property>
 -    <property name="upper">100</property>
 -    <property name="step_increment">1</property>
 -    <property name="page_increment">10</property>
 -  </object>
 -  <object class="GtkAdjustment" id="adjustment2">
 -    <property name="value">1000</property>
 -    <property name="upper">100000000</property>
 -    <property name="step_increment">1</property>
 -    <property name="page_increment">10</property>
 +  <object class="GtkWindow" id="Sheet">
 +    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
 +    <property name="border_width">12</property>
 +    <property name="title" translatable="yes">Importing Spreadsheet Data</property>
 +    <child>
 +      <object class="GtkVBox" id="vbox1">
 +        <property name="visible">True</property>
 +        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
 +        <property name="orientation">vertical</property>
 +        <property name="spacing">12</property>
 +        <child>
 +          <object class="GtkLabel" id="intro-label1">
 +            <property name="visible">True</property>
 +            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
 +            <property name="label" translatable="yes">Enter below the sheet number and the cell range which you wish to import.</property>
 +            <property name="wrap">True</property>
 +          </object>
 +          <packing>
 +            <property name="position">0</property>
 +          </packing>
 +        </child>
 +        <child>
 +          <object class="GtkAlignment" id="alignment4">
 +            <property name="visible">True</property>
 +            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
 +            <property name="xscale">0</property>
 +            <child>
 +              <object class="GtkFrame" id="frame1">
 +                <property name="visible">True</property>
 +                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
 +                <property name="label_xalign">0</property>
 +                <property name="shadow_type">none</property>
 +                <child>
 +                  <object class="GtkAlignment" id="alignment7">
 +                    <property name="visible">True</property>
 +                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
 +                    <property name="left_padding">12</property>
 +                    <child>
 +                      <object class="GtkTable" id="table3">
 +                        <property name="visible">True</property>
 +                        <property name="n_rows">3</property>
 +                        <property name="n_columns">2</property>
 +                        <child>
 +                          <object class="GtkEntry" id="cell-range-entry">
 +                            <property name="visible">True</property>
 +                            <property name="can_focus">True</property>
 +                            <property name="invisible_char">&#x25CF;</property>
 +                          </object>
 +                          <packing>
 +                            <property name="left_attach">1</property>
 +                            <property name="right_attach">2</property>
 +                            <property name="y_options"></property>
 +                          </packing>
 +                        </child>
 +                        <child>
 +                          <object class="GtkComboBox" id="sheet-entry">
 +                            <property name="visible">True</property>
 +                            <property name="can_focus">True</property>
 +                          <property name="active">0</property>
 +                          </object>
 +                          <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="y_options"></property>
 +                          </packing>
 +                        </child>
 +                        <child>
 +                          <object class="GtkLabel" id="cell-range-label">
 +                            <property name="visible">True</property>
 +                            <property name="xalign">1</property>
 +                            <property name="label" translatable="yes">_Cells: </property>
 +                            <property name="use_underline">True</property>
 +                            <property name="mnemonic_widget">cell-range-entry</property>
 +                          </object>
 +                          <packing>
 +                            <property name="x_options">GTK_FILL</property>
 +                            <property name="y_options"></property>
 +                          </packing>
 +                        </child>
 +                        <child>
 +                          <object class="GtkLabel" id="sheet-label">
 +                            <property name="visible">True</property>
 +                            <property name="xalign">1</property>
 +                            <property name="label" translatable="yes">_Sheet Index: </property>
 +                            <property name="use_underline">True</property>
 +                            <property name="mnemonic_widget">sheet-entry</property>
 +                          </object>
 +                          <packing>
 +                            <property name="top_attach">1</property>
 +                            <property name="bottom_attach">2</property>
 +                            <property name="x_options">GTK_FILL</property>
 +                            <property name="y_options"></property>
 +                          </packing>
 +                        </child>
 +                        <child>
 +                          <object class="GtkCheckButton" id="readnames-checkbox">
 +                            <property name="label" translatable="yes">Use first row as _variable names</property>
 +                            <property name="visible">True</property>
 +                            <property name="can_focus">True</property>
 +                            <property name="receives_default">False</property>
 +                            <property name="use_underline">True</property>
 +                            <property name="image_position">right</property>
 +                            <property name="draw_indicator">True</property>
 +                          </object>
 +                          <packing>
 +                            <property name="right_attach">2</property>
 +                            <property name="top_attach">2</property>
 +                            <property name="bottom_attach">3</property>
 +                          </packing>
 +                        </child>
 +                      </object>
 +                    </child>
 +                  </object>
 +                </child>
 +                <child type="label">
 +                  <object class="GtkLabel" id="label4">
 +                    <property name="visible">True</property>
 +                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
 +                    <property name="label" translatable="yes">&lt;b&gt;Cells to Import&lt;/b&gt;</property>
 +                    <property name="use_markup">True</property>
 +                  </object>
 +                </child>
 +              </object>
 +            </child>
 +          </object>
 +          <packing>
 +            <property name="expand">False</property>
 +            <property name="fill">False</property>
 +            <property name="position">1</property>
 +          </packing>
 +        </child>
 +      </object>
 +    </child>
    </object>
  </interface>