/* 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
#include <config.h>
#include <gtk/gtksignal.h>
#include <gtk/gtk.h>
-#include <gtksheet/gtksheet.h>
+#include <gtksheet/gtkextra-sheet.h>
#include "psppire-data-editor.h"
#include "psppire-var-sheet.h"
}
+
+
+
/* Callback which occurs when the var sheet's row title
button is double clicked */
static gboolean
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
{
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 ();
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:
/* 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;
}
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);
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]);
}
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);
}
-static void
-on_deactivate (PsppireDataEditor *de)
-{
- emit_selected_signal (de);
-}
-
static void
on_select_range (PsppireDataEditor *de)
{