X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fvar-sheet.c;h=ac6ce929049edea2659586876f004e631a6bce32;hb=6f4d5b2819ec4fc3a19e553da8d8eee9b3e4d2e5;hp=3c26fcd1778b8f92235338ce49c431a5476f1d31;hpb=a7fb79e81f6e2a0dfddc61e91f207609e31a4632;p=pspp-builds.git diff --git a/src/ui/gui/var-sheet.c b/src/ui/gui/var-sheet.c index 3c26fcd1..ac6ce929 100644 --- a/src/ui/gui/var-sheet.c +++ b/src/ui/gui/var-sheet.c @@ -1,10 +1,9 @@ -/* - PSPPIRE --- A Graphical User Interface for PSPP - Copyright (C) 2004, 2005, 2006 Free Software Foundation +/* PSPPIRE - a graphical user interface for PSPP. + Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation - This program is free software; you can redistribute it and/or modify + 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 - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -13,9 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. */ + along with this program. If not, see . */ /* This module creates the Variable Sheet used for inputing the @@ -33,7 +30,6 @@ #include #include -#include #include @@ -41,6 +37,8 @@ #include #include +#include "localcharset.h" +#include "xalloc.h" #include "psppire-var-store.h" #include "helper.h" #include "psppire-dict.h" @@ -81,7 +79,7 @@ static const struct column_parameters column_def[] = { const gchar *const alignments[n_ALIGNMENTS + 1]={ N_("Left"), N_("Right"), - N_("Centre"), + N_("Center"), 0 }; @@ -92,6 +90,13 @@ const gchar *const measures[n_MEASURES + 1]={ 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) { @@ -152,10 +157,14 @@ traverse_cell_callback (GtkSheet * sheet, 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)); @@ -209,7 +218,7 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, { GtkSheetCellAttr attributes; PsppireVarStore *var_store ; - struct variable *pv ; + struct variable *var ; GladeXML *xml; @@ -222,17 +231,17 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, if ( row >= psppire_var_store_get_var_cnt (var_store)) return TRUE; - xml = glade_xml_new (PKGDATADIR "/data-editor.glade", NULL, NULL); + xml = XML_NEW ("data-editor.glade"); 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 = @@ -248,9 +257,10 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, 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; @@ -268,13 +278,13 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, 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; @@ -283,11 +293,15 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, 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", @@ -295,6 +309,7 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, val_labs_dialog); } break; + case COL_MISSING: { static struct missing_val_dialog *missing_val_dialog = 0; @@ -305,6 +320,11 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, 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); @@ -334,7 +354,7 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, 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", @@ -342,6 +362,7 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, var_type_dialog); } break; + case COL_WIDTH: case COL_DECIMALS: case COL_COLUMNS: @@ -358,7 +379,7 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, 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: @@ -405,49 +426,41 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, 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; - gtk_sheet_set_model (GTK_SHEET (sheet), G_SHEET_MODEL (the_var_store)); + gint i; + + GObject *geo = g_sheet_hetero_column_new (75, n_COLS); + g_assert (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, nl_langinfo (CODESET)); for (i = 0 ; i < n_COLS ; ++i ) { g_sheet_hetero_column_set_button_label (G_SHEET_HETERO_COLUMN (geo), i, @@ -456,7 +469,33 @@ psppire_variable_sheet_create (gchar *widget_name, g_sheet_hetero_column_set_width (G_SHEET_HETERO_COLUMN (geo), 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); @@ -464,3 +503,10 @@ psppire_variable_sheet_create (gchar *widget_name, } + +void +psppire_var_sheet_set_may_create_vars (PsppireVarSheet *sheet, + gboolean may_create_vars) +{ + sheet->may_create_vars = may_create_vars; +}