/*
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
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 --- */
/**
object_class->finalize = psppire_dict_finalize;
- signal[VARIABLE_CHANGED] =
+ signals [VARIABLE_CHANGED] =
g_signal_new ("variable_changed",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
0,
NULL, NULL,
- signal[VARIABLE_INSERTED] =
+ signals [VARIABLE_INSERTED] =
g_signal_new ("variable_inserted",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
0,
NULL, NULL,
G_TYPE_INT);
- signal[VARIABLES_DELETED] =
+ signals [VARIABLES_DELETED] =
g_signal_new ("variables_deleted",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
0,
NULL, NULL,
G_TYPE_INT);
- signal[VARIABLE_RESIZED] =
+ signals [VARIABLE_RESIZED] =
g_signal_new ("dict-size-changed",
- G_TYPE_FROM_CLASS(class),
+ G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
0,
NULL, NULL,
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
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
}
+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 *
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));
-
+ g_return_if_fail (G_IS_PSPPIRE_DICT (d));
if ( ! name )
name = auto_generate_var_name (d);
var = dict_create_var (d->dict, name, 0);
dict_reorder_var (d->dict, var, idx);
-
- g_signal_emit (d, signal[VARIABLE_INSERTED], 0, idx );
}
/* Delete N variables beginning at FIRST */
gint idx;
g_return_if_fail (d);
g_return_if_fail (d->dict);
- g_return_if_fail (G_IS_PSPPIRE_DICT(d));
+ g_return_if_fail (G_IS_PSPPIRE_DICT (d));
for (idx = 0 ; idx < n ; ++idx )
{
dict_delete_var (d->dict, var);
}
dict_compact_values (d->dict);
-
- g_signal_emit (d, signal[VARIABLES_DELETED], 0, first, idx );
}
{
struct variable *var;
g_assert (d);
- g_assert (G_IS_PSPPIRE_DICT(d));
+ g_assert (G_IS_PSPPIRE_DICT (d));
if ( idx < dict_get_var_cnt (d->dict))
/* This is an existing variable? */
var = dict_get_var (d->dict, idx);
dict_rename_var (d->dict, var, name);
- g_signal_emit (d, signal[VARIABLE_CHANGED], 0, idx);
}
else
{
/* new variable */
dict_create_var (d->dict, name, 0);
- g_signal_emit (d, signal[VARIABLE_INSERTED], 0, idx);
}
}
/* 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);
return dict_lookup_var (d->dict, name);
}
-
-void
-psppire_dict_var_changed (PsppireDict *d, gint idx)
-{
- g_return_if_fail (d);
-
- g_signal_emit (d, signal[VARIABLE_CHANGED], 0, idx);
-}
-
-
/* Clears the contents of D */
void
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);
-
- g_signal_emit (d, signal[VARIABLES_DELETED], 0, 0, n_vars );
}
}
-
/* 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
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 );
}
static GtkTreeModelFlags
tree_model_get_flags (GtkTreeModel *model)
{
- g_return_val_if_fail (G_IS_PSPPIRE_DICT(model), (GtkTreeModelFlags) 0);
+ g_return_val_if_fail (G_IS_PSPPIRE_DICT (model), (GtkTreeModelFlags) 0);
return GTK_TREE_MODEL_LIST_ONLY;
}
static GType
tree_model_column_type (GtkTreeModel *model, gint index)
{
- g_return_val_if_fail (G_IS_PSPPIRE_DICT(model), (GType) 0);
+ g_return_val_if_fail (G_IS_PSPPIRE_DICT (model), (GType) 0);
switch (index)
{
GtkTreeIter *parent, gint n)
{
PsppireDict *dict;
- g_return_val_if_fail (G_IS_PSPPIRE_DICT(model), FALSE);
+ g_return_val_if_fail (G_IS_PSPPIRE_DICT (model), FALSE);
- dict = PSPPIRE_DICT(model);
+ dict = PSPPIRE_DICT (model);
if ( parent )
return FALSE;
{
dict_rename_var (dict->dict, v, text);
}
+
+
+struct variable *
+psppire_dict_get_weight_variable (const PsppireDict *dict)
+{
+ return dict_get_weight (dict->dict);
+}