Allow variables to be entered beyond the end of sheet.
[pspp-builds.git] / lib / gtksheet / gtksheet.c
index 5c868512c5aa51481f95e494ee4e64c4d7d6ca90..93d261b4d3e3417013951c2b26a0237d337e0ea7 100644 (file)
@@ -1062,9 +1062,6 @@ gtk_sheet_init (GtkSheet *sheet)
 
   sheet->motion_timer = 0;
 
-  sheet->columns_resizable = TRUE;
-  sheet->rows_resizable = TRUE;
-
   sheet->row_titles_visible = TRUE;
   sheet->row_title_area.width = DEFAULT_COLUMN_WIDTH;
 
@@ -1455,26 +1452,6 @@ gtk_sheet_moveto (GtkSheet *sheet,
 }
 
 
-static gboolean
-gtk_sheet_columns_resizable (GtkSheet *sheet)
-{
-  g_return_val_if_fail (sheet != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
-
-  return sheet->columns_resizable;
-}
-
-
-static gboolean
-gtk_sheet_rows_resizable (GtkSheet *sheet)
-{
-  g_return_val_if_fail (sheet != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
-
-  return sheet->rows_resizable;
-}
-
-
 void
 gtk_sheet_select_row (GtkSheet *sheet, gint row)
 {
@@ -3200,8 +3177,7 @@ gtk_sheet_button_press (GtkWidget *widget,
 
 
   /* press on resize windows */
-  if (event->window == sheet->column_title_window &&
-      gtk_sheet_columns_resizable (sheet))
+  if (event->window == sheet->column_title_window)
     {
 #if 0
       gtk_widget_get_pointer (widget, &sheet->x_drag, NULL);
@@ -3227,7 +3203,7 @@ gtk_sheet_button_press (GtkWidget *widget,
        }
     }
 
-  if (event->window == sheet->row_title_window && gtk_sheet_rows_resizable (sheet))
+  if (event->window == sheet->row_title_window)
     {
       gtk_widget_get_pointer (widget, NULL, &sheet->y_drag);
 
@@ -3752,8 +3728,7 @@ gtk_sheet_motion (GtkWidget *widget,  GdkEventMotion *event)
        }
     }
 
-  if (event->window == sheet->column_title_window &&
-      gtk_sheet_columns_resizable (sheet))
+  if (event->window == sheet->column_title_window)
     {
       if (!GTK_SHEET_IN_SELECTION (sheet) &&
          on_column_boundary (sheet, x, &column))
@@ -3781,8 +3756,7 @@ gtk_sheet_motion (GtkWidget *widget,  GdkEventMotion *event)
        }
     }
 
-  if (event->window == sheet->row_title_window &&
-      gtk_sheet_rows_resizable (sheet))
+  if (event->window == sheet->row_title_window)
     {
 #if AXIS_TRANSITION
       if (!GTK_SHEET_IN_SELECTION (sheet) && POSSIBLE_YDRAG (sheet, y, &column))
@@ -4151,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);
 
@@ -4160,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);
 
 
@@ -4847,6 +4822,40 @@ draw_row_title_buttons_range (GtkSheet *sheet, gint first, gint last)
  * vadjustment_value_changed
  * hadjustment_value_changed */
 
+
+static void
+update_adjustment (GtkAdjustment *adj, PsppireAxis *axis, gint page_size)
+{
+  double position =
+    (adj->value + adj->page_size)
+    /
+    (adj->upper - adj->lower);
+
+  const glong last_item = psppire_axis_unit_count (axis) - 1;
+
+  if (isnan (position) || position < 0)
+    position = 0;
+
+  adj->upper =
+    psppire_axis_pixel_start (axis, last_item)
+    +
+    psppire_axis_unit_size (axis, last_item)
+    ;
+
+  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);
+}
+
+
 static void
 adjust_scrollbars (GtkSheet *sheet)
 {
@@ -4876,39 +4885,23 @@ adjust_scrollbars (GtkSheet *sheet)
        sheet->column_title_area.height -
        psppire_axis_unit_size (sheet->vaxis, last_row);
 
-
-
-      sheet->vadjustment->upper =
-       psppire_axis_pixel_start (sheet->vaxis, last_row)
-       +
-       psppire_axis_unit_size (sheet->vaxis, last_row)
-       ;
-
-      sheet->vadjustment->lower = 0;
-      sheet->vadjustment->page_size = height;
-
-      g_signal_emit_by_name (sheet->vadjustment, "changed");
+      update_adjustment (sheet->vadjustment, sheet->vaxis, height);
     }
 
   if (sheet->hadjustment)
     {
-      gint last_col;
+      gint last_col = psppire_axis_unit_count (sheet->haxis) - 1;
       sheet->hadjustment->step_increment = 1;
 
       sheet->hadjustment->page_increment = width;
 
-      last_col = psppire_axis_unit_count (sheet->haxis) - 1;
-
       sheet->hadjustment->upper =
        psppire_axis_pixel_start (sheet->haxis, last_col)
        +
        psppire_axis_unit_size (sheet->haxis, last_col)
        ;
 
-      sheet->hadjustment->lower = 0;
-      sheet->hadjustment->page_size = width;
-
-      g_signal_emit_by_name (sheet->hadjustment, "changed");
+      update_adjustment (sheet->hadjustment, sheet->haxis, width);
     }
 }
 
@@ -5197,7 +5190,6 @@ gtk_sheet_get_attributes (const GtkSheet *sheet, gint row, gint col,
 {
   GdkColor *fg, *bg;
   const GtkJustification *j ;
-  const GtkSheetCellBorder *border ;
   GdkColormap *colormap;
 
   g_return_val_if_fail (sheet != NULL, FALSE);
@@ -5239,10 +5231,6 @@ gtk_sheet_get_attributes (const GtkSheet *sheet, gint row, gint col,
   if (j)
     attr->justification = *j;
 
-  border = g_sheet_model_get_cell_border (sheet->model, row, col);
-
-  if ( border ) attr->border = *border;
-
   return TRUE;
 }