include format.h only where necessary.
[pspp-builds.git] / src / ui / gui / helper.c
index c322321db60cb84621d3b44c6150a354c2b29e93..1007ff967fb50653f21f09782d426f03ee01f62c 100644 (file)
@@ -25,6 +25,7 @@
 #include <glib.h>
 #include "helper.h"
 #include "message-dialog.h"
+#include <data/format.h>
 #include <data/data-in.h>
 #include <data/data-out.h>
 #include <data/dictionary.h>
@@ -91,7 +92,7 @@ text_to_value (const gchar *text, union value *v,
     }
 
   msg_disable ();
-  ok = data_in (ss_cstr (text), format.type, 0, 0,
+  ok = data_in (ss_cstr (text), LEGACY_NATIVE, format.type, 0, 0, 0,
                 v, fmt_var_width (&format));
   msg_enable ();
 
@@ -129,17 +130,16 @@ pspp_locale_to_utf8 (const gchar *text, gssize len, GError **err)
 static void
 give_help (void)
 {
-  static struct msg m = {
-    MSG_GENERAL,
-    MSG_NOTE,
-    {0, -1},
-    0,
-  };
-
-  if (! m.text)
-    m.text=g_strdup (_("Sorry. The help system hasn't yet been implemented."));
-
-  popup_message (&m);
+  GtkWidget *dialog;
+
+  dialog = gtk_message_dialog_new (NULL,
+                                   GTK_DIALOG_MODAL,
+                                   GTK_MESSAGE_INFO,
+                                   GTK_BUTTONS_CLOSE,
+                                   _("Sorry. The help system hasn't yet "
+                                     "been implemented."));
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
 }
 
 void
@@ -150,6 +150,8 @@ connect_help (GladeXML *xml)
   GList *i;
   for ( i = g_list_first (helps); i ; i = g_list_next (i))
     g_signal_connect (GTK_WIDGET (i->data), "clicked", give_help, 0);
+
+  g_list_free (helps);
 }
 
 
@@ -297,3 +299,48 @@ marshaller_VOID__INT_INT_INT (GClosure     *closure,
             g_marshal_value_peek_int (param_values + 3),
             data2);
 }
+
+/* Create a deep copy of SRC */
+GtkListStore *
+clone_list_store (const GtkListStore *src)
+{
+  GtkTreeIter src_iter;
+  gboolean ok;
+  gint i;
+  const gint n_cols =  gtk_tree_model_get_n_columns (GTK_TREE_MODEL (src));
+  GType *types = g_malloc (sizeof (*types) *  n_cols);
+
+  int row = 0;
+  GtkListStore *dest;
+
+  for (i = 0 ; i < n_cols; ++i )
+    types[i] = gtk_tree_model_get_column_type (GTK_TREE_MODEL (src), i);
+
+  dest = gtk_list_store_newv (n_cols, types);
+
+  for (ok = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (src),
+                                          &src_iter);
+       ok;
+       ok = gtk_tree_model_iter_next (GTK_TREE_MODEL (src), &src_iter))
+    {
+      GtkTreeIter dest_iter;
+      gtk_list_store_append  (dest, &dest_iter);
+
+      for (i = 0 ; i < n_cols; ++i )
+       {
+         GValue val = {0};
+
+         gtk_tree_model_get_value (GTK_TREE_MODEL (src), &src_iter, i, &val);
+         gtk_list_store_set_value (dest, &dest_iter, i, &val);
+
+         g_value_unset (&val);
+       }
+      row++;
+    }
+
+  g_free (types);
+
+  return dest;
+}
+
+