X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-var-sheet.c;h=b02a0a03ec613b4b272b9d323bfb170be440f192;hb=6e29a48cd6e626fb2542d5babcbdcc7f67c071d3;hp=d914866658b67ca6982505d4aa72f888e5899482;hpb=a1efcf97ca2f75f4be6a0389ff2372c03ed2d4e1;p=pspp diff --git a/src/ui/gui/psppire-var-sheet.c b/src/ui/gui/psppire-var-sheet.c index d914866658..b02a0a03ec 100644 --- a/src/ui/gui/psppire-var-sheet.c +++ b/src/ui/gui/psppire-var-sheet.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008, 2009, 2011, 2012 Free Software Foundation, Inc. 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 @@ -16,14 +16,17 @@ #include #include "psppire-var-sheet.h" -#include +#include -#include +#include "builder-wrapper.h" #include "helper.h" #include "customentry.h" #include +#include "data/value-labels.h" #include "psppire-var-store.h" +#include "ui/gui/val-labs-dialog.h" +#include "ui/gui/var-type-dialog.h" #include #define _(msgid) gettext (msgid) @@ -33,6 +36,7 @@ static void psppire_var_sheet_class_init (PsppireVarSheetClass *klass); static void psppire_var_sheet_init (PsppireVarSheet *vs); + enum { PSPPIRE_VAR_SHEET_MAY_CREATE_VARS = 1 @@ -122,9 +126,7 @@ create_label_list (const gchar *const *labels) gint i = 0; GtkTreeIter iter; - GtkListStore *list_store; - list_store = gtk_list_store_new (1, G_TYPE_STRING); - + GtkListStore *list_store = gtk_list_store_new (1, G_TYPE_STRING); while ( (s = labels[i++])) { @@ -179,7 +181,6 @@ psppire_var_sheet_get_property (GObject *object, } - static void psppire_var_sheet_class_init (PsppireVarSheetClass *klass) { @@ -249,6 +250,9 @@ traverse_cell_callback (PsppireSheet *sheet, gint n_vars = psppire_var_store_get_var_cnt (var_store); + if (new_cell->col >= PSPPIRE_VAR_STORE_n_COLS) + return TRUE; + if (new_cell->row >= n_vars && !var_sheet->may_create_vars) return TRUE; @@ -258,10 +262,10 @@ traverse_cell_callback (PsppireSheet *sheet, const gchar *name = gtk_entry_get_text (entry); - if (! psppire_dict_check_name (var_store->dict, name, TRUE)) + if (! psppire_dict_check_name (var_store->dictionary, name, TRUE)) return TRUE; - psppire_dict_insert_variable (var_store->dict, existing_cell->row, name); + psppire_dict_insert_variable (var_store->dictionary, existing_cell->row, name); return FALSE; } @@ -276,14 +280,75 @@ traverse_cell_callback (PsppireSheet *sheet, { gint i; for ( i = n_vars ; i <= new_cell->row; ++i ) - psppire_dict_insert_variable (var_store->dict, i, NULL); + psppire_dict_insert_variable (var_store->dictionary, i, NULL); } return FALSE; } +static void +var_sheet_show_var_type_dialog (PsppireVarSheet *vs) +{ + PsppireVarStore *var_store; + struct fmt_spec format; + struct variable *var; + gint row; + + var_store = PSPPIRE_VAR_STORE (psppire_sheet_get_model (PSPPIRE_SHEET (vs))); + + psppire_sheet_get_active_cell (PSPPIRE_SHEET (vs), &row, NULL); + var = psppire_var_store_get_var (var_store, row); + g_return_if_fail (var != NULL); + + format = *var_get_print_format (var); + psppire_var_type_dialog_run (GTK_WINDOW (gtk_widget_get_toplevel ( + GTK_WIDGET (vs))), &format); + var_set_width (var, fmt_var_width (&format)); + var_set_both_formats (var, &format); +} + +static void +var_sheet_show_val_labs_dialog (PsppireVarSheet *vs) +{ + PsppireVarStore *var_store; + struct val_labs *labels; + struct variable *var; + gint row; + var_store = PSPPIRE_VAR_STORE (psppire_sheet_get_model (PSPPIRE_SHEET (vs))); + psppire_sheet_get_active_cell (PSPPIRE_SHEET (vs), &row, NULL); + var = psppire_var_store_get_var (var_store, row); + g_return_if_fail (var != NULL); + + labels = psppire_val_labs_dialog_run (GTK_WINDOW (gtk_widget_get_toplevel ( + GTK_WIDGET (vs))), var); + if (labels) + { + var_set_value_labels (var, labels); + val_labs_destroy (labels); + } +} + +static void +var_sheet_show_miss_vals_dialog (PsppireVarSheet *vs) +{ + PsppireVarStore *var_store; + struct missing_values mv; + struct variable *var; + gint row; + + var_store = PSPPIRE_VAR_STORE (psppire_sheet_get_model (PSPPIRE_SHEET (vs))); + + psppire_sheet_get_active_cell (PSPPIRE_SHEET (vs), &row, NULL); + var = psppire_var_store_get_var (var_store, row); + g_return_if_fail (var != NULL); + + psppire_missing_val_dialog_run (GTK_WINDOW (gtk_widget_get_toplevel ( + GTK_WIDGET (vs))), var, &mv); + var_set_missing_values (var, &mv); + mv_destroy (&mv); +} /* Callback whenever the active cell changes on the var sheet. @@ -294,7 +359,6 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, gint oldrow, gint oldcolumn, gpointer data) { - PsppireSheetCellAttr attributes; PsppireVarStore *var_store; PsppireVarSheetClass *vs_class = PSPPIRE_VAR_SHEET_CLASS(G_OBJECT_GET_CLASS (vs)); @@ -311,8 +375,6 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, g_return_if_fail (oldcolumn == PSPPIRE_VAR_STORE_COL_NAME || row < psppire_var_store_get_var_cnt (var_store)); - psppire_sheet_get_attributes (sheet, row, column, &attributes); - var = psppire_var_store_get_var (var_store, row); switch (column) @@ -333,7 +395,7 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, gtk_combo_box_entry_set_text_column (cbe, 0); - g_signal_connect (G_OBJECT (cbe),"changed", + g_signal_connect (cbe, "changed", G_CALLBACK (change_alignment), var); } break; @@ -351,7 +413,7 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, gtk_combo_box_entry_set_text_column (cbe, 0); - g_signal_connect (G_OBJECT (cbe),"changed", + g_signal_connect (cbe, "changed", G_CALLBACK (change_measure), var); } break; @@ -365,17 +427,10 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, customEntry = PSPPIRE_CUSTOM_ENTRY (psppire_sheet_get_entry (sheet)); - if ( var_is_long_string (var)) - g_object_set (customEntry, - "editable", FALSE, - NULL); - - val_labs_dialog_set_target_variable (vs->val_labs_dialog, var); - g_signal_connect_swapped (customEntry, "clicked", - G_CALLBACK (val_labs_dialog_show), - vs->val_labs_dialog); + G_CALLBACK (var_sheet_show_val_labs_dialog), + vs); } break; @@ -388,19 +443,10 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, customEntry = PSPPIRE_CUSTOM_ENTRY (psppire_sheet_get_entry (sheet)); - if ( var_is_long_string (var)) - g_object_set (customEntry, - "editable", FALSE, - NULL); - - - vs->missing_val_dialog->pv = - psppire_var_store_get_var (var_store, row); - g_signal_connect_swapped (customEntry, "clicked", - G_CALLBACK (missing_val_dialog_show), - vs->missing_val_dialog); + G_CALLBACK (var_sheet_show_miss_vals_dialog), + vs); } break; @@ -413,14 +459,10 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, customEntry = PSPPIRE_CUSTOM_ENTRY (psppire_sheet_get_entry (sheet)); - - /* Popup the Variable Type dialog box */ - vs->var_type_dialog->pv = var; - g_signal_connect_swapped (customEntry, "clicked", - G_CALLBACK (var_type_dialog_show), - vs->var_type_dialog); + G_CALLBACK (var_sheet_show_var_type_dialog), + vs); } break; @@ -428,7 +470,8 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, case PSPPIRE_VAR_STORE_COL_DECIMALS: case PSPPIRE_VAR_STORE_COL_COLUMNS: { - if ( attributes.is_editable) + if ( psppire_sheet_model_is_editable (PSPPIRE_SHEET_MODEL(var_store), + row, column)) { gint r_min, r_max; @@ -440,7 +483,7 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, const gint current_value = g_strtod (s, NULL); GtkObject *adj ; - const struct fmt_spec *fmt = var_get_write_format (var); + const struct fmt_spec *fmt = var_get_print_format (var); switch (column) { case PSPPIRE_VAR_STORE_COL_WIDTH: @@ -460,9 +503,9 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, } adj = gtk_adjustment_new (current_value, - r_min, r_max, - 1.0, 1.0, 1.0 /* steps */ - ); + r_min, r_max, + 1.0, 1.0, /* steps */ + 0); psppire_sheet_change_entry (sheet, GTK_TYPE_SPIN_BUTTON); @@ -486,13 +529,11 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, static void psppire_var_sheet_init (PsppireVarSheet *vs) { - GladeXML *xml = XML_NEW ("data-editor.glade"); + GtkBuilder *builder = builder_new ("data-editor.ui"); - vs->val_labs_dialog = val_labs_dialog_create (xml); - vs->missing_val_dialog = missing_val_dialog_create (xml); - vs->var_type_dialog = var_type_dialog_create (xml); + connect_help (builder); - g_object_unref (xml); + g_object_unref (builder); vs->dispose_has_run = FALSE; vs->may_create_vars = TRUE; @@ -523,13 +564,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,