Merge commit 'origin/master' into charset
authorJohn Darrington <john@darrington.wattle.id.au>
Wed, 8 Apr 2009 01:14:57 +0000 (09:14 +0800)
committerJohn Darrington <john@darrington.wattle.id.au>
Wed, 8 Apr 2009 01:14:57 +0000 (09:14 +0800)
Conflicts:

src/ui/gui/psppire-data-editor.c

1  2 
src/data/psql-reader.c
src/ui/gui/psppire-data-editor.c
src/ui/gui/psppire-data-window.c
src/ui/gui/psppire-dictview.c
src/ui/gui/psppire-var-sheet.c

diff --combined src/data/psql-reader.c
index f2d5ff282272f48e821c4826d9d60f5158f6bfca,be6d0a60759c45746ea01b660ca35e8f1770064b..85e777a991b9218bfbf2c5f17555a9972093bd5e
@@@ -288,22 -288,10 +288,22 @@@ psql_open_reader (struct psql_read_inf
    /* Create the dictionary and populate it */
    *dict = r->dict = dict_create ();
  
 +  {
 +    const int enc = PQclientEncoding (r->conn);
 +
 +    /* According to section 22.2 of the Postgresql manual
 +       a value of zero (SQL_ASCII) indicates
 +       "a declaration of ignorance about the encoding".
 +       Accordingly, we don't set the dictionary's encoding
 +       if we find this value.
 +    */
 +    if ( enc != 0 )
 +      dict_set_encoding (r->dict, pg_encoding_to_char (enc));
 +  }
 +
    /*
      select count (*) from (select * from medium) stupid_sql_standard;
    */
 -
    ds_init_cstr (&query,
                "BEGIN READ ONLY ISOLATION LEVEL SERIALIZABLE; "
                "DECLARE  pspp BINARY CURSOR FOR ");
          break;
        }
  
+       if ( width == 0 && fmt_is_string (fmt.type))
+       fmt.w = width = MAX_SHORT_STRING;
        var = create_var (r, &fmt, width, PQfname (qres, i), i);
        if ( type == NUMERICOID && n_tuples > 0)
        {
index 1070f5c2871caef36db153d9b48aca7667497ad3,be911ba6d69817d928264eb13effd969272d029b..9d15ceb94fe53c628b90e3f48ce15e415b0e253d
@@@ -23,8 -23,7 +23,8 @@@
  
  #include <language/syntax-string-source.h>
  #include "psppire-data-store.h"
- #include <ui/gui/sheet/psppire-axis-impl.h>
 +#include <libpspp/i18n.h>
+ #include <ui/gui/sheet/psppire-axis.h>
  #include "helper.h"
  
  #include <gtk-contrib/gtkxpaned.h>
@@@ -221,8 -220,8 +221,8 @@@ new_data_callback (PsppireDataStore *ds
  
    for (i = 0; i < 2; ++i)
      {
-       psppire_axis_impl_clear (de->vaxis[i]);
-       psppire_axis_impl_append_n (de->vaxis[i], n_cases, DEFAULT_ROW_HEIGHT);
+       psppire_axis_clear (de->vaxis[i]);
+       psppire_axis_append_n (de->vaxis[i], n_cases, DEFAULT_ROW_HEIGHT);
      }
  }
  
@@@ -233,7 -232,7 +233,7 @@@ case_inserted_callback (PsppireDataStor
    PsppireDataEditor *de = PSPPIRE_DATA_EDITOR (data);
  
    for (i = 0; i < 2; ++i)
-     psppire_axis_impl_insert (de->vaxis[i], before, DEFAULT_ROW_HEIGHT);
+     psppire_axis_insert (de->vaxis[i], before, DEFAULT_ROW_HEIGHT);
  }
  
  
@@@ -244,7 -243,7 +244,7 @@@ cases_deleted_callback (PsppireDataStor
    PsppireDataEditor *de = PSPPIRE_DATA_EDITOR (data);
  
    for (i = 0; i < 2; ++i)
-     psppire_axis_impl_delete (de->vaxis[0], first, n_cases);
+     psppire_axis_delete (de->vaxis[0], first, n_cases);
  }
  
  
@@@ -289,22 -288,22 +289,22 @@@ new_variables_callback (PsppireDict *di
    PsppireDataEditor *de = PSPPIRE_DATA_EDITOR (data);
    gint m_width = width_of_m (GTK_WIDGET (de));
  
-   PsppireAxisImpl *vaxis;
+   PsppireAxis *vaxis;
    g_object_get (de->var_sheet, "vertical-axis", &vaxis, NULL);
  
-   psppire_axis_impl_clear (vaxis);
-   psppire_axis_impl_append_n (vaxis, 1 + psppire_dict_get_var_cnt (dict), DEFAULT_ROW_HEIGHT);
+   psppire_axis_clear (vaxis);
+   psppire_axis_append_n (vaxis, 1 + psppire_dict_get_var_cnt (dict), DEFAULT_ROW_HEIGHT);
  
    g_signal_connect_swapped (de->haxis, "resize-unit",
                            G_CALLBACK (rewidth_variable), de);
  
-   psppire_axis_impl_clear (de->haxis);
+   psppire_axis_clear (de->haxis);
  
    for (v = 0 ; v < psppire_dict_get_var_cnt (dict); ++v)
      {
        const struct variable *var = psppire_dict_get_variable (dict, v);
  
-       psppire_axis_impl_append (de->haxis, m_width * var_get_display_width (var));
+       psppire_axis_append (de->haxis, m_width * var_get_display_width (var));
      }
  }
  
@@@ -315,16 -314,16 +315,16 @@@ insert_variable_callback (PsppireDict *
  
    gint m_width  = width_of_m (GTK_WIDGET (de));
  
-   PsppireAxisImpl *var_vaxis;
+   PsppireAxis *var_vaxis;
  
    const struct variable *var = psppire_dict_get_variable (dict, x);
  
    g_object_get (de->var_sheet, "vertical-axis", &var_vaxis, NULL);
  
-   psppire_axis_impl_insert (var_vaxis, x, DEFAULT_ROW_HEIGHT);
+   psppire_axis_insert (var_vaxis, x, DEFAULT_ROW_HEIGHT);
  
  
-   psppire_axis_impl_insert (de->haxis, x, m_width * var_get_display_width (var));
+   psppire_axis_insert (de->haxis, x, m_width * var_get_display_width (var));
  }
  
  
@@@ -334,12 -333,12 +334,12 @@@ delete_variable_callback (PsppireDict *
  {
    PsppireDataEditor *de = PSPPIRE_DATA_EDITOR (data);
  
-   PsppireAxisImpl *var_vaxis;
+   PsppireAxis *var_vaxis;
    g_object_get (de->var_sheet, "vertical-axis", &var_vaxis, NULL);
  
-   psppire_axis_impl_delete (var_vaxis, posn, 1);
+   psppire_axis_delete (var_vaxis, posn, 1);
  
-   psppire_axis_impl_delete (de->haxis, posn, 1);
+   psppire_axis_delete (de->haxis, posn, 1);
  }
  
  
@@@ -357,7 -356,7 +357,7 @@@ rewidth_variable_callback (PsppireDict 
    if ( var_width < 1 )
      var_width = 1;
  
-   psppire_axis_impl_resize (de->haxis, posn, m_width * var_width);
+   psppire_axis_resize (de->haxis, posn, m_width * var_width);
  }
  
  
@@@ -744,9 -743,7 +744,9 @@@ update_data_ref_entry (const PsppireShe
          gchar *text = g_strdup_printf ("%d: %s", row + FIRST_CASE_NUMBER,
                                         var_get_name (var));
  
 -        gchar *s = pspp_locale_to_utf8 (text, -1, 0);
 +        gchar *s = recode_string (UTF8,
 +                                  psppire_dict_encoding (data_store->dict),
 +                                  text, -1);
  
          g_free (text);
  
@@@ -825,8 -822,8 +825,8 @@@ on_map (GtkWidget *w
  static void
  init_sheet (PsppireDataEditor *de, int i,
            GtkAdjustment *hadj, GtkAdjustment *vadj,
-           PsppireAxisImpl *vaxis,
-           PsppireAxisImpl *haxis
+           PsppireAxis *vaxis,
+           PsppireAxis *haxis
            )
  {
    de->sheet_bin[i] = gtk_scrolled_window_new (hadj, vadj);
@@@ -862,12 -859,12 +862,12 @@@ init_data_sheet (PsppireDataEditor *de
    GtkAdjustment *vadj1, *hadj1;
    GtkWidget *sheet ;
  
-   de->vaxis[0] = psppire_axis_impl_new ();
-   de->vaxis[1] = psppire_axis_impl_new ();
+   de->vaxis[0] = psppire_axis_new ();
+   de->vaxis[1] = psppire_axis_new ();
  
    /* There's only one horizontal axis, since the
       column widths are parameters of the variables */
-   de->haxis = psppire_axis_impl_new ();
+   de->haxis = psppire_axis_new ();
  
    de->split = TRUE;
    de->paned = gtk_xpaned_new ();
index ef9e0b6eeaa034f528ad998828244e856e2cd20e,03ae6e4d0172415a5582064523d44b540b240bb3..52ec0d49b25db95eedcdff6f2924e9b7196e75dd
@@@ -54,6 -54,7 +54,7 @@@
  #include "frequencies-dialog.h"
  #include "examine-dialog.h"
  #include "regression-dialog.h"
+ #include "reliability-dialog.h"
  #include "oneway-anova-dialog.h"
  #include "t-test-independent-samples-dialog.h"
  #include "t-test-one-sample.h"
@@@ -459,16 -460,15 +460,16 @@@ name_has_suffix (const gchar *name
  static void
  save_file (PsppireWindow *w)
  {
 -  gchar *fn = NULL;
 +  gchar *native_file_name = NULL;
 +  gchar *file_name = NULL;
    GString *fnx;
    struct getl_interface *sss;
 -  struct string file_name ;
 +  struct string filename ;
    PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (w);
  
 -  g_object_get (w, "filename", &fn, NULL);
 +  g_object_get (w, "filename", &file_name, NULL);
  
 -  fnx = g_string_new (fn);
 +  fnx = g_string_new (file_name);
  
    if ( ! name_has_suffix (fnx->str))
      {
        g_string_append (fnx, ".sav");
      }
  
 -  ds_init_empty (&file_name);
 -  syntax_gen_string (&file_name, ss_cstr (fnx->str));
 -  g_string_free (fnx, FALSE);
 +  ds_init_empty (&filename);
 +
 +  native_file_name =
 +    convert_glib_filename_to_system_filename (fnx->str, NULL);
 +
 +  g_string_free (fnx, TRUE);
 +
 +  syntax_gen_string (&filename, ss_cstr (native_file_name));
 +  g_free (native_file_name);
  
    if ( de->save_as_portable )
      {
        sss = create_syntax_string_source ("EXPORT OUTFILE=%s.",
 -                                       ds_cstr (&file_name));
 +                                       ds_cstr (&filename));
      }
    else
      {
        sss = create_syntax_string_source ("SAVE OUTFILE=%s.",
 -                                       ds_cstr (&file_name));
 +                                       ds_cstr (&filename));
      }
  
 -  ds_destroy (&file_name);
 +  ds_destroy (&filename);
  
    execute_syntax (sss);
  }
@@@ -1661,7 -1655,22 +1662,22 @@@ psppire_data_window_init (PsppireDataWi
                      G_CALLBACK (regression_dialog), de);
    }
  
-   { 
+   {
+     GtkAction *invoke_reliability_dialog =
+       resolve_action (de->builder, "reliability", NULL);
+     g_object_set (invoke_reliability_dialog,
+                 "tooltip", _("Reliability Analysis"),
+                 "stock-id", "pspp-reliability",
+                 NULL
+                 );
+     g_signal_connect (invoke_reliability_dialog, "activate",
+                     G_CALLBACK (reliability_dialog), de);
+   }
+   {
      GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (de->builder, "uimanager1", GTK_TYPE_UI_MANAGER));
  
      GtkWidget *recent_data =
index 37539694b138c109fbe6692628e3009dd62e35e9,a2cc7df8f6387e8cda48bfd0ca0f8617ab3fa813..f63ea0ba6fe578367d492fc2ff724487695d9034
@@@ -21,7 -21,6 +21,7 @@@
  #include "psppire-dict.h"
  #include "psppire-conf.h"
  #include <data/format.h>
 +#include <libpspp/i18n.h>
  #include "helper.h"
  
  #include <gettext.h>
@@@ -275,15 -274,11 +275,15 @@@ dv_get_base_model (GtkTreeModel *top_mo
                )
  {
    *model = top_model;
 -  *iter = *top_iter;
 +
 +  if ( iter)
 +    *iter = *top_iter;
  
    while ( ! PSPPIRE_IS_DICT (*model))
      {
 -      GtkTreeIter parent_iter = *iter;
 +      GtkTreeIter parent_iter;
 +      if (iter)
 +      parent_iter = *iter;
  
        if ( GTK_IS_TREE_MODEL_FILTER (*model))
        {
  
          *model = gtk_tree_model_filter_get_model (parent_model);
  
 -        gtk_tree_model_filter_convert_iter_to_child_iter (parent_model,
 -                                                          iter,
 -                                                          &parent_iter);
 +        if (iter)
 +          gtk_tree_model_filter_convert_iter_to_child_iter (parent_model,
 +                                                            iter,
 +                                                            &parent_iter);
        }
        else if (GTK_IS_TREE_MODEL_SORT (*model))
        {
  
          *model = gtk_tree_model_sort_get_model (parent_model);
  
 -        gtk_tree_model_sort_convert_iter_to_child_iter (parent_model,
 -                                                        iter,
 -                                                        &parent_iter);
 +        if (iter)
 +          gtk_tree_model_sort_convert_iter_to_child_iter (parent_model,
 +                                                          iter,
 +                                                          &parent_iter);
        }
      }
  }
@@@ -325,11 -318,11 +325,11 @@@ var_description_cell_data_func (GtkTree
    struct variable *var;
    GtkTreeIter iter;
    GtkTreeModel *model;
 -
 +  PsppireDict *dict;
  
    dv_get_base_model (top_model, top_iter, &model, &iter);
  
 -  g_assert (PSPPIRE_IS_DICT (model));
 +  dict = PSPPIRE_DICT (model);
  
    gtk_tree_model_get (model,
                      &iter, DICT_TVM_COL_VAR, &var, -1);
                                     "<span stretch=\"condensed\">%s</span>",
                                     var_get_label (var));
  
 -      char *utf8 = pspp_locale_to_utf8 (text, -1, NULL);
 +      char *utf8 = recode_string (UTF8, psppire_dict_encoding (dict),
 +                                text, -1);
  
        g_free (text);
        g_object_set (cell, "markup", utf8, NULL);
      }
    else
      {
 -      char *name = pspp_locale_to_utf8 (var_get_name (var), -1, NULL);
 +      char *name = recode_string (UTF8, psppire_dict_encoding (dict),
 +                                var_get_name (var), -1);
        g_object_set (cell, "text", name, NULL);
        g_free (name);
      }
@@@ -415,6 -406,7 +415,6 @@@ set_tooltip_for_variable (GtkTreeView  
    struct variable *var = NULL;
    gboolean ok;
  
 -
    gtk_tree_view_convert_widget_to_bin_window_coords (treeview,
                                                       x, y, &bx, &by);
  
  
    tree_model = gtk_tree_view_get_model (treeview);
  
 -
    gtk_tree_view_set_tooltip_row (treeview, tooltip, path);
  
    ok = gtk_tree_model_get_iter (tree_model, &iter, path);
  
    {
      gchar *tip ;
 +    GtkTreeModel *m;
 +    PsppireDict *dict;
 +
 +    dv_get_base_model (tree_model, NULL, &m, NULL);
 +    dict = PSPPIRE_DICT (m);
  
      if ( PSPPIRE_DICT_VIEW (treeview)->prefer_labels )
 -      tip = pspp_locale_to_utf8 (var_get_name (var), -1, NULL);
 +      tip = recode_string (UTF8, psppire_dict_encoding (dict),
 +                         var_get_name (var), -1);
      else
 -      tip = pspp_locale_to_utf8 (var_get_label (var), -1, NULL);
 +      tip = recode_string (UTF8, psppire_dict_encoding (dict),
 +                         var_get_label (var), -1);
  
      gtk_tooltip_set_text (tooltip, tip);
  
@@@ -523,7 -509,10 +523,10 @@@ psppire_dict_view_init (PsppireDictVie
  
    gtk_tree_view_append_column (GTK_TREE_VIEW (dict_view), col);
  
-   g_object_set (dict_view, "has-tooltip", TRUE, NULL);
+   g_object_set (dict_view,
+               "has-tooltip", TRUE,
+               "headers-visible", FALSE,
+               NULL);
  
    g_signal_connect (dict_view, "query-tooltip",
                    G_CALLBACK (set_tooltip_for_variable), NULL);
index b742f3b7c69d7431ab2789fb5b7fcbc1f366586a,696bab2150bab788b72f78a858261a77e2be0221..94b88050a135d2d90fcb6a313fa7181cc2dbd60f
@@@ -16,7 -16,7 +16,7 @@@
  
  #include <config.h>
  #include "psppire-var-sheet.h"
- #include <ui/gui/sheet/psppire-axis-impl.h>
+ #include <ui/gui/sheet/psppire-axis.h>
  
  #include "helper.h"
  
@@@ -489,8 -489,7 +489,8 @@@ psppire_var_sheet_realize (GtkWidget *w
  
    GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (vs));
  
 -  vs->val_labs_dialog = val_labs_dialog_create (GTK_WINDOW (toplevel));
 +  vs->val_labs_dialog = val_labs_dialog_create (GTK_WINDOW (toplevel),
 +                                              PSPPIRE_SHEET (vs));
    vs->missing_val_dialog = missing_val_dialog_create (GTK_WINDOW (toplevel));
    vs->var_type_dialog = var_type_dialog_create (GTK_WINDOW (toplevel));
  
@@@ -551,13 -550,13 +551,13 @@@ GtkWidget
  psppire_var_sheet_new (void)
  {
    gint i;
-   PsppireAxisImpl *ha = psppire_axis_impl_new ();
-   PsppireAxisImpl *va = psppire_axis_impl_new ();
+   PsppireAxis *ha = psppire_axis_new ();
+   PsppireAxis *va = psppire_axis_new ();
  
    GtkWidget *w = g_object_new (psppire_var_sheet_get_type (), NULL);
  
    for (i = 0 ; i < 10 ; ++i)
-     psppire_axis_impl_append (ha, column_def[i].width);
+     psppire_axis_append (ha, column_def[i].width);
  
    g_object_set (va,
                "default-size", 25,