Removed my authorship lines.
[pspp] / src / ui / gui / val-labs-dialog.c
index 070a4f50da0aa93db7ea00f294bbce785a025b47..28293808a4ee884ae2465bf73253f5e771c5202a 100644 (file)
@@ -1,7 +1,6 @@
-/* 
+/*
     PSPPIRE --- A Graphical User Interface for PSPP
     Copyright (C) 2005  Free Software Foundation
-    Written by John Darrington
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 /*  This module describes the behaviour of the Value Labels dialog box,
     used for input of the value labels in the variable sheet */
 
+#include <config.h>
+
 #include <string.h>
 
 #include "helper.h"
 #include "val-labs-dialog.h"
 #include <data/value-labels.h>
-#include "psppire-variable.h"
 
-/* This callback occurs when the text in the label entry box 
+/* This callback occurs when the text in the label entry box
    is changed */
 static void
 on_label_entry_change(GtkEntry *entry, gpointer data)
 {
+  union value v;
+  const gchar *text ;
   struct val_labs_dialog *dialog = data;
   g_assert(dialog->labs);
 
-  union value v;
-  const gchar *text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
+  text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
 
-  text_to_value(text, &v, 
-               *psppire_variable_get_write_spec(dialog->pv));
+  text_to_value(text, &v,
+               *var_get_write_format (dialog->pv));
 
 
-  if ( val_labs_find (dialog->labs, v) ) 
+  if ( val_labs_find (dialog->labs, v) )
     {
-      gtk_widget_set_sensitive(dialog->change_button, TRUE);      
-      gtk_widget_set_sensitive(dialog->add_button, FALSE);      
+      gtk_widget_set_sensitive(dialog->change_button, TRUE);
+      gtk_widget_set_sensitive(dialog->add_button, FALSE);
     }
   else
     {
-      gtk_widget_set_sensitive(dialog->change_button, FALSE);     
-      gtk_widget_set_sensitive(dialog->add_button, TRUE);       
+      gtk_widget_set_sensitive(dialog->change_button, FALSE);
+      gtk_widget_set_sensitive(dialog->add_button, TRUE);
     }
 }
 
@@ -61,8 +62,10 @@ on_label_entry_change(GtkEntry *entry, gpointer data)
 static void
 select_treeview_from_value(GtkTreeView *treeview, union value *val)
 {
+  GtkTreePath *path ;
+
   /*
-    We do this with a linear search through the model --- hardly 
+    We do this with a linear search through the model --- hardly
     efficient, but the list is short ... */
   GtkTreeIter iter;
 
@@ -73,11 +76,11 @@ select_treeview_from_value(GtkTreeView *treeview, union value *val)
        success;
        success = gtk_tree_model_iter_next(model, &iter))
     {
+      union value v;
       GValue gvalue = {0};
 
       gtk_tree_model_get_value(model, &iter, 1, &gvalue);
-         
-      union value v;
+
       v.f = g_value_get_double(&gvalue);
 
       if ( 0 == memcmp(&v, val, sizeof (union value)))
@@ -85,9 +88,9 @@ select_treeview_from_value(GtkTreeView *treeview, union value *val)
          break;
        }
     }
-       
-  GtkTreePath *path = gtk_tree_model_get_path(model, &iter);
-  if ( path ) 
+
+  path = gtk_tree_model_get_path(model, &iter);
+  if ( path )
     {
       gtk_tree_view_set_cursor(treeview, path, 0, 0);
       gtk_tree_path_free(path);
@@ -101,23 +104,24 @@ select_treeview_from_value(GtkTreeView *treeview, union value *val)
 static void
 on_value_entry_change(GtkEntry *entry, gpointer data)
 {
+  char *s;
+
   struct val_labs_dialog *dialog = data;
 
   const gchar *text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
 
   union value v;
-  text_to_value(text, &v, 
-               *psppire_variable_get_write_spec(dialog->pv));
+  text_to_value(text, &v,
+               *var_get_write_format (dialog->pv));
 
 
-  g_signal_handler_block(GTK_ENTRY(dialog->label_entry), 
+  g_signal_handler_block(GTK_ENTRY(dialog->label_entry),
                         dialog->change_handler_id);
 
   gtk_entry_set_text(GTK_ENTRY(dialog->label_entry),"");
 
 
-  char *s;
-  if ( (s = val_labs_find (dialog->labs, v)) ) 
+  if ( (s = val_labs_find (dialog->labs, v)) )
     {
       gtk_entry_set_text(GTK_ENTRY(dialog->label_entry), s);
       gtk_widget_set_sensitive(dialog->add_button, FALSE);
@@ -129,28 +133,29 @@ on_value_entry_change(GtkEntry *entry, gpointer data)
       gtk_widget_set_sensitive(dialog->remove_button, FALSE);
       gtk_widget_set_sensitive(dialog->add_button, TRUE);
     }
-  
-  g_signal_handler_unblock(GTK_ENTRY(dialog->label_entry), 
+
+  g_signal_handler_unblock(GTK_ENTRY(dialog->label_entry),
                         dialog->change_handler_id);
 }
 
 
-/* Callback for when the Value Labels dialog is closed using 
+/* Callback for when the Value Labels dialog is closed using
    the OK button.*/
 static gint
 val_labs_ok(GtkWidget *w, gpointer data)
 {
   struct val_labs_dialog *dialog = data;
 
-  psppire_variable_set_value_labels(dialog->pv, dialog->labs);
+  var_set_value_labels (dialog->pv, dialog->labs);
 
   val_labs_destroy (dialog->labs);
+
   dialog->labs = 0;
 
   return FALSE;
 }
 
-/* Callback for when the Value Labels dialog is closed using 
+/* Callback for when the Value Labels dialog is closed using
    the Cancel button.*/
 static gint
 val_labs_cancel(GtkWidget *w, gpointer data)
@@ -159,7 +164,7 @@ val_labs_cancel(GtkWidget *w, gpointer data)
 
   val_labs_destroy (dialog->labs);
   dialog->labs = 0;
-  
+
   return FALSE;
 }
 
@@ -170,9 +175,9 @@ get_selected_tuple(struct val_labs_dialog *dialog)
 {
   GtkTreeView *treeview = GTK_TREE_VIEW(dialog->treeview);
   static struct val_lab vl;
-  
+
   GtkTreeIter iter ;
-  GValue the_value = {0}; 
+  GValue the_value = {0};
 
   GtkTreeSelection* sel =  gtk_tree_view_get_selection(treeview);
 
@@ -186,7 +191,7 @@ get_selected_tuple(struct val_labs_dialog *dialog)
   g_value_unset(&the_value);
 
   vl.label = val_labs_find (dialog->labs, vl.value);
-  
+
   return &vl;
 }
 
@@ -198,18 +203,18 @@ static gint
 on_change(GtkWidget *w, gpointer data)
 {
   struct val_labs_dialog *dialog = data;
-  
+
   const gchar *val_text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
-  
+
   union value v;
-  
-  text_to_value(val_text, &v, 
-               *psppire_variable_get_write_spec(dialog->pv));
+
+  text_to_value(val_text, &v,
+               *var_get_write_format (dialog->pv));
 
   val_labs_replace (dialog->labs, v,
-                   gtk_entry_get_text(GTK_ENTRY(dialog->label_entry)));
+                   gtk_entry_get_text (GTK_ENTRY(dialog->label_entry)));
 
-  gtk_widget_set_sensitive(dialog->change_button, FALSE);
+  gtk_widget_set_sensitive (dialog->change_button, FALSE);
 
   repopulate_dialog(dialog);
 
@@ -226,15 +231,15 @@ on_add(GtkWidget *w, gpointer data)
 
   const gchar *text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
 
-  text_to_value(text, &v, 
-               *psppire_variable_get_write_spec(dialog->pv));
+  text_to_value(text, &v,
+               *var_get_write_format (dialog->pv));
 
 
   if ( ! val_labs_add (dialog->labs, v,
-                      gtk_entry_get_text(GTK_ENTRY(dialog->label_entry)) ) )
+                      gtk_entry_get_text
+                      ( GTK_ENTRY (dialog->label_entry)) ) )
     return FALSE;
 
-
   gtk_widget_set_sensitive(dialog->add_button, FALSE);
 
   repopulate_dialog(dialog);
@@ -251,7 +256,7 @@ on_remove(GtkWidget *w, gpointer data)
   struct val_lab *vl = get_selected_tuple(dialog);
 
   val_labs_remove (dialog->labs, vl->value);
-  
+
   repopulate_dialog(dialog);
 
   gtk_widget_set_sensitive(dialog->remove_button, FALSE);
@@ -261,35 +266,38 @@ on_remove(GtkWidget *w, gpointer data)
 
 
 
-/* Callback which occurs when a line item is selected in the list of 
+/* Callback which occurs when a line item is selected in the list of
    value--label pairs.*/
-static void        
+static void
 on_select_row                  (GtkTreeView *treeview,
                                gpointer data)
 {
+  gchar *labeltext;
   struct val_labs_dialog *dialog = data;
 
   struct val_lab * vl  = get_selected_tuple(dialog);
 
-  gchar *const text = value_to_text(vl->value, 
-                                   *psppire_variable_get_write_spec(dialog->pv));
+  gchar *const text = value_to_text(vl->value,
+                                   *var_get_write_format (dialog->pv));
 
-  g_signal_handler_block(GTK_ENTRY(dialog->value_entry), 
+  g_signal_handler_block(GTK_ENTRY(dialog->value_entry),
                         dialog->value_handler_id);
 
   gtk_entry_set_text(GTK_ENTRY(dialog->value_entry), text);
 
-  g_signal_handler_unblock(GTK_ENTRY(dialog->value_entry), 
+  g_signal_handler_unblock(GTK_ENTRY(dialog->value_entry),
                         dialog->value_handler_id);
   g_free(text);
 
-  g_signal_handler_block(GTK_ENTRY(dialog->label_entry), 
+  g_signal_handler_block(GTK_ENTRY(dialog->label_entry),
                         dialog->change_handler_id);
 
+  labeltext = pspp_locale_to_utf8(vl->label, -1, 0);
   gtk_entry_set_text(GTK_ENTRY(dialog->label_entry),
-                    vl->label);
+                    labeltext);
+  g_free(labeltext);
 
-  g_signal_handler_unblock(GTK_ENTRY(dialog->label_entry), 
+  g_signal_handler_unblock(GTK_ENTRY(dialog->label_entry),
                         dialog->change_handler_id);
 
   gtk_widget_set_sensitive(dialog->remove_button, TRUE);
@@ -297,11 +305,15 @@ on_select_row                  (GtkTreeView *treeview,
 }
 
 
-/* Create a new dialog box 
+/* Create a new dialog box
    (there should  normally be only one)*/
 struct val_labs_dialog *
 val_labs_dialog_create(GladeXML *xml)
 {
+  GtkTreeViewColumn *column;
+
+  GtkCellRenderer *renderer ;
+
   struct val_labs_dialog *dialog = g_malloc(sizeof(*dialog));
 
   dialog->window = get_widget_assert(xml,"val_labs_dialog");
@@ -309,7 +321,7 @@ val_labs_dialog_create(GladeXML *xml)
   dialog->label_entry = get_widget_assert(xml,"label_entry");
 
   gtk_window_set_transient_for
-    (GTK_WINDOW(dialog->window), 
+    (GTK_WINDOW(dialog->window),
      GTK_WINDOW(get_widget_assert(xml, "data_editor")));
 
   dialog->ok = get_widget_assert(xml, "val_labs_ok");
@@ -321,10 +333,8 @@ val_labs_dialog_create(GladeXML *xml)
 
   gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(dialog->treeview), FALSE);
 
-  GtkTreeViewColumn *column;
+  renderer = gtk_cell_renderer_text_new();
 
-  GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
-  
   column = gtk_tree_view_column_new_with_attributes ("Title",
                                                     renderer,
                                                     "text",
@@ -334,26 +344,26 @@ val_labs_dialog_create(GladeXML *xml)
   gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->treeview), column);
 
   g_signal_connect(GTK_OBJECT(get_widget_assert(xml, "val_labs_cancel")),
-                  "clicked", 
+                  "clicked",
                   GTK_SIGNAL_FUNC(val_labs_cancel), dialog);
 
-  dialog->change_handler_id = 
-    g_signal_connect(GTK_OBJECT(dialog->label_entry), 
+  dialog->change_handler_id =
+    g_signal_connect(GTK_OBJECT(dialog->label_entry),
                     "changed",
                     GTK_SIGNAL_FUNC(on_label_entry_change), dialog);
 
-  dialog->value_handler_id  = 
-    g_signal_connect(GTK_OBJECT(dialog->value_entry), 
+  dialog->value_handler_id  =
+    g_signal_connect(GTK_OBJECT(dialog->value_entry),
                     "changed",
                     GTK_SIGNAL_FUNC(on_value_entry_change), dialog);
 
-  g_signal_connect(GTK_OBJECT(dialog->change_button), 
+  g_signal_connect(GTK_OBJECT(dialog->change_button),
                   "clicked",
                   GTK_SIGNAL_FUNC(on_change), dialog);
 
 
   g_signal_connect(GTK_OBJECT(get_widget_assert(xml, "val_labs_ok")),
-                  "clicked", 
+                  "clicked",
                   GTK_SIGNAL_FUNC(val_labs_ok), dialog);
 
 
@@ -376,29 +386,29 @@ val_labs_dialog_create(GladeXML *xml)
 
 /* Populate the components of the dialog box, from the 'labs' member
    variable */
-static void 
+static void
 repopulate_dialog(struct val_labs_dialog *dialog)
 {
   struct val_labs_iterator *vli = 0;
-  struct val_lab *vl; 
+  struct val_lab *vl;
 
   GtkTreeIter iter;
 
-  GtkListStore *list_store = gtk_list_store_new (2, 
-                                                G_TYPE_STRING, 
+  GtkListStore *list_store = gtk_list_store_new (2,
+                                                G_TYPE_STRING,
                                                 G_TYPE_DOUBLE);
 
-  g_signal_handler_block(GTK_ENTRY(dialog->label_entry), 
+  g_signal_handler_block(GTK_ENTRY(dialog->label_entry),
                         dialog->change_handler_id);
-  g_signal_handler_block(GTK_ENTRY(dialog->value_entry), 
+  g_signal_handler_block(GTK_ENTRY(dialog->value_entry),
                         dialog->value_handler_id);
 
   gtk_entry_set_text(GTK_ENTRY(dialog->value_entry), "");
   gtk_entry_set_text(GTK_ENTRY(dialog->label_entry), "");
 
-  g_signal_handler_unblock(GTK_ENTRY(dialog->value_entry), 
+  g_signal_handler_unblock(GTK_ENTRY(dialog->value_entry),
                         dialog->value_handler_id);
-  g_signal_handler_unblock(GTK_ENTRY(dialog->label_entry), 
+  g_signal_handler_unblock(GTK_ENTRY(dialog->label_entry),
                           dialog->change_handler_id);
 
 
@@ -406,26 +416,30 @@ repopulate_dialog(struct val_labs_dialog *dialog)
       vl;
       vl = val_labs_next(dialog->labs, &vli))
     {
-      gchar *const vstr  = 
-       value_to_text(vl->value, 
-                     *psppire_variable_get_write_spec(dialog->pv));
 
-                                          
-      
+      gchar *const vstr  =
+       value_to_text(vl->value,
+                     *var_get_write_format (dialog->pv));
+
+      gchar *labeltext =
+       pspp_locale_to_utf8(vl->label, -1, 0);
+
       gchar *const text = g_strdup_printf("%s = \"%s\"",
-                                         vstr, vl->label);
+                                         vstr, labeltext);
+
+
       gtk_list_store_append (list_store, &iter);
       gtk_list_store_set (list_store, &iter,
-                          0, text, 
+                          0, text,
                          1, vl->value.f,
                          -1);
 
-      g_free(text); 
+      g_free(labeltext);
+      g_free(text);
       g_free(vstr);
     }
 
-  gtk_tree_view_set_model(GTK_TREE_VIEW(dialog->treeview), 
+  gtk_tree_view_set_model(GTK_TREE_VIEW(dialog->treeview),
                          GTK_TREE_MODEL(list_store));
 
   g_object_unref(list_store);
@@ -433,15 +447,20 @@ repopulate_dialog(struct val_labs_dialog *dialog)
 }
 
 /* Initialise and display the dialog box */
-void 
+void
 val_labs_dialog_show(struct val_labs_dialog *dialog)
 {
+  const struct val_labs *value_labels;
+
   g_assert(!dialog->labs);
-  dialog->labs = val_labs_copy(
-                              psppire_variable_get_value_labels(dialog->pv)
-                              );
 
+  value_labels = var_get_value_labels (dialog->pv);
 
+  if (value_labels)
+    dialog->labs = val_labs_copy ( value_labels );
+  else
+    dialog->labs = val_labs_create ( var_get_width (dialog->pv));
+  
   gtk_widget_set_sensitive(dialog->remove_button, FALSE);
   gtk_widget_set_sensitive(dialog->change_button, FALSE);
   gtk_widget_set_sensitive(dialog->add_button, FALSE);