/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2004, 2005, 2006 Free Software Foundation
+ Copyright (C) 2004, 2005, 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
#include <gtksheet/gsheet-uniform-row.h>
#include "localcharset.h"
+#include "xalloc.h"
#include "psppire-var-store.h"
#include "helper.h"
#include "psppire-dict.h"
const gchar *const alignments[n_ALIGNMENTS + 1]={
N_("Left"),
N_("Right"),
- N_("Centre"),
+ N_("Center"),
0
};
0
};
+G_DEFINE_TYPE (PsppireVarSheet, psppire_var_sheet, GTK_TYPE_SHEET);
+
+static void
+psppire_var_sheet_class_init (PsppireVarSheetClass *class)
+{
+}
+
static GtkListStore *
create_label_list (const gchar *const *labels)
{
gint *new_row, gint *new_column
)
{
+ PsppireVarSheet *var_sheet = PSPPIRE_VAR_SHEET (sheet);
PsppireVarStore *var_store = PSPPIRE_VAR_STORE (gtk_sheet_get_model (sheet));
gint n_vars = psppire_var_store_get_var_cnt (var_store);
+ if (*new_row >= n_vars && !var_sheet->may_create_vars)
+ return FALSE;
+
if ( row == n_vars && *new_row >= n_vars)
{
GtkEntry *entry = GTK_ENTRY (gtk_sheet_get_entry (sheet));
{
GtkSheetCellAttr attributes;
PsppireVarStore *var_store ;
- struct variable *pv ;
+ struct variable *var ;
GladeXML *xml;
gtk_sheet_get_attributes (sheet, row, column, &attributes);
- pv = psppire_var_store_get_var (var_store, row);
+ var = psppire_var_store_get_var (var_store, row);
switch (column)
{
case COL_ALIGN:
{
- static GtkListStore *list_store = 0;
+ static GtkListStore *list_store = NULL;
GtkComboBoxEntry *cbe;
gtk_sheet_change_entry (sheet, GTK_TYPE_COMBO_BOX_ENTRY);
cbe =
g_signal_connect (G_OBJECT (cbe),"changed",
- G_CALLBACK (change_alignment), pv);
+ G_CALLBACK (change_alignment), var);
}
break;
+
case COL_MEASURE:
{
static GtkListStore *list_store = 0;
gtk_combo_box_entry_set_text_column (cbe, 0);
g_signal_connect (G_OBJECT (cbe),"changed",
- G_CALLBACK (change_measure), pv);
+ G_CALLBACK (change_measure), var);
}
break;
case COL_VALUES:
{
- static struct val_labs_dialog *val_labs_dialog = 0;
+ static struct val_labs_dialog *val_labs_dialog = NULL;
PsppireCustomEntry *customEntry;
customEntry =
PSPPIRE_CUSTOM_ENTRY (gtk_sheet_get_entry (sheet));
+ if ( var_is_long_string (var))
+ g_object_set (customEntry,
+ "editable", FALSE,
+ NULL);
if (!val_labs_dialog )
val_labs_dialog = val_labs_dialog_create (xml);
- val_labs_dialog_set_target_variable (val_labs_dialog, pv);
+ val_labs_dialog_set_target_variable (val_labs_dialog, var);
g_signal_connect_swapped (GTK_OBJECT (customEntry),
"clicked",
val_labs_dialog);
}
break;
+
case COL_MISSING:
{
static struct missing_val_dialog *missing_val_dialog = 0;
customEntry =
PSPPIRE_CUSTOM_ENTRY (gtk_sheet_get_entry (sheet));
+ if ( var_is_long_string (var))
+ g_object_set (customEntry,
+ "editable", FALSE,
+ NULL);
+
if (!missing_val_dialog )
missing_val_dialog = missing_val_dialog_create (xml);
var_type_dialog = var_type_dialog_create (xml);
- var_type_dialog->pv = pv;
+ var_type_dialog->pv = var;
g_signal_connect_swapped (GTK_OBJECT (customEntry),
"clicked",
var_type_dialog);
}
break;
+
case COL_WIDTH:
case COL_DECIMALS:
case COL_COLUMNS:
const gint current_value = atoi (s);
GtkObject *adj ;
- const struct fmt_spec *fmt = var_get_write_format (pv);
+ const struct fmt_spec *fmt = var_get_write_format (var);
switch (column)
{
case COL_WIDTH:
return TRUE;
}
-
-extern PsppireVarStore *the_var_store;
-
-
-/* Create the var sheet */
-G_MODULE_EXPORT GtkWidget*
-psppire_variable_sheet_create (gchar *widget_name,
- gchar *string1,
- gchar *string2,
- gint int1, gint int2)
+static void
+psppire_var_sheet_init (PsppireVarSheet *self)
{
- gchar *codeset;
- gint i;
- GtkWidget *sheet;
+ self->may_create_vars = true;
- GObject *geo = g_sheet_hetero_column_new (75, n_COLS);
-
- g_assert (the_var_store);
-
- sheet = gtk_sheet_new (G_SHEET_ROW (the_var_store),
- G_SHEET_COLUMN (geo),
- "variable sheet", 0);
-
-
- g_signal_connect (GTK_OBJECT (sheet), "activate",
+ g_signal_connect (self, "activate",
GTK_SIGNAL_FUNC (var_sheet_cell_entry_enter),
0);
- g_signal_connect (GTK_OBJECT (sheet), "deactivate",
+ g_signal_connect (self, "deactivate",
GTK_SIGNAL_FUNC (var_sheet_cell_entry_leave),
0);
- g_signal_connect (GTK_OBJECT (sheet), "traverse",
+ g_signal_connect (self, "traverse",
GTK_SIGNAL_FUNC (traverse_cell_callback), 0);
+}
+
+GtkWidget *
+psppire_var_sheet_new_with_var_store (PsppireVarStore *var_store)
+{
+ GtkWidget *sheet;
+
+ gint i;
+ GObject *geo = g_sheet_hetero_column_new (75, n_COLS);
+ g_assert (var_store);
- gtk_sheet_set_model (GTK_SHEET (sheet), G_SHEET_MODEL (the_var_store));
+ sheet = g_object_new (PSPPIRE_TYPE_VAR_SHEET,
+ "row-geometry", var_store,
+ "column-geometry", geo,
+ NULL);
+ gtk_sheet_set_model (GTK_SHEET (sheet), G_SHEET_MODEL (var_store));
- /* Since this happens inside glade_xml_new, we must prevent strings from
- * being re-encoded twice */
- codeset = bind_textdomain_codeset (PACKAGE, 0);
- bind_textdomain_codeset (PACKAGE, locale_charset ());
for (i = 0 ; i < n_COLS ; ++i )
{
column_def[i].width);
}
+
+
+ return sheet;
+}
+
+/* Create the var sheet */
+G_MODULE_EXPORT GtkWidget*
+psppire_variable_sheet_create (gchar *widget_name,
+ gchar *string1,
+ gchar *string2,
+ gint int1, gint int2)
+{
+ gchar *codeset;
+ GtkWidget *sheet;
+ extern PsppireVarStore *the_var_store;
+
+ /* Since this happens inside glade_xml_new, we must prevent strings from
+ * being re-encoded twice */
+ codeset = xstrdup (bind_textdomain_codeset (PACKAGE, 0));
+ bind_textdomain_codeset (PACKAGE, locale_charset ());
+
+
+ sheet = psppire_var_sheet_new_with_var_store (the_var_store);
+
bind_textdomain_codeset (PACKAGE, codeset);
+ free (codeset);
gtk_widget_show (sheet);
}
+
+void
+psppire_var_sheet_set_may_create_vars (PsppireVarSheet *sheet,
+ gboolean may_create_vars)
+{
+ sheet->may_create_vars = may_create_vars;
+}