X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dict.c;h=40ddf501ade9d7ec801574ee074b39610a37058b;hb=992bcbd6001c1b36828de093c3b218f5bfd688b6;hp=15a3deff0c995f730d53290cac2b671287fe3a76;hpb=9199abdfc081fdd8e08e9f5072a0bbabd3302e13;p=pspp-builds.git diff --git a/src/ui/gui/psppire-dict.c b/src/ui/gui/psppire-dict.c index 15a3deff..40ddf501 100644 --- a/src/ui/gui/psppire-dict.c +++ b/src/ui/gui/psppire-dict.c @@ -1,6 +1,6 @@ /* PSPPIRE --- A Graphical User Interface for PSPP - Copyright (C) 2004, 2006 Free Software Foundation + Copyright (C) 2004, 2006, 2007 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,11 +49,12 @@ enum {VARIABLE_CHANGED, VARIABLE_RESIZED, VARIABLE_INSERTED, VARIABLES_DELETED, + WEIGHT_CHANGED, + FILTER_CHANGED, + SPLIT_CHANGED, n_SIGNALS}; -static guint signal[n_SIGNALS]; - -#define CACHE_CHUNK 5 +static guint signals [n_SIGNALS]; /* --- functions --- */ /** @@ -108,7 +109,7 @@ psppire_dict_class_init (PsppireDictClass *class) object_class->finalize = psppire_dict_finalize; - signal[VARIABLE_CHANGED] = + signals [VARIABLE_CHANGED] = g_signal_new ("variable_changed", G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_FIRST, @@ -121,7 +122,7 @@ psppire_dict_class_init (PsppireDictClass *class) - signal[VARIABLE_INSERTED] = + signals [VARIABLE_INSERTED] = g_signal_new ("variable_inserted", G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_FIRST, @@ -133,7 +134,7 @@ psppire_dict_class_init (PsppireDictClass *class) G_TYPE_INT); - signal[VARIABLES_DELETED] = + signals [VARIABLES_DELETED] = g_signal_new ("variables_deleted", G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_FIRST, @@ -146,7 +147,7 @@ psppire_dict_class_init (PsppireDictClass *class) G_TYPE_INT); - signal[VARIABLE_RESIZED] = + signals [VARIABLE_RESIZED] = g_signal_new ("dict-size-changed", G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_FIRST, @@ -158,6 +159,40 @@ psppire_dict_class_init (PsppireDictClass *class) G_TYPE_INT, G_TYPE_INT); + + signals [WEIGHT_CHANGED] = + g_signal_new ("weight-changed", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); + + + signals [FILTER_CHANGED] = + g_signal_new ("filter-changed", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); + + + signals [SPLIT_CHANGED] = + g_signal_new ("split-changed", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); } static void @@ -175,26 +210,48 @@ psppire_dict_finalize (GObject *object) static void addcb (struct dictionary *d, int idx, void *pd) { - g_signal_emit (pd, signal[VARIABLE_INSERTED], 0, idx); + g_signal_emit (pd, signals [VARIABLE_INSERTED], 0, idx); } static void delcb (struct dictionary *d, int idx, void *pd) { - g_signal_emit (pd, signal[VARIABLES_DELETED], 0, idx, 1); + g_signal_emit (pd, signals [VARIABLES_DELETED], 0, idx, 1); } static void mutcb (struct dictionary *d, int idx, void *pd) { - g_signal_emit (pd, signal[VARIABLE_CHANGED], 0, idx); + g_signal_emit (pd, signals [VARIABLE_CHANGED], 0, idx); } +static void +weight_changed_callback (struct dictionary *d, int idx, void *pd) +{ + g_signal_emit (pd, signals [WEIGHT_CHANGED], 0, idx); +} + +static void +filter_changed_callback (struct dictionary *d, int idx, void *pd) +{ + g_signal_emit (pd, signals [FILTER_CHANGED], 0, idx); +} + +static void +split_changed_callback (struct dictionary *d, void *pd) +{ + g_signal_emit (pd, signals [SPLIT_CHANGED], 0); +} + + static const struct dict_callbacks gui_callbacks = { addcb, delcb, - mutcb + mutcb, + weight_changed_callback, + filter_changed_callback, + split_changed_callback }; static void @@ -221,6 +278,13 @@ psppire_dict_new_from_dict (struct dictionary *d) } +void +psppire_dict_replace_dictionary (PsppireDict *dict, struct dictionary *d) +{ + dict->dict = d; +} + + /* Returns a valid name for a new variable in DICT. The return value is statically allocated */ static gchar * @@ -243,10 +307,10 @@ void psppire_dict_insert_variable (PsppireDict *d, gint idx, const gchar *name) { struct variable *var ; + g_return_if_fail (idx >= 0); g_return_if_fail (d); g_return_if_fail (G_IS_PSPPIRE_DICT (d)); - if ( ! name ) name = auto_generate_var_name (d); @@ -304,7 +368,7 @@ psppire_dict_set_name (PsppireDict* d, gint idx, const gchar *name) /* Return the IDXth variable */ struct variable * -psppire_dict_get_variable (PsppireDict *d, gint idx) +psppire_dict_get_variable (const PsppireDict *d, gint idx) { g_return_val_if_fail (d, NULL); g_return_val_if_fail (d->dict, NULL); @@ -339,7 +403,6 @@ psppire_dict_lookup_var (const PsppireDict *d, const gchar *name) return dict_lookup_var (d->dict, name); } - /* Clears the contents of D */ void psppire_dict_clear (PsppireDict *d) @@ -348,14 +411,11 @@ psppire_dict_clear (PsppireDict *d) g_return_if_fail (d->dict); { - const gint n_vars = dict_get_var_cnt (d->dict); - dict_clear (d->dict); } } - /* Return true is NAME would be a valid name of a variable to add to the dictionary. False otherwise. If REPORT is true, then invalid names will be reported as such as errors @@ -400,7 +460,7 @@ psppire_dict_resize_variable (PsppireDict *d, const struct variable *pv, fv = var_get_case_index (pv); - g_signal_emit (d, signal[VARIABLE_RESIZED], 0, + g_signal_emit (d, signals [VARIABLE_RESIZED], 0, fv + old_size, new_size - old_size ); } @@ -622,3 +682,18 @@ psppire_dict_rename_var (PsppireDict *dict, struct variable *v, { dict_rename_var (dict->dict, v, text); } + + +void +psppire_dict_set_weight_variable (PsppireDict *dict, struct variable *v) +{ + g_return_if_fail (v == NULL || var_is_numeric (v)); + dict_set_weight (dict->dict, v); +} + + +struct variable * +psppire_dict_get_weight_variable (const PsppireDict *dict) +{ + return dict_get_weight (dict->dict); +}