output view: make items selectable and use system colours
[pspp] / src / ui / gui / psppire-import-assistant.c
index 635941c2d25d55e72be412e4d9c0fad835fe5e6f..a968431d865bf043759adbdafc8368c5c504cfa4 100644 (file)
@@ -285,24 +285,30 @@ choose_likely_separators (PsppireImportAssistant *ia)
     }
   gtk_tree_path_free (p);
 
-  int most_frequent = -1;
-  int largest = 0;
-  for (j = 0; j < SEPARATOR_CNT; ++j)
+  if (hmap_count (count_map) > 0)
     {
-      struct separator_count_node *cn;
-      HMAP_FOR_EACH (cn, struct separator_count_node, node, &count_map[j])
-       {
-         if (largest < cn->quantity)
-           {
-             largest = cn->quantity;
-             most_frequent = j;
-           }
-       }
-      hmap_destroy (&count_map[j]);
-    }
+      int most_frequent = -1;
+      int largest = 0;
+      for (j = 0; j < SEPARATOR_CNT; ++j)
+        {
+          struct separator_count_node *cn;
+          HMAP_FOR_EACH (cn, struct separator_count_node, node, &count_map[j])
+            {
+              if (largest < cn->quantity)
+                {
+                  largest = cn->quantity;
+                  most_frequent = j;
+                }
+            }
+          hmap_destroy (&count_map[j]);
+        }
+
+      g_return_if_fail (most_frequent >= 0);
 
-  const char* sepname = separators[MAX (0,most_frequent)].name;
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (get_widget_assert (ia->builder, sepname)), TRUE);
+      GtkWidget *toggle =
+        get_widget_assert (ia->builder, separators[most_frequent].name);
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), TRUE);
+    }
 }
 
 static void
@@ -521,8 +527,11 @@ prepare_sheet_spec_page (PsppireImportAssistant *ia)
   GtkWidget *sheet_entry = get_widget_assert (builder, "sheet-entry");
   GtkWidget *readnames_checkbox = get_widget_assert (builder, "readnames-checkbox");
 
-  gtk_combo_box_set_model (GTK_COMBO_BOX (sheet_entry),
-                          psppire_spreadsheet_model_new (ia->spreadsheet));
+  GtkTreeModel *model = psppire_spreadsheet_model_new (ia->spreadsheet);
+  gtk_combo_box_set_model (GTK_COMBO_BOX (sheet_entry), model);
+
+  gint items = gtk_tree_model_iter_n_children (model, NULL);
+  gtk_widget_set_sensitive (sheet_entry, items > 1);
 
   gtk_combo_box_set_active (GTK_COMBO_BOX (sheet_entry), 0);
 
@@ -646,6 +655,11 @@ chooser_page_reset (PsppireImportAssistant *ia, GtkWidget *page)
 }
 
 
+static void
+on_file_activated (GtkFileChooser *chooser, PsppireImportAssistant *ia)
+{
+  gtk_assistant_next_page (GTK_ASSISTANT (ia));
+}
 
 static void
 chooser_page_create (PsppireImportAssistant *ia)
@@ -654,6 +668,8 @@ chooser_page_create (PsppireImportAssistant *ia)
 
   GtkWidget *chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN);
 
+  g_signal_connect (chooser, "file-activated", G_CALLBACK (on_file_activated), ia);
+
   g_object_set_data (G_OBJECT (chooser), "on-forward", chooser_page_leave);
   g_object_set_data (G_OBJECT (chooser), "on-reset",   chooser_page_reset);
   g_object_set_data (G_OBJECT (chooser), "on-entering",chooser_page_enter);
@@ -1242,7 +1258,7 @@ textfile_create_reader (PsppireImportAssistant *ia)
 
   int i;
 
-  struct fmt_guesser **fg = xcalloc (n_vars, sizeof *fg);
+  struct fmt_guesser **fg = XCALLOC (n_vars,  struct fmt_guesser *);
   for (i = 0 ; i < n_vars; ++i)
     {
       fg[i] = fmt_guesser_create ();