/*
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_SIGNAL_RUN_FIRST,
- signal[VARIABLE_INSERTED] =
+ signals [VARIABLE_INSERTED] =
g_signal_new ("variable_inserted",
G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
G_TYPE_INT);
- signal[VARIABLES_DELETED] =
+ signals [VARIABLES_DELETED] =
g_signal_new ("variables_deleted",
G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
G_TYPE_INT);
- signal[VARIABLE_RESIZED] =
+ signals [VARIABLE_RESIZED] =
g_signal_new ("dict-size-changed",
G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_FIRST,
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));
-
if ( ! name )
name = auto_generate_var_name (d);
/* 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);
}
-
/* 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);
}
}
-
/* 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 );
}
{
dict_rename_var (dict->dict, v, text);
}
+
+
+struct variable *
+psppire_dict_get_weight_variable (const PsppireDict *dict)
+{
+ return dict_get_weight (dict->dict);
+}