BACKEND_CHANGED,
VARIABLE_CHANGED,
- VARIABLE_RESIZED,
VARIABLE_INSERTED,
VARIABLE_DELETED,
- VARIABLE_DISPLAY_WIDTH_CHANGED,
WEIGHT_CHANGED,
FILTER_CHANGED,
/* --- 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 psppire_dict_dispose (GObject *object);
static void dictionary_tree_model_init (GtkTreeModelIface *iface);
parent_class = g_type_class_peek_parent (class);
- object_class->finalize = psppire_dict_finalize;
+ object_class->dispose = psppire_dict_dispose;
signals [BACKEND_CHANGED] =
g_signal_new ("backend-changed",
signals [VARIABLE_CHANGED] =
- g_signal_new ("variable_changed",
+ g_signal_new ("variable-changed",
G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
0,
NULL, NULL,
- g_cclosure_marshal_VOID__INT,
+ psppire_marshal_VOID__INT_UINT_POINTER,
G_TYPE_NONE,
- 1,
- G_TYPE_INT);
+ 3,
+ G_TYPE_INT,
+ G_TYPE_UINT,
+ G_TYPE_POINTER
+ );
signals [VARIABLE_INSERTED] =
- g_signal_new ("variable_inserted",
+ g_signal_new ("variable-inserted",
G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
0,
G_TYPE_INT);
- signals [VARIABLE_RESIZED] =
- g_signal_new ("dict-size-changed",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_FIRST,
- 0,
- NULL, NULL,
- psppire_marshal_VOID__INT_INT,
- G_TYPE_NONE,
- 2,
- 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",
G_TYPE_FROM_CLASS (class),
}
static void
-psppire_dict_finalize (GObject *object)
+psppire_dict_dispose (GObject *object)
{
PsppireDict *d = PSPPIRE_DICT (object);
- dict_destroy (d->dict);
+ dict_set_callbacks (d->dict, NULL, NULL);
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (parent_class)->dispose (object);
}
/* Pass on callbacks from src/data/dictionary, as
}
static void
-mutcb (struct dictionary *d, int idx, void *pd)
+mutcb (struct dictionary *d, int idx, unsigned int what, const struct variable *oldvar, void *pd)
{
- g_signal_emit (pd, signals [VARIABLE_CHANGED], 0, idx);
-}
-
-static void
-resize_cb (struct dictionary *d, int idx, int old_width, void *pd)
-{
- g_signal_emit (pd, signals [VARIABLE_RESIZED], 0, idx, old_width);
+ g_signal_emit (pd, signals [VARIABLE_CHANGED], 0, idx, what, oldvar);
}
static void
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 =
{
addcb,
delcb,
mutcb,
- resize_cb,
weight_changed_callback,
filter_changed_callback,
- split_changed_callback,
- variable_display_width_callback
+ split_changed_callback
};
static void
/* Stores a valid name for a new variable in DICT into the SIZE bytes in NAME.
Returns true if successful, false if SIZE is insufficient. */
-static bool
-auto_generate_var_name (const PsppireDict *dict, char *name, size_t size)
+bool
+psppire_dict_generate_name (const PsppireDict *dict, char *name, size_t size)
{
gint d;
return name;
}
-/* Insert a new variable at posn IDX, with the name NAME.
+/* Insert a new variable at posn IDX, with the name NAME, and return the
+ new variable.
If NAME is null, then a name will be automatically assigned.
*/
-void
+struct variable *
psppire_dict_insert_variable (PsppireDict *d, gint idx, const gchar *name)
{
- struct variable *var ;
+ struct variable *var;
char tmpname[64];
- g_return_if_fail (idx >= 0);
- g_return_if_fail (d);
- g_return_if_fail (PSPPIRE_IS_DICT (d));
+ g_return_val_if_fail (idx >= 0, NULL);
+ g_return_val_if_fail (d, NULL);
+ g_return_val_if_fail (PSPPIRE_IS_DICT (d), NULL);
- if ( ! name )
+ if (name == NULL)
{
- if (!auto_generate_var_name (d, tmpname, sizeof tmpname))
- g_return_if_reached ();
+ if (!psppire_dict_generate_name (d, tmpname, sizeof tmpname))
+ g_return_val_if_reached (NULL);
name = tmpname;
}
d->disable_insert_signal = FALSE;
g_signal_emit (d, signals[VARIABLE_INSERTED], 0, idx);
+
+ return var;
}
/* Delete N variables beginning at FIRST */
}
-void
-psppire_dict_resize_variable (PsppireDict *d, const struct variable *pv,
- gint old_size, gint new_size)
-{
- g_return_if_fail (d);
- g_return_if_fail (d->dict);
-
- if ( old_size == new_size )
- return ;
-
- g_signal_emit (d, signals [VARIABLE_RESIZED], 0,
- var_get_dict_index (pv),
- new_size - old_size );
-}
-
-
/* Tree Model Stuff */
static GtkTreeModelFlags tree_model_get_flags (GtkTreeModel *model);
case DICT_TVM_COL_VAR:
return PSPPIRE_VAR_PTR_TYPE;
break;
+ case DICT_TVM_COL_LABEL:
+ return G_TYPE_STRING;
+ break;
default:
g_return_val_if_reached ((GType)0);
break;