[gnumeric] Fix printing of repeated rows and columns. [#607451]



commit 1e866de1f035289c61a40e712261d22ff9c0f527
Author: Andreas J. Guelzow <aguelzow pyrshep ca>
Date:   Tue Jan 19 11:26:57 2010 -0700

    Fix printing of repeated rows and columns. [#607451]
    
    2010-01-19 Andreas J. Guelzow <aguelzow pyrshep ca>
    
    	* src/print.c (load_repeat_range): range_parse does not
    	  handle full rows or columns.
    	(compute_sheet_pages): don't use the same range for two
    	  different purposes.

 ChangeLog   |    7 +++++++
 NEWS        |    1 +
 src/print.c |   31 +++++++++++++++++++++++--------
 3 files changed, 31 insertions(+), 8 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index aa6a60d..042e361 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-01-19 Andreas J. Guelzow <aguelzow pyrshep ca>
+
+	* src/print.c (load_repeat_range): range_parse does not
+	  handle full rows or columns.
+	(compute_sheet_pages): don't use the same range for two 
+	  different purposes.
+
 2010-01-12  Jody Goldberg <jody gnome org>
 
 	* src/test-pango.c (cb_kill_wbcg) : new.
diff --git a/NEWS b/NEWS
index 99a6ee1..c979323 100644
--- a/NEWS
+++ b/NEWS
@@ -33,6 +33,7 @@ Andreas:
 	* Fix sheet handling in validation setup. [#606458]
 	* Allow some of the text export properties to be saved as default. 
 	  [#559749]
+	* Fix printing of repeated rows and columns. [#607451]
 
 Jean
 	* Fix import export of line type in scatter plots. [#605043]
diff --git a/src/print.c b/src/print.c
index ca4e301..736c333 100644
--- a/src/print.c
+++ b/src/print.c
@@ -886,7 +886,22 @@ compute_sheet_pages_across_then_down (PrintingInstance * pi,
 static gboolean
 load_repeat_range (char const *str, GnmRange *r, Sheet *sheet)
 {
-	return str && range_parse (r, str, gnm_sheet_get_size (sheet));
+	GnmParsePos pp;
+	GnmRangeRef res;
+
+	if (str == NULL || *str == '\0')
+		return FALSE;
+	
+	if (str != rangeref_parse (&res, str, 
+				   parse_pos_init_sheet (&pp, sheet), 
+				   gnm_conventions_default)) {
+		Sheet *start_sheet = sheet, *end_sheet = sheet;
+		gnm_rangeref_normalize_pp (&res, &pp,
+					   &start_sheet, &end_sheet,
+					   r);
+		return TRUE;
+	} else
+		return FALSE;
 }
 
 /*
@@ -929,13 +944,13 @@ compute_sheet_pages (GtkPrintContext   *context,
 		if (selection_range == NULL)
 			return TRUE;
 		if (spi->ignore_printarea) {
-			r = *selection_range;
+			print_area = *selection_range;
 		} else {
 			if (!range_intersection (&r, selection_range, &print_area))
 				return FALSE;
+			print_area = r;
 		}
-	} else
-		r = print_area;
+	};
 
 	page_width = gtk_print_context_get_width (context);
 	page_height = gtk_print_context_get_height (context);
@@ -971,7 +986,7 @@ compute_sheet_pages (GtkPrintContext   *context,
 		/* whether we print first down or across!            */
 		gdouble pxy;
 
-		pxy = compute_scale_fit_to (sheet, r.start.row, r.end.row,
+		pxy = compute_scale_fit_to (sheet, print_area.start.row, print_area.end.row,
 					    page_height, sheet_row_get_info,
 					    sheet_row_get_distance_pts,
 					    pinfo->scaling.dim.rows, 1.,
@@ -979,7 +994,7 @@ compute_sheet_pages (GtkPrintContext   *context,
 					    repeat_top_use,
 					    repeat_top_start, repeat_top_end,
 					    pi->ignore_pb ? NULL : pinfo->page_breaks.v);
-		pxy = compute_scale_fit_to (sheet, r.start.col, r.end.col,
+		pxy = compute_scale_fit_to (sheet, print_area.start.col, print_area.end.col,
 					    page_width, sheet_col_get_info,
 					    sheet_col_get_distance_pts,
 					    pinfo->scaling.dim.cols, pxy,
@@ -1003,12 +1018,12 @@ compute_sheet_pages (GtkPrintContext   *context,
 	usable_x   = page_width / px;
 	usable_y   = page_height / py;
 
-	paginate (&column_pagination, sheet, r.start.col, r.end.col,
+	paginate (&column_pagination, sheet, print_area.start.col, print_area.end.col,
 		  usable_x - row_header_width,
 		  repeat_left_use, repeat_left_start, repeat_left_end,
 		  sheet_col_get_distance_pts, sheet_col_get_info,
 		  pi->ignore_pb ? NULL : pinfo->page_breaks.h, !pi->ignore_pb);
-	paginate (&row_pagination, sheet, r.start.row, r.end.row,
+	paginate (&row_pagination, sheet, print_area.start.row, print_area.end.row,
 		  usable_y - col_header_height,
 		  repeat_top_use, repeat_top_start, repeat_top_end,
 		  sheet_row_get_distance_pts, sheet_row_get_info,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]