X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dialog-action-indep-samps.c;h=faea2b41414975e1bf0519c4614e3de0bdb7fcd9;hb=5f1ab307d380c4d60410b911a272b6870b65c2d8;hp=72e57731b93703ca90108566539e1bdbcb1e4e0d;hpb=9627c0fe7c728272ad746f790afa8235261df1ed;p=pspp diff --git a/src/ui/gui/psppire-dialog-action-indep-samps.c b/src/ui/gui/psppire-dialog-action-indep-samps.c index 72e57731b9..faea2b4141 100644 --- a/src/ui/gui/psppire-dialog-action-indep-samps.c +++ b/src/ui/gui/psppire-dialog-action-indep-samps.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2007, 2009, 2010, 2011, 2012 Free Software Foundation + Copyright (C) 2007, 2009, 2010, 2011, 2012, 2016 Free Software Foundation 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 @@ -49,10 +49,10 @@ dialog_state_valid (gpointer data) if (NULL == act->grp_var) return FALSE; - if ( 0 == gtk_tree_model_get_iter_first (vars, ¬used)) + if (0 == gtk_tree_model_get_iter_first (vars, ¬used)) return FALSE; - if ( act->group_defn == GROUPS_UNDEF) + if (act->group_defn == GROUPS_UNDEF) return FALSE; return TRUE; @@ -70,11 +70,12 @@ refresh (PsppireDialogAction *da) if (act->grp_var) { - int width = var_get_width (act->grp_var); + const int width = act->grp_var_width; value_destroy (&act->cut_point, width); value_destroy (&act->grp_val[0], width); value_destroy (&act->grp_val[1], width); act->grp_var = NULL; + act->grp_var_width = -1; } psppire_value_entry_set_variable (PSPPIRE_VALUE_ENTRY (act->dg_grp_entry[0]), NULL); @@ -95,13 +96,13 @@ value_entry_contains_invalid (PsppireValueEntry *ve, const struct variable *var) { gboolean result = FALSE; - if (var) + if (var) { union value val; const int width = var_get_width (var); value_init (&val, width); - if ( psppire_value_entry_get_value (ve, &val, width)) + if (psppire_value_entry_get_value (ve, &val, width)) { if (var_is_value_missing (var, &val, MV_SYSTEM)) { @@ -124,6 +125,9 @@ define_groups_state_valid (gpointer data) { PsppireDialogActionIndepSamps *act = data; + if (act->grp_var == NULL) + return FALSE; + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (act->dg_values_toggle_button))) { @@ -151,18 +155,21 @@ run_define_groups (PsppireDialogActionIndepSamps *act) { gint response; PsppireDialogAction *da = PSPPIRE_DIALOG_ACTION (act); + GtkWidget *parent1 = gtk_widget_get_parent (act->dg_table1); + GtkWidget *parent2 = gtk_widget_get_parent (act->dg_table2); - if ( act->dg_table2->parent) - gtk_container_remove (GTK_CONTAINER (act->dg_table2->parent), act->dg_table2); + g_return_if_fail (act->grp_var); - if ( act->dg_table1->parent) - gtk_container_remove (GTK_CONTAINER (act->dg_table1->parent), act->dg_table1); + if (parent1) + gtk_container_remove (GTK_CONTAINER (parent1), act->dg_table1); + if (parent2) + gtk_container_remove (GTK_CONTAINER (parent2), act->dg_table2); - if ( var_is_numeric (act->grp_var)) + if (var_is_numeric (act->grp_var)) { - gtk_table_attach_defaults (GTK_TABLE (act->dg_table1), act->dg_table2, - 1, 2, 1, 2); + gtk_grid_attach (GTK_GRID (act->dg_table1), act->dg_table2, + 1, 1, 1, 1); gtk_container_add (GTK_CONTAINER (act->dg_box), act->dg_table1); } @@ -180,7 +187,7 @@ run_define_groups (PsppireDialogActionIndepSamps *act) psppire_value_entry_set_variable (PSPPIRE_VALUE_ENTRY (act->dg_grp_entry[1]), act->grp_var); psppire_value_entry_set_variable (PSPPIRE_VALUE_ENTRY (act->dg_cut_point_entry), act->grp_var); - if ( act->group_defn != GROUPS_CUT_POINT ) + if (act->group_defn != GROUPS_CUT_POINT) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (act->dg_cut_point_toggle_button), TRUE); @@ -236,13 +243,13 @@ on_grp_var_change (GtkEntry *entry, PsppireDialogActionIndepSamps *act) PsppireDialogAction *da = PSPPIRE_DIALOG_ACTION (act); const gchar *text = gtk_entry_get_text (entry); - const struct variable *v = psppire_dict_lookup_var (da->dict, text); + const struct variable *v = da->dict ? psppire_dict_lookup_var (da->dict, text) : NULL; gtk_widget_set_sensitive (act->define_groups_button, v != NULL); if (act->grp_var) { - int width = var_get_width (act->grp_var); + const int width = act->grp_var_width; value_destroy (&act->cut_point, width); value_destroy (&act->grp_val[0], width); value_destroy (&act->grp_val[1], width); @@ -263,13 +270,14 @@ on_grp_var_change (GtkEntry *entry, PsppireDialogActionIndepSamps *act) } else { - act->cut_point.short_string[0] = '\0'; - act->grp_val[0].short_string[0] = '\0'; - act->grp_val[1].short_string[0] = '\0'; + act->cut_point.s[0] = '\0'; + act->grp_val[0].s[0] = '\0'; + act->grp_val[1].s[0] = '\0'; } } act->grp_var = v; + act->grp_var_width = v ? var_get_width (v) : -1; } static void @@ -285,15 +293,15 @@ set_group_criterion_type (GtkToggleButton *button, } -static void -psppire_dialog_action_indep_samps_activate (GtkAction *a) +static GtkBuilder * +psppire_dialog_action_indep_samps_activate (PsppireDialogAction *a, GVariant *param) { PsppireDialogActionIndepSamps *act = PSPPIRE_DIALOG_ACTION_INDEP_SAMPS (a); PsppireDialogAction *pda = PSPPIRE_DIALOG_ACTION (a); GtkBuilder *xml = builder_new ("indep-samples.ui"); - pda->dialog = get_widget_assert (xml,"independent-samples-dialog"); + pda->dialog = get_widget_assert (xml,"independent-samples-dialog"); pda->source = get_widget_assert (xml, "indep-samples-treeview1"); act->define_groups_button = get_widget_assert (xml, "define-groups-button"); act->options_button = get_widget_assert (xml, "indep-samples-options-button"); @@ -323,9 +331,6 @@ psppire_dialog_action_indep_samps_activate (GtkAction *a) g_signal_connect (act->dg_values_toggle_button, "toggled", G_CALLBACK (set_group_criterion_type), act); - - g_object_unref (xml); - psppire_dialog_action_set_refresh (pda, refresh); psppire_dialog_action_set_valid_predicate (pda, @@ -341,14 +346,15 @@ psppire_dialog_action_indep_samps_activate (GtkAction *a) g_signal_connect (act->group_var_entry, "changed", G_CALLBACK (on_grp_var_change), act); - if (PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_indep_samps_parent_class)->activate) - PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_indep_samps_parent_class)->activate (pda); + on_grp_var_change (GTK_ENTRY (act->group_var_entry), act); + + return xml; } static char * -generate_syntax (PsppireDialogAction *a) +generate_syntax (const PsppireDialogAction *a) { PsppireDialogActionIndepSamps *act = PSPPIRE_DIALOG_ACTION_INDEP_SAMPS (a); gchar *text; @@ -366,16 +372,16 @@ generate_syntax (PsppireDialogAction *a) g_string_append (str, "("); { - const union value *val = + const union value *val = (act->group_defn == GROUPS_VALUES) ? &act->grp_val[0] : &act->cut_point; - struct string strx; + struct string strx; ds_init_empty (&strx); syntax_gen_value (&strx, val, var_get_width (act->grp_var), var_get_print_format (act->grp_var)); - + g_string_append (str, ds_cstr (&strx)); ds_destroy (&strx); } @@ -387,10 +393,10 @@ generate_syntax (PsppireDialogAction *a) { struct string strx; ds_init_empty (&strx); - + syntax_gen_value (&strx, &act->grp_val[1], var_get_width (act->grp_var), var_get_print_format (act->grp_var)); - + g_string_append (str, ds_cstr (&strx)); ds_destroy (&strx); } @@ -413,9 +419,7 @@ generate_syntax (PsppireDialogAction *a) static void psppire_dialog_action_indep_samps_class_init (PsppireDialogActionIndepSampsClass *class) { - GtkActionClass *action_class = GTK_ACTION_CLASS (class); - - action_class->activate = psppire_dialog_action_indep_samps_activate; + PSPPIRE_DIALOG_ACTION_CLASS (class)->initial_activate = psppire_dialog_action_indep_samps_activate; PSPPIRE_DIALOG_ACTION_CLASS (class)->generate_syntax = generate_syntax; } @@ -425,6 +429,7 @@ static void psppire_dialog_action_indep_samps_init (PsppireDialogActionIndepSamps *act) { act->grp_var = NULL; + act->grp_var_width = -1; act->group_defn = GROUPS_UNDEF; }