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=e6f1373a54d969ed76de022e0135924ace674c8c;hpb=bfa3bb62acfb1496a028c4baa800b2d2c5b543f5;p=pspp diff --git a/src/ui/gui/psppire-dict.c b/src/ui/gui/psppire-dict.c index e6f1373a54..8f7fed618f 100644 --- a/src/ui/gui/psppire-dict.c +++ b/src/ui/gui/psppire-dict.c @@ -30,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, @@ -48,6 +38,7 @@ enum { VARIABLE_RESIZED, VARIABLE_INSERTED, VARIABLE_DELETED, + VARIABLE_DISPLAY_WIDTH_CHANGED, WEIGHT_CHANGED, FILTER_CHANGED, @@ -55,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 --- */ @@ -93,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; @@ -172,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", @@ -223,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 @@ -264,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 = { @@ -273,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; } /** @@ -349,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 */