X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dict.c;h=8f7fed618fcedbfd8e8d4463eca07dff111ee2c5;hb=ddd7c113f3e50c8d87f6a677856799d05a1f40c7;hp=3722b2e1894a298179bfcd0546cb6d00a2d72ae4;hpb=017ba229ee4570635c3cb07fa7189796fce15969;p=pspp diff --git a/src/ui/gui/psppire-dict.c b/src/ui/gui/psppire-dict.c index 3722b2e189..8f7fed618f 100644 --- a/src/ui/gui/psppire-dict.c +++ b/src/ui/gui/psppire-dict.c @@ -22,7 +22,6 @@ #include #include "psppire-dict.h" -#include #include #include #include @@ -31,16 +30,6 @@ #include "helper.h" #include "message-dialog.h" -/* --- prototypes --- */ -static void psppire_dict_class_init (PsppireDictClass *class); -static void psppire_dict_init (PsppireDict *dict); -static void psppire_dict_finalize (GObject *object); - -static void dictionary_tree_model_init (GtkTreeModelIface *iface); - - -/* --- variables --- */ -static GObjectClass *parent_class = NULL; enum { BACKEND_CHANGED, @@ -49,6 +38,7 @@ enum { VARIABLE_RESIZED, VARIABLE_INSERTED, VARIABLE_DELETED, + VARIABLE_DISPLAY_WIDTH_CHANGED, WEIGHT_CHANGED, FILTER_CHANGED, @@ -56,6 +46,18 @@ enum { n_SIGNALS }; + +/* --- prototypes --- */ +static void psppire_dict_class_init (PsppireDictClass *class); +static void psppire_dict_init (PsppireDict *dict); +static void psppire_dict_finalize (GObject *object); + +static void dictionary_tree_model_init (GtkTreeModelIface *iface); + + +/* --- variables --- */ +static GObjectClass *parent_class = NULL; + static guint signals [n_SIGNALS]; /* --- functions --- */ @@ -94,8 +96,6 @@ psppire_dict_get_type (void) g_type_add_interface_static (object_type, GTK_TYPE_TREE_MODEL, &tree_model_info); - - } return object_type; @@ -173,6 +173,17 @@ psppire_dict_class_init (PsppireDictClass *class) G_TYPE_INT, G_TYPE_INT); + signals [VARIABLE_DISPLAY_WIDTH_CHANGED] = + g_signal_new ("variable-display-width-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 [WEIGHT_CHANGED] = g_signal_new ("weight-changed", @@ -224,7 +235,10 @@ psppire_dict_finalize (GObject *object) static void addcb (struct dictionary *d, int idx, void *pd) { - g_signal_emit (pd, signals [VARIABLE_INSERTED], 0, idx); + PsppireDict *dict = PSPPIRE_DICT (pd); + + if ( ! dict->disable_insert_signal) + g_signal_emit (dict, signals [VARIABLE_INSERTED], 0, idx); } static void @@ -265,6 +279,13 @@ split_changed_callback (struct dictionary *d, void *pd) g_signal_emit (pd, signals [SPLIT_CHANGED], 0); } +static void +variable_display_width_callback (struct dictionary *d, int idx, void *pd) +{ + g_signal_emit (pd, signals [VARIABLE_DISPLAY_WIDTH_CHANGED], 0, idx); +} + + static const struct dict_callbacks gui_callbacks = { @@ -274,13 +295,15 @@ static const struct dict_callbacks gui_callbacks = resize_cb, weight_changed_callback, filter_changed_callback, - split_changed_callback + split_changed_callback, + variable_display_width_callback }; static void psppire_dict_init (PsppireDict *psppire_dict) { psppire_dict->stamp = g_random_int (); + psppire_dict->disable_insert_signal = FALSE; } /** @@ -350,9 +373,15 @@ psppire_dict_insert_variable (PsppireDict *d, gint idx, const gchar *name) if ( ! name ) name = auto_generate_var_name (d); + d->disable_insert_signal = TRUE; + var = dict_create_var (d->dict, name, 0); dict_reorder_var (d->dict, var, idx); + + d->disable_insert_signal = FALSE; + + g_signal_emit (d, signals[VARIABLE_INSERTED], 0, idx); } /* Delete N variables beginning at FIRST */ @@ -488,7 +517,7 @@ psppire_dict_check_name (const PsppireDict *dict, } -inline gint +gint psppire_dict_get_next_value_idx (const PsppireDict *dict) { return dict_get_next_value_idx (dict->dict);