X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-var-sheet.c;h=615dd6520f4e17fce5b215bf89ed07266e49ebc2;hb=38c2638eed90f33225870563c4be183097e4155a;hp=9ad915157146e6f7cac9efc667d59670e5c64ecd;hpb=2fbfb300e1200847986e5c669aa8322fe96683e7;p=pspp-builds.git diff --git a/src/ui/gui/psppire-var-sheet.c b/src/ui/gui/psppire-var-sheet.c index 9ad91515..615dd652 100644 --- a/src/ui/gui/psppire-var-sheet.c +++ b/src/ui/gui/psppire-var-sheet.c @@ -1,4 +1,3 @@ - /* PSPPIRE - a graphical user interface for PSPP. Copyright (C) 2008 Free Software Foundation, Inc. @@ -17,10 +16,11 @@ #include #include "psppire-var-sheet.h" +#include #include #include "helper.h" -#include + #include "customentry.h" #include #include "psppire-var-store.h" @@ -33,7 +33,7 @@ static void psppire_var_sheet_class_init (PsppireVarSheetClass *klass); static void psppire_var_sheet_init (PsppireVarSheet *vs); -enum +enum { PSPPIRE_VAR_SHEET_MAY_CREATE_VARS = 1 }; @@ -96,20 +96,6 @@ struct column_parameters gint width ; }; -static const struct column_parameters column_def[] = { - { N_("Name"), 80}, - { N_("Type"), 100}, - { N_("Width"), 57}, - { N_("Decimals"),91}, - { N_("Label"), 95}, - { N_("Values"), 103}, - { N_("Missing"), 95}, - { N_("Columns"), 80}, - { N_("Align"), 69}, - { N_("Measure"), 99}, -}; - - #define n_ALIGNMENTS 3 const gchar *const alignments[n_ALIGNMENTS + 1]={ @@ -255,39 +241,41 @@ change_measure (GtkComboBox *cb, Returns TRUE iff the move should be disallowed */ static gboolean traverse_cell_callback (GtkSheet *sheet, - gint row, gint column, - gint *new_row, gint *new_column) + const GtkSheetCell *existing_cell, + GtkSheetCell *new_cell) { 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) + if (new_cell->row >= n_vars && !var_sheet->may_create_vars) return TRUE; - if ( row == n_vars && *new_row >= n_vars) + if ( existing_cell->row == n_vars && new_cell->row >= n_vars) { - GtkEntry *entry = GTK_ENTRY (gtk_sheet_get_entry (sheet)); + GtkEntry *entry = gtk_sheet_get_entry (sheet); const gchar *name = gtk_entry_get_text (entry); if (! psppire_dict_check_name (var_store->dict, name, TRUE)) return TRUE; - psppire_dict_insert_variable (var_store->dict, row, name); + psppire_dict_insert_variable (var_store->dict, existing_cell->row, name); return FALSE; } + /* If the destination cell is outside the current variables, then automatically create variables for the new rows. */ - if ( ((*new_row > n_vars) || - (*new_row == n_vars && *new_column != PSPPIRE_VAR_STORE_COL_NAME)) ) + if ( ((new_cell->row > n_vars) || + (new_cell->row == n_vars && + new_cell->col != PSPPIRE_VAR_STORE_COL_NAME)) ) { gint i; - for ( i = n_vars ; i <= *new_row; ++i ) + for ( i = n_vars ; i <= new_cell->row; ++i ) psppire_dict_insert_variable (var_store->dict, i, NULL); } @@ -296,57 +284,47 @@ traverse_cell_callback (GtkSheet *sheet, -/* - Callback whenever the pointer leaves a cell on the var sheet. -*/ -static gboolean -var_sheet_cell_entry_leave (GtkSheet * sheet, gint row, gint column, - gpointer data) -{ - gtk_sheet_change_entry (sheet, GTK_TYPE_ENTRY); - return TRUE; -} - /* - Callback whenever the pointer enters a cell on the var sheet. + Callback whenever the active cell changes on the var sheet. */ -static gboolean -var_sheet_cell_entry_enter (PsppireVarSheet *vs, gint row, gint column, - gpointer data) +static void +var_sheet_change_active_cell (PsppireVarSheet *vs, + gint row, gint column, + gint oldrow, gint oldcolumn, + gpointer data) { GtkSheetCellAttr attributes; - PsppireVarStore *var_store ; + PsppireVarStore *var_store; PsppireVarSheetClass *vs_class = PSPPIRE_VAR_SHEET_CLASS(G_OBJECT_GET_CLASS (vs)); struct variable *var ; GtkSheet *sheet = GTK_SHEET (vs); - g_return_val_if_fail (sheet != NULL, FALSE); + g_return_if_fail (sheet != NULL); var_store = PSPPIRE_VAR_STORE (gtk_sheet_get_model (sheet)); g_assert (var_store); - if ( row >= psppire_var_store_get_var_cnt (var_store)) - return TRUE; + g_return_if_fail (oldcolumn == PSPPIRE_VAR_STORE_COL_NAME || + row < psppire_var_store_get_var_cnt (var_store)); gtk_sheet_get_attributes (sheet, row, column, &attributes); - var = psppire_var_store_get_var (var_store, row); switch (column) { case PSPPIRE_VAR_STORE_COL_ALIGN: { + GtkEntry *entry; static GtkListStore *list_store = NULL; GtkComboBoxEntry *cbe; gtk_sheet_change_entry (sheet, GTK_TYPE_COMBO_BOX_ENTRY); - cbe = - GTK_COMBO_BOX_ENTRY (gtk_sheet_get_entry (sheet)->parent); - + entry = gtk_sheet_get_entry (sheet); + cbe = GTK_COMBO_BOX_ENTRY (GTK_WIDGET (entry)->parent); if ( ! list_store) list_store = create_label_list (alignments); @@ -362,12 +340,11 @@ var_sheet_cell_entry_enter (PsppireVarSheet *vs, gint row, gint column, case PSPPIRE_VAR_STORE_COL_MEASURE: { + GtkEntry *entry; GtkComboBoxEntry *cbe; gtk_sheet_change_entry (sheet, GTK_TYPE_COMBO_BOX_ENTRY); - cbe = - GTK_COMBO_BOX_ENTRY (gtk_sheet_get_entry (sheet)->parent); - - + entry = gtk_sheet_get_entry (sheet); + cbe = GTK_COMBO_BOX_ENTRY (GTK_WIDGET (entry)->parent); gtk_combo_box_set_model (GTK_COMBO_BOX (cbe), GTK_TREE_MODEL (vs_class->measure_list)); @@ -503,19 +480,12 @@ var_sheet_cell_entry_enter (PsppireVarSheet *vs, gint row, gint column, gtk_sheet_change_entry (sheet, GTK_TYPE_ENTRY); break; } - - - return TRUE; } - - static void psppire_var_sheet_init (PsppireVarSheet *vs) { - gint i; - GObject *geo = g_sheet_hetero_column_new (75, PSPPIRE_VAR_STORE_n_COLS); GladeXML *xml = XML_NEW ("data-editor.glade"); vs->val_labs_dialog = val_labs_dialog_create (xml); @@ -527,24 +497,8 @@ psppire_var_sheet_init (PsppireVarSheet *vs) vs->dispose_has_run = FALSE; vs->may_create_vars = TRUE; - for (i = 0 ; i < PSPPIRE_VAR_STORE_n_COLS ; ++i ) - { - g_sheet_hetero_column_set_button_label (G_SHEET_HETERO_COLUMN (geo), i, - gettext (column_def[i].label)); - - g_sheet_hetero_column_set_width (G_SHEET_HETERO_COLUMN (geo), i, - column_def[i].width); - } - - g_object_set (vs, "column-geometry", geo, NULL); - - g_signal_connect (vs, "activate", - G_CALLBACK (var_sheet_cell_entry_enter), - NULL); - - g_signal_connect (vs, "deactivate", - G_CALLBACK (var_sheet_cell_entry_leave), + G_CALLBACK (var_sheet_change_active_cell), NULL); g_signal_connect (vs, "traverse", @@ -552,8 +506,42 @@ psppire_var_sheet_init (PsppireVarSheet *vs) } +static const struct column_parameters column_def[] = { + { N_("Name"), 80}, + { N_("Type"), 100}, + { N_("Width"), 57}, + { N_("Decimals"),91}, + { N_("Label"), 95}, + { N_("Values"), 103}, + { N_("Missing"), 95}, + { N_("Columns"), 80}, + { N_("Align"), 69}, + { N_("Measure"), 99}, +}; + GtkWidget* psppire_var_sheet_new (void) { - return GTK_WIDGET (g_object_new (psppire_var_sheet_get_type (), NULL)); + gint i; + PsppireAxisImpl *ha = psppire_axis_impl_new (); + PsppireAxisImpl *va = psppire_axis_impl_new (); + + GtkWidget *w = g_object_new (psppire_var_sheet_get_type (), NULL); + + for (i = 0 ; i < 10 ; ++i) + psppire_axis_impl_append (ha, column_def[i].width); + + g_object_set (va, + "default-size", 25, + NULL); + + g_object_set (ha, "minimum-extent", 0, + NULL); + + g_object_set (w, + "horizontal-axis", ha, + "vertical-axis", va, + NULL); + + return w; }