Allow variables to be entered beyond the end of sheet.
authorJohn Darrington <john@darrington.wattle.id.au>
Thu, 4 Dec 2008 02:38:08 +0000 (11:38 +0900)
committerJohn Darrington <john@darrington.wattle.id.au>
Thu, 4 Dec 2008 02:38:08 +0000 (11:38 +0900)
Several changes to fix the problem where variables beyond
the vertical size of the var sheet couldn't be added.

1. Undo the effect of commit 8c9fae384585163197685e684e62e49a6b922f0c
since it seems to cause problems and need to be rethought.

2. On the traverse callback, don't clamp the range of the requested
   destination cell.  Clamp it only after the signal returns.

3. Add one more row than there are variables.

lib/gtksheet/gtksheet.c
src/ui/gui/psppire-data-editor.c

index bab70950ae887e3ae110e045e8b1b88fc77421c7..93d261b4d3e3417013951c2b26a0237d337e0ea7 100644 (file)
@@ -4125,6 +4125,15 @@ step_sheet (GtkSheet *sheet, GtkScrollType dir)
     }
 
 
+  g_signal_emit (sheet, sheet_signals[TRAVERSE], 0,
+                &sheet->active_cell,
+                &new_cell,
+                &forbidden);
+
+  if (forbidden)
+    return;
+
+
   maximize_int (&new_cell.row, 0);
   maximize_int (&new_cell.col, 0);
 
@@ -4134,14 +4143,6 @@ step_sheet (GtkSheet *sheet, GtkScrollType dir)
   minimize_int (&new_cell.col,
                psppire_axis_unit_count (sheet->haxis) - 1);
 
-  g_signal_emit (sheet, sheet_signals[TRAVERSE], 0,
-                &sheet->active_cell,
-                &new_cell,
-               &forbidden);
-
-  if (forbidden)
-    return;
-
   change_active_cell (sheet, new_cell.row, new_cell.col);
 
 
@@ -4844,10 +4845,12 @@ update_adjustment (GtkAdjustment *adj, PsppireAxis *axis, gint page_size)
   adj->lower = 0;
   adj->page_size = page_size;
 
+#if 0
   adj->value = position * (adj->upper - adj->lower) - adj->page_size;
 
   if ( adj->value < adj->lower)
     adj->value = adj->lower;
+#endif
 
   gtk_adjustment_changed (adj);
 }
index c68133df2cacab89941e8c58433b16f0714bb6ed..b6f66403116d249b66b29d2f879affc7d169dc28 100644 (file)
@@ -294,7 +294,9 @@ new_variables_callback (PsppireDict *dict, gpointer data)
 
   psppire_axis_hetero_clear (vaxis);
 
-  for (v = 0 ; v < psppire_dict_get_var_cnt (dict); ++v)
+  /* NOTE: "<=" in the following line is correct.
+     There needs to be one more row than there are variables */
+  for (v = 0 ; v <= psppire_dict_get_var_cnt (dict); ++v)
     psppire_axis_hetero_append (vaxis, DEFAULT_ROW_HEIGHT);
 
   for (i = 0 ; i < 4 ; ++i)