X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-data-editor.c;h=fe4fcb62a5ed8b81d5035e4326fe02f41a96f44a;hb=11706f97dd318697e43e6468b130ca5b7f1bff87;hp=7d2374e0967894b8cb44c3323b4f19b4455a7869;hpb=13adf39ba39008f4c764dd14f037e01f137eca21;p=pspp-builds.git diff --git a/src/ui/gui/psppire-data-editor.c b/src/ui/gui/psppire-data-editor.c index 7d2374e0..fe4fcb62 100644 --- a/src/ui/gui/psppire-data-editor.c +++ b/src/ui/gui/psppire-data-editor.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyrigght (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008 Free Software Foundation, Inc. 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 @@ -17,11 +17,10 @@ #include #include #include -#include +#include #include "psppire-data-editor.h" #include "psppire-var-sheet.h" -#include #include #include "psppire-data-store.h" #include "helper.h" @@ -136,6 +135,9 @@ on_data_column_clicked (PsppireDataEditor *de, gint col, gpointer data) } + + + /* Callback which occurs when the var sheet's row title button is double clicked */ static gboolean @@ -157,13 +159,30 @@ on_var_row_clicked (PsppireDataEditor *de, gint row, gpointer data) if ( row < visible_range.col0 || row > visible_range.coli) { gtk_sheet_moveto (GTK_SHEET (de->data_sheet[0]), - current_row, row, 0, 0); + -1, row, 0, 0); } return FALSE; } +/* Moves the focus to a new cell. + Returns TRUE iff the move should be disallowed */ +static gboolean +traverse_cell_callback (GtkSheet *sheet, + GtkSheetCell *existing_cell, + GtkSheetCell *new_cell, + gpointer data) +{ + PsppireDataEditor *de = PSPPIRE_DATA_EDITOR (data); + const PsppireDict *dict = de->data_store->dict; + + if ( new_cell->col >= psppire_dict_get_var_cnt (dict)) + return TRUE; + + return FALSE; +} + enum { @@ -201,7 +220,6 @@ psppire_data_editor_set_property (GObject *object, for (i = 0 ; i < 4 ; ++i ) g_object_set (de->data_sheet[i], "row-geometry", de->data_store, - "column-geometry", de->data_store, "model", de->data_store, NULL); break; @@ -240,12 +258,12 @@ psppire_data_editor_set_property (GObject *object, case PSPPIRE_DATA_EDITOR_DATA_VIEW: gtk_sheet_get_active_cell (GTK_SHEET (de->data_sheet[0]), &row, &col); gtk_sheet_set_active_cell (GTK_SHEET (de->data_sheet[0]), row, var); - gtk_sheet_moveto (GTK_SHEET (de->data_sheet[0]), row, var, 0.5, 0.5); + gtk_sheet_moveto (GTK_SHEET (de->data_sheet[0]), -1, var, 0.5, 0.5); break; case PSPPIRE_DATA_EDITOR_VARIABLE_VIEW: gtk_sheet_get_active_cell (GTK_SHEET (de->var_sheet), &row, &col); gtk_sheet_set_active_cell (GTK_SHEET (de->var_sheet), var, col); - gtk_sheet_moveto (GTK_SHEET (de->var_sheet), var, col, 0.5, 0.5); + gtk_sheet_moveto (GTK_SHEET (de->var_sheet), var, -1, 0.5, 0.5); break; default: g_assert_not_reached (); @@ -259,7 +277,7 @@ psppire_data_editor_set_property (GObject *object, gint case_num = g_value_get_long (value); gtk_sheet_get_active_cell (GTK_SHEET (de->data_sheet[0]), &row, &col); gtk_sheet_set_active_cell (GTK_SHEET (de->data_sheet[0]), case_num, col); - gtk_sheet_moveto (GTK_SHEET (de->data_sheet[0]), case_num, col, 0.5, 0.5); + gtk_sheet_moveto (GTK_SHEET (de->data_sheet[0]), case_num, -1, 0.5, 0.5); } break; case PROP_VALUE_LABELS: @@ -493,7 +511,10 @@ psppire_data_editor_class_init (PsppireDataEditorClass *klass) /* Update the data_ref_entry with the reference of the active cell */ static gint -update_data_ref_entry (const GtkSheet *sheet, gint row, gint col, gpointer data) +update_data_ref_entry (const GtkSheet *sheet, + gint row, gint col, + gint old_row, gint old_col, + gpointer data) { PsppireDataEditor *de = data; @@ -567,7 +588,6 @@ datum_entry_activate (GtkEntry *entry, gpointer data) } static void on_activate (PsppireDataEditor *de); -static void on_deactivate (PsppireDataEditor *de); static gboolean on_switch_page (PsppireDataEditor *de, GtkNotebookPage *p, gint pagenum, gpointer data); static void on_select_range (PsppireDataEditor *de); @@ -591,6 +611,7 @@ static void init_sheet (PsppireDataEditor *de, int i, GtkAdjustment *hadj, GtkAdjustment *vadj) { + PsppireAxis *haxis = psppire_axis_new (100); de->sheet_bin[i] = gtk_scrolled_window_new (hadj, vadj); de->data_sheet[i] = gtk_sheet_new (NULL, NULL, NULL); @@ -600,8 +621,15 @@ init_sheet (PsppireDataEditor *de, int i, "shadow-type", GTK_SHADOW_ETCHED_IN, NULL); + g_object_set (de->data_sheet[i], + "horizontal-axis", haxis, + NULL); + gtk_container_add (GTK_CONTAINER (de->sheet_bin[i]), de->data_sheet[i]); + g_signal_connect (de->data_sheet[i], "traverse", + G_CALLBACK (traverse_cell_callback), de); + gtk_widget_show (de->sheet_bin[i]); } @@ -725,10 +753,6 @@ psppire_data_editor_init (PsppireDataEditor *de) G_CALLBACK (on_activate), de); - g_signal_connect_swapped (de->data_sheet[0], "deactivate", - G_CALLBACK (on_deactivate), - de); - g_signal_connect_swapped (de->data_sheet[0], "select-range", G_CALLBACK (on_select_range), de); @@ -1145,12 +1169,6 @@ on_activate (PsppireDataEditor *de) } -static void -on_deactivate (PsppireDataEditor *de) -{ - emit_selected_signal (de); -} - static void on_select_range (PsppireDataEditor *de) {