- PsppireDataSheet *data_sheet = psppire_data_editor_get_active_data_sheet (de);
- PsppSheetView *sheet_view = PSPP_SHEET_VIEW (data_sheet);
- PsppSheetSelection *selection = pspp_sheet_view_get_selection (sheet_view);
-
- gchar *ref_cell_text;
- GList *selected_columns, *iter;
- struct variable *var;
- gint n_cases;
- gint n_vars;
-
- selected_columns = pspp_sheet_selection_get_selected_columns (selection);
- n_vars = 0;
- var = NULL;
- for (iter = selected_columns; iter != NULL; iter = iter->next)
- {
- PsppSheetViewColumn *column = iter->data;
- struct variable *v = g_object_get_data (G_OBJECT (column), "variable");
- if (v != NULL)
- {
- var = v;
- n_vars++;
- }
- }
- g_list_free (selected_columns);
-
- n_cases = pspp_sheet_selection_count_selected_rows (selection);
- if (n_cases > 0)
- {
- /* The final row is selectable but it isn't a case (it's just used to add
- more cases), so don't count it. */
- GtkTreePath *path;
- gint case_count;
-
- case_count = psppire_data_store_get_case_count (de->data_store);
- path = gtk_tree_path_new_from_indices (case_count, -1);
- if (pspp_sheet_selection_path_is_selected (selection, path))
- n_cases--;
- gtk_tree_path_free (path);
- }
-
- ref_cell_text = NULL;
- if (n_cases == 1 && n_vars == 1)
- {
- PsppireValueEntry *value_entry = PSPPIRE_VALUE_ENTRY (de->datum_entry);
- struct range_set *selected_rows;
- gboolean show_value_labels;
- union value value;
- int width;
- gint row;
-
- selected_rows = pspp_sheet_selection_get_range_set (selection);
- row = range_set_scan (selected_rows, 0);
- range_set_destroy (selected_rows);
-
- ref_cell_text = g_strdup_printf ("%d : %s", row + 1, var_get_name (var));
-
- show_value_labels = psppire_data_sheet_get_value_labels (data_sheet);
-
- psppire_value_entry_set_variable (value_entry, var);
- psppire_value_entry_set_show_value_label (value_entry,
- show_value_labels);
-
- width = var_get_width (var);
- value_init (&value, width);
- datasheet_get_value (de->data_store->datasheet,
- row, var_get_case_index (var), &value);
- psppire_value_entry_set_value (value_entry, &value, width);
- value_destroy (&value, width);
-
- gtk_widget_set_sensitive (de->datum_entry, TRUE);
- }
- else
- {
- if (n_cases == 0 || n_vars == 0)
- {
- ref_cell_text = NULL;
- }
- else
- {
- struct string s;
-
- /* The glib string library does not understand the ' printf modifier
- on all platforms, but the "struct string" library does (because
- Gnulib fixes that problem), so use the latter. */
- ds_init_empty (&s);
- ds_put_format (&s, ngettext ("%'d case", "%'d cases", n_cases),
- n_cases);
- ds_put_byte (&s, ' ');
- ds_put_unichar (&s, 0xd7); /* U+00D7 MULTIPLICATION SIGN */
- ds_put_byte (&s, ' ');
- ds_put_format (&s, ngettext ("%'d variable", "%'d variables",
- n_vars),
- n_vars);
- ref_cell_text = ds_steal_cstr (&s);
- }
-
- psppire_value_entry_set_variable (PSPPIRE_VALUE_ENTRY (de->datum_entry),
- NULL);
- gtk_entry_set_text (
- GTK_ENTRY (gtk_bin_get_child (GTK_BIN (de->datum_entry))), "");
- gtk_widget_set_sensitive (de->datum_entry, FALSE);
- }
-
- gtk_label_set_label (GTK_LABEL (de->cell_ref_label),
- ref_cell_text ? ref_cell_text : "");
- g_free (ref_cell_text);