From 43a6e90b100a8ac6b319af9198754157e4643220 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Fri, 7 Mar 2008 06:20:00 +0000 Subject: [PATCH] Add "may-create-vars" property to var sheet that controls whether the user can create new variables in the dictionary. Needed by upcoming patch #6358. Reviewed by John Darrington. --- src/ui/gui/ChangeLog | 7 ++++ src/ui/gui/psppire-var-sheet.c | 65 ++++++++++++++++++++++++++++++++-- src/ui/gui/psppire-var-sheet.h | 1 + 3 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/ui/gui/ChangeLog b/src/ui/gui/ChangeLog index 6e16fdae..eb8edfb9 100644 --- a/src/ui/gui/ChangeLog +++ b/src/ui/gui/ChangeLog @@ -1,3 +1,10 @@ +2008-03-06 Ben Pfaff + + * psppire-var-sheet.c psppire-var-sheet.h: Add "may-create-vars" + property to var sheet that controls whether the user can create + new variables in the dictionary. Needed by upcoming patch #6358. + Reviewed by John Darrington. + 2008-03-04 Ben Pfaff Patch #6427. Reviewed by John Darrington. diff --git a/src/ui/gui/psppire-var-sheet.c b/src/ui/gui/psppire-var-sheet.c index a4260405..79446fb3 100644 --- a/src/ui/gui/psppire-var-sheet.c +++ b/src/ui/gui/psppire-var-sheet.c @@ -33,6 +33,10 @@ 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 + }; GType psppire_var_sheet_get_type (void) @@ -148,18 +152,69 @@ create_label_list (const gchar *const *labels) } +static void +psppire_var_sheet_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + PsppireVarSheet *self = (PsppireVarSheet *) object; + + switch (property_id) + { + case PSPPIRE_VAR_SHEET_MAY_CREATE_VARS: + self->may_create_vars = g_value_get_boolean (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + break; + } +} + +static void +psppire_var_sheet_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + PsppireVarSheet *self = (PsppireVarSheet *) object; + + switch (property_id) + { + case PSPPIRE_VAR_SHEET_MAY_CREATE_VARS: + g_value_set_boolean (value, self->may_create_vars); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + break; + } +} + static void psppire_var_sheet_class_init (PsppireVarSheetClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + GParamSpec *pspec; parent_class = g_type_class_peek_parent (klass); object_class->dispose = psppire_var_sheet_dispose; object_class->finalize = psppire_var_sheet_finalize; - + object_class->set_property = psppire_var_sheet_set_property; + object_class->get_property = psppire_var_sheet_get_property; + + pspec = g_param_spec_boolean ("may-create-vars", + "May create variables", + "Whether the user may create more variables", + TRUE, + G_PARAM_READWRITE); + g_object_class_install_property (object_class, + PSPPIRE_VAR_SHEET_MAY_CREATE_VARS, + pspec); klass->measure_list = create_label_list (measures); klass->alignment_list = create_label_list (alignments); @@ -203,10 +258,14 @@ traverse_cell_callback (GtkSheet *sheet, gint *new_row, gint *new_column ) { + PsppireVarSheet *var_sheet = PSPPIRE_VAR_SHEET (sheet); PsppireVarStore *var_store = PSPPIRE_VAR_STORE (gtk_sheet_get_model (sheet)); gint n_vars = psppire_var_store_get_var_cnt (var_store); + if (*new_row >= n_vars && !var_sheet->may_create_vars) + return FALSE; + if ( row == n_vars && *new_row >= n_vars) { GtkEntry *entry = GTK_ENTRY (gtk_sheet_get_entry (sheet)); @@ -224,8 +283,8 @@ traverse_cell_callback (GtkSheet *sheet, /* If the destination cell is outside the current variables, then automatically create variables for the new rows. */ - if ( (*new_row > n_vars) || - (*new_row == n_vars && *new_column != PSPPIRE_VAR_STORE_COL_NAME) ) + if ( ((*new_row > n_vars) || + (*new_row == n_vars && *new_column != PSPPIRE_VAR_STORE_COL_NAME)) ) { gint i; for ( i = n_vars ; i <= *new_row; ++i ) diff --git a/src/ui/gui/psppire-var-sheet.h b/src/ui/gui/psppire-var-sheet.h index 3e94f89e..e705ef01 100644 --- a/src/ui/gui/psppire-var-sheet.h +++ b/src/ui/gui/psppire-var-sheet.h @@ -43,6 +43,7 @@ struct _PsppireVarSheet GtkSheet parent; gboolean dispose_has_run; + gboolean may_create_vars; struct val_labs_dialog *val_labs_dialog ; struct missing_val_dialog *missing_val_dialog ; -- 2.30.2