Commit 7d0ab7ad authored by Jody Goldberg's avatar Jody Goldberg

- Large speed improvement loading by removing the lists of cells in cols, and

  keeping cols rows in segmented arrays.

- Large speed improvement in exit by operating on the entire sheet rather than
  cell by cell.

- Large speed improvement in Col/Row auto-fills.  they're still too damn slow
  and we use too much memory, but its a start.

- Insert/delete/Shift rows/cols now correctly adjusts references to and from
  the region.

- Code in place to restructure 'copy'

- A few minor dialog adjustments, some from me, some from the mailing list.
parent 9a379a27
1999-10-04 Jody Goldberg <jgoldberg@home.com>
* src/workbook.c (sheet_action_delete_sheet) : Use a
workbook_expr_relocate to invalidate references to the contents of
the deleted sheet.
* src/sheet.c (sheet_destroy_contents) : Renamed from
sheet_destroy_columns_and_rows. Delete the cells directly
from the hash. Don't use a range.
* src/cellspan.c (row_destroy_span) : Set deleted span hash to NULL.
* src/sheet.c (sheet_destroy_columns_and_rows) : Wipe all row spans
in one stage to avoid looking them up one by one.
1999-10-03 Jody Goldberg <jgoldberg@home.com>
* src/dialogs/dialog-delete-cells.c (dialog_delete_cells) :
Specify the app as the parent.
* src/dialogs/dialog-insert-cells.c (dialog_insert_cells) :
Ditto.
* src/expr.[ch] : (cell_ref_restore_absolute,
cell_in_range, do_expr_tree_invalidate_references,
expr_tree_invalidate_references, fixup_calc_new_cellref,
do_expr_tree_fixup_references, expr_tree_fixup_references) : Delete.
(cellref_relocate) : Rewrite to support intersheet,
moves, invalidation, and references to and from moving cells.
(expr_relocate) : Use new cellref_relocate.
* src/workbook.[ch] (workbook_fixup_references,
workbook_invalidate_references) : Delete.
(workbook_expr_relocate) : Replace with.
1999-10-02 Jody Goldberg <jgoldberg@home.com>
* src/{selection.c, collect.c, complex.c } : Add include config.h.
So that we get the right #defines when including Workbook
in a bonobo envirnoment.
From : Jon K Hellan <Jon.K.Hellan@item.ntnu.no>
* src/dialogs/{col-width, dialog-zoom, names,
row-height, sheet-rename, summary}.glade :
Dialogs made with glade pop up for a moment in one position before
being moved to the proper place. This is fixed by setting "Visible" to
False in Glade.
* src/print.c (print_page) : Make func pointer match new signature
for sheet_col_get_info.
1999-10-01 Jody Goldberg <jgoldberg@home.com>
* src/cell.h : Add ColRowCollection, a structure to store
a segmented array of ColRowInfo *, and some of the other
useful information, like max_element, and default_style.
Rename data to 'spans' to facilitate removing dependancies
on old name.
Renumbered the CELL_ flags now that CELL_ERROR is gone.
* plugins/* : Switch to ColRowCollection.
* src/print.c : Ditto.
* src/value.c : Ditto.
* src/xml-io.c : Ditto.
* src/dialogs/dialog-cell-format.c : Ditto, and use sheet_foreach_colrow.
* src/sheet-view.c : Ditto. Use sheet_{row,col}_fetch and document
why they are called.
(sheet_view_scrollbar_display) : ifdef out untill some one wants it.
src/dialogs/dialog-solver.c : Add include "tools.h"
* src/sheet.[ch] : Massive reorg.
Rows and Cols are no longer in lists they are in segmented arrays.
Cols don't have lists of cells in them.
All the insert/delete row/col code was redone and simplified.
The Shift row/col is broken pending the merge with the new copy
code.
* src/cellspan.c : Switch from 'data' to 'spans'
* src/clipboard.c : Use boolean, not integer '1'
* src/corba-sheet.c : Switch to ColRowcollection.
(Sheet_cell_get_background) : #ifdef until this is implemented.
* src/embeddable-grid.c (grid_view_new) : Add a cast to silent
warning.
* src/item-grid.c (item_grid_draw_cell) : Paint the borders After
contents. They still don't work, but this is slightly better.
* src/expr.c (do_expr_tree_fixup_references) : Partial patch that fixes
the common case and probably breaks the uncommon. Refs to
cells/ranges on the current sheet have sheet == NULL. The
destination specifies the sheet, so only references on a different
sheet were fixed. When I rework this code for use by the 'move'
operation I'll fix it.
* src/gnumeric-sheet.c (move_cursor) : Move the cursor before making
the area visible, Reset the selection after the motion.
1999-09-27 Jody Goldberg <jgoldberg@home.com>
* src/item-grid.c (item_grid_draw) : Don't attempt to paint past
SHEET_MAX_{ROWS,COLS}.
* src/gnumeric-sheet.c (gnumeric_sheet_compute_visible_ranges) :
Ditto.
(move_cursor) : Set the cursor before making the area visible so that
the scrollbars know the real position.
1999-09-26 Miguel de Icaza <miguel@gnu.org>
* src/print-preview.c (print_preview_new): Removed warning/
......@@ -40,6 +152,10 @@
* src/Makefile.am (gnumeric_libs): Fix so gnumeric compiles.
1999-09-26 Jody Goldberg <jgoldberg@home.com>
* src/clipboard.c (clipboard_copy_cell_range) : use boolean.
1999-09-26 Miguel de Icaza <miguel@gnu.org>
* src/sheet-object.c (sheet_button_release): Load content from
......@@ -86,6 +202,7 @@
* src/item-grid.c (item_grid_draw) : Paint an empty
only if the cell does not exist. VALUE_EMPTY cells should be
treated as std cells when drawing the background.
(item_grid_draw_cell) : Draw the contents before the border.
1999-09-24 Morten Welinder <terra@diku.dk>
......
......@@ -7,6 +7,12 @@ Arturo:
Michael:
* Start of sheet/workbook/global name scoping.
Jody:
* Some Optimization.
* Enhance row/col insert/delete, cell shift, and cell 'cut/paste.
--------------------------------------------------------------------------
Gnumeric 0.36
Jody:
......
1999-10-04 Jody Goldberg <jgoldberg@home.com>
* src/workbook.c (sheet_action_delete_sheet) : Use a
workbook_expr_relocate to invalidate references to the contents of
the deleted sheet.
* src/sheet.c (sheet_destroy_contents) : Renamed from
sheet_destroy_columns_and_rows. Delete the cells directly
from the hash. Don't use a range.
* src/cellspan.c (row_destroy_span) : Set deleted span hash to NULL.
* src/sheet.c (sheet_destroy_columns_and_rows) : Wipe all row spans
in one stage to avoid looking them up one by one.
1999-10-03 Jody Goldberg <jgoldberg@home.com>
* src/dialogs/dialog-delete-cells.c (dialog_delete_cells) :
Specify the app as the parent.
* src/dialogs/dialog-insert-cells.c (dialog_insert_cells) :
Ditto.
* src/expr.[ch] : (cell_ref_restore_absolute,
cell_in_range, do_expr_tree_invalidate_references,
expr_tree_invalidate_references, fixup_calc_new_cellref,
do_expr_tree_fixup_references, expr_tree_fixup_references) : Delete.
(cellref_relocate) : Rewrite to support intersheet,
moves, invalidation, and references to and from moving cells.
(expr_relocate) : Use new cellref_relocate.
* src/workbook.[ch] (workbook_fixup_references,
workbook_invalidate_references) : Delete.
(workbook_expr_relocate) : Replace with.
1999-10-02 Jody Goldberg <jgoldberg@home.com>
* src/{selection.c, collect.c, complex.c } : Add include config.h.
So that we get the right #defines when including Workbook
in a bonobo envirnoment.
From : Jon K Hellan <Jon.K.Hellan@item.ntnu.no>
* src/dialogs/{col-width, dialog-zoom, names,
row-height, sheet-rename, summary}.glade :
Dialogs made with glade pop up for a moment in one position before
being moved to the proper place. This is fixed by setting "Visible" to
False in Glade.
* src/print.c (print_page) : Make func pointer match new signature
for sheet_col_get_info.
1999-10-01 Jody Goldberg <jgoldberg@home.com>
* src/cell.h : Add ColRowCollection, a structure to store
a segmented array of ColRowInfo *, and some of the other
useful information, like max_element, and default_style.
Rename data to 'spans' to facilitate removing dependancies
on old name.
Renumbered the CELL_ flags now that CELL_ERROR is gone.
* plugins/* : Switch to ColRowCollection.
* src/print.c : Ditto.
* src/value.c : Ditto.
* src/xml-io.c : Ditto.
* src/dialogs/dialog-cell-format.c : Ditto, and use sheet_foreach_colrow.
* src/sheet-view.c : Ditto. Use sheet_{row,col}_fetch and document
why they are called.
(sheet_view_scrollbar_display) : ifdef out untill some one wants it.
src/dialogs/dialog-solver.c : Add include "tools.h"
* src/sheet.[ch] : Massive reorg.
Rows and Cols are no longer in lists they are in segmented arrays.
Cols don't have lists of cells in them.
All the insert/delete row/col code was redone and simplified.
The Shift row/col is broken pending the merge with the new copy
code.
* src/cellspan.c : Switch from 'data' to 'spans'
* src/clipboard.c : Use boolean, not integer '1'
* src/corba-sheet.c : Switch to ColRowcollection.
(Sheet_cell_get_background) : #ifdef until this is implemented.
* src/embeddable-grid.c (grid_view_new) : Add a cast to silent
warning.
* src/item-grid.c (item_grid_draw_cell) : Paint the borders After
contents. They still don't work, but this is slightly better.
* src/expr.c (do_expr_tree_fixup_references) : Partial patch that fixes
the common case and probably breaks the uncommon. Refs to
cells/ranges on the current sheet have sheet == NULL. The
destination specifies the sheet, so only references on a different
sheet were fixed. When I rework this code for use by the 'move'
operation I'll fix it.
* src/gnumeric-sheet.c (move_cursor) : Move the cursor before making
the area visible, Reset the selection after the motion.
1999-09-27 Jody Goldberg <jgoldberg@home.com>
* src/item-grid.c (item_grid_draw) : Don't attempt to paint past
SHEET_MAX_{ROWS,COLS}.
* src/gnumeric-sheet.c (gnumeric_sheet_compute_visible_ranges) :
Ditto.
(move_cursor) : Set the cursor before making the area visible so that
the scrollbars know the real position.
1999-09-26 Miguel de Icaza <miguel@gnu.org>
* src/print-preview.c (print_preview_new): Removed warning/
......@@ -40,6 +152,10 @@
* src/Makefile.am (gnumeric_libs): Fix so gnumeric compiles.
1999-09-26 Jody Goldberg <jgoldberg@home.com>
* src/clipboard.c (clipboard_copy_cell_range) : use boolean.
1999-09-26 Miguel de Icaza <miguel@gnu.org>
* src/sheet-object.c (sheet_button_release): Load content from
......@@ -86,6 +202,7 @@
* src/item-grid.c (item_grid_draw) : Paint an empty
only if the cell does not exist. VALUE_EMPTY cells should be
treated as std cells when drawing the background.
(item_grid_draw_cell) : Draw the contents before the border.
1999-09-24 Morten Welinder <terra@diku.dk>
......
1999-10-03 Jody Goldberg <jgoldberg@home.com>
* html.c (html_write_cell32, html_write_cell40) :
Bug #2512. Emit a </TD> after a <TD>.
Use cell_get_horizontal_align to correctly handle
the case of a 'General' format.
13/07/99 (rasca)
* latex.c: small fixes to use the right font for latex2e output
......
......@@ -144,12 +144,12 @@ epsf_write_wb (Workbook *wb, const char *filename)
* the current sheet as the one for the EPS..
*/
bh = 0;
for (row = 0; row < (sheet->max_row_used+1); row++) {
for (row = 0; row <= sheet->rows.max_used; row++) {
row_info = sheet_row_get_info (sheet, row);
bh += ROW_HEIGHT(row_info);
}
bw = 0;
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (col = 0; col <= sheet->cols.max_used; col++) {
col_info = sheet_col_get_info (sheet, col);
bw += COL_WIDTH(col_info);
}
......@@ -157,10 +157,10 @@ epsf_write_wb (Workbook *wb, const char *filename)
x_pos = 0;
y_pos = bh;
for (row = 0; row < (sheet->max_row_used+1); row++) {
for (row = 0; row <= sheet->rows.max_used; row++) {
row_info = sheet_row_get_info (sheet, row);
y_pos -= ROW_HEIGHT(row_info);
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (col = 0; col <= sheet->cols.max_used; col++) {
cell = sheet_cell_get (sheet, col, row);
col_info = sheet_col_get_info (sheet, col);
epsf_write_cell (fp, cell, x_pos, y_pos);
......@@ -201,6 +201,10 @@ epsf_write_wb (Workbook *wb, const char *filename)
ps_draw_circle (fp,
pos[2], bh - pos[3], 2, 0.5);
break;
default :
/* Ignore the rest for now */
break;
}
}
oblist = oblist->next;
......
......@@ -65,21 +65,24 @@ html_write_cell32 (FILE *fp, Cell *cell)
Style *style;
unsigned char r, g, b;
if (!cell) { /* empty cell */
fprintf (fp, "\t<TD>\n");
} else {
fprintf (fp, "\t<TD>");
if (cell != NULL) { /* empty cell */
style = cell->style;
if (!style) {
/* is this case posible? */
fprintf (fp, "\t<TD>");
html_fprintf (fp, cell->text->str);
fprintf (fp, "\n");
} else {
fprintf (fp, "\t<TD");
if (style->halign & HALIGN_RIGHT)
fprintf (fp, " align=right");
if (style->halign & HALIGN_CENTER)
switch (cell_get_horizontal_align (cell)) {
case HALIGN_RIGHT :
fprintf (fp, " align=right");
break;
case HALIGN_CENTER :
fprintf (fp, " align=center");
break;
default :
break;
}
if (style->valign & VALIGN_TOP)
fprintf (fp, " valign=top");
r = style->back_color->color.red >> 8;
......@@ -109,9 +112,9 @@ html_write_cell32 (FILE *fp, Cell *cell)
fprintf (fp, "</TT>");
if (r != 0 || g != 0 || b != 0)
fprintf (fp, "</FONT>");
fprintf (fp, "\n");
}
}
fprintf (fp, "</TD>\n");
}
/*
......@@ -123,21 +126,24 @@ html_write_cell40 (FILE *fp, Cell *cell)
Style *style;
unsigned char r, g, b;
if (!cell) { /* empty cell */
fprintf (fp, "\t<TD>\n");
} else {
fprintf (fp, "\t<TD>");
if (cell != NULL) {
style = cell->style;
if (!style) {
/* is this case posible? */
fprintf (fp, "\t<TD>");
html_fprintf (fp, cell->text->str);
fprintf (fp, "\n");
} else {
fprintf (fp, "\t<TD");
if (style->halign & HALIGN_RIGHT)
fprintf (fp, " halign=right");
if (style->halign & HALIGN_CENTER)
switch (cell_get_horizontal_align (cell)) {
case HALIGN_RIGHT :
fprintf (fp, " halign=right");
break;
case HALIGN_CENTER :
fprintf (fp, " halign=center");
break;
default :
break;
}
if (style->valign & VALIGN_TOP)
fprintf (fp, " valign=top");
r = style->back_color->color.red >> 8;
......@@ -167,9 +173,9 @@ html_write_cell40 (FILE *fp, Cell *cell)
fprintf (fp, "</TT>");
if (r != 0 || g != 0 || b != 0)
fprintf (fp, "</FONT>");
fprintf (fp, "\n");
}
}
fprintf (fp, "</TD>\n");
}
/*
......@@ -214,9 +220,9 @@ html_write_wb_html32 (Workbook *wb, const char *filename)
fprintf (fp, "<TABLE border=1>\n");
fprintf (fp, "<CAPTION>%s</CAPTION>\n", sheet->name);
for (row = 0; row < (sheet->max_row_used+1); row++) {
for (row = 0; row <= sheet->rows.max_used; row++) {
fprintf (fp, "<TR>\n");
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (col = 0; col <= sheet->cols.max_used; col++) {
cell = sheet_cell_get (sheet, col, row);
html_write_cell32 (fp, cell);
}
......@@ -273,9 +279,9 @@ html_write_wb_html40 (Workbook *wb, const char *filename)
fprintf (fp, "<TABLE border=1>\n");
fprintf (fp, "<CAPTION>%s</CAPTION>\n", sheet->name);
for (row = 0; row < (sheet->max_row_used+1); row++) {
for (row = 0; row <= sheet->rows.max_used; row++) {
fprintf (fp, "<TR>\n");
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (col = 0; col <= sheet->cols.max_used; col++) {
cell = sheet_cell_get (sheet, col, row);
html_write_cell40 (fp, cell);
}
......
......@@ -65,21 +65,24 @@ html_write_cell32 (FILE *fp, Cell *cell)
Style *style;
unsigned char r, g, b;
if (!cell) { /* empty cell */
fprintf (fp, "\t<TD>\n");
} else {
fprintf (fp, "\t<TD>");
if (cell != NULL) { /* empty cell */
style = cell->style;
if (!style) {
/* is this case posible? */
fprintf (fp, "\t<TD>");
html_fprintf (fp, cell->text->str);
fprintf (fp, "\n");
} else {
fprintf (fp, "\t<TD");
if (style->halign & HALIGN_RIGHT)
fprintf (fp, " align=right");
if (style->halign & HALIGN_CENTER)
switch (cell_get_horizontal_align (cell)) {
case HALIGN_RIGHT :
fprintf (fp, " align=right");
break;
case HALIGN_CENTER :
fprintf (fp, " align=center");
break;
default :
break;
}
if (style->valign & VALIGN_TOP)
fprintf (fp, " valign=top");
r = style->back_color->color.red >> 8;
......@@ -109,9 +112,9 @@ html_write_cell32 (FILE *fp, Cell *cell)
fprintf (fp, "</TT>");
if (r != 0 || g != 0 || b != 0)
fprintf (fp, "</FONT>");
fprintf (fp, "\n");
}
}
fprintf (fp, "</TD>\n");
}
/*
......@@ -123,21 +126,24 @@ html_write_cell40 (FILE *fp, Cell *cell)
Style *style;
unsigned char r, g, b;
if (!cell) { /* empty cell */
fprintf (fp, "\t<TD>\n");
} else {
fprintf (fp, "\t<TD>");
if (cell != NULL) {
style = cell->style;
if (!style) {
/* is this case posible? */
fprintf (fp, "\t<TD>");
html_fprintf (fp, cell->text->str);
fprintf (fp, "\n");
} else {
fprintf (fp, "\t<TD");
if (style->halign & HALIGN_RIGHT)
fprintf (fp, " halign=right");
if (style->halign & HALIGN_CENTER)
switch (cell_get_horizontal_align (cell)) {
case HALIGN_RIGHT :
fprintf (fp, " halign=right");
break;
case HALIGN_CENTER :
fprintf (fp, " halign=center");
break;
default :
break;
}
if (style->valign & VALIGN_TOP)
fprintf (fp, " valign=top");
r = style->back_color->color.red >> 8;
......@@ -167,9 +173,9 @@ html_write_cell40 (FILE *fp, Cell *cell)
fprintf (fp, "</TT>");
if (r != 0 || g != 0 || b != 0)
fprintf (fp, "</FONT>");
fprintf (fp, "\n");
}
}
fprintf (fp, "</TD>\n");
}
/*
......@@ -214,9 +220,9 @@ html_write_wb_html32 (Workbook *wb, const char *filename)
fprintf (fp, "<TABLE border=1>\n");
fprintf (fp, "<CAPTION>%s</CAPTION>\n", sheet->name);
for (row = 0; row < (sheet->max_row_used+1); row++) {
for (row = 0; row <= sheet->rows.max_used; row++) {
fprintf (fp, "<TR>\n");
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (col = 0; col <= sheet->cols.max_used; col++) {
cell = sheet_cell_get (sheet, col, row);
html_write_cell32 (fp, cell);
}
......@@ -273,9 +279,9 @@ html_write_wb_html40 (Workbook *wb, const char *filename)
fprintf (fp, "<TABLE border=1>\n");
fprintf (fp, "<CAPTION>%s</CAPTION>\n", sheet->name);
for (row = 0; row < (sheet->max_row_used+1); row++) {
for (row = 0; row <= sheet->rows.max_used; row++) {
fprintf (fp, "<TR>\n");
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (col = 0; col <= sheet->cols.max_used; col++) {
cell = sheet_cell_get (sheet, col, row);
html_write_cell40 (fp, cell);
}
......
......@@ -91,13 +91,13 @@ html_write_wb_latex (Workbook *wb, const char *filename)
sheet = sheet_list->data;
fprintf (fp, "%s\n\n", sheet->name);
fprintf (fp, "\\begin{tabular}{|");
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (col = 0; col < sheet->cols.max_used; col++) {
fprintf (fp, "l|");
}
fprintf (fp, "}\\hline\n");
for (row = 0; row < (sheet->max_row_used+1); row++) {
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (row = 0; row <= sheet->rows.max_used; row++) {
for (col = 0; col <= sheet->cols.max_used; col++) {
cell = sheet_cell_get (sheet, col, row);
if (!cell) {
if (col)
......@@ -187,13 +187,13 @@ html_write_wb_latex2e (Workbook *wb, const char *filename)
sheet = sheet_list->data;
fprintf (fp, "%s\n\n", sheet->name);
fprintf (fp, "\\begin{tabular}{|");
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (col = 0; col <= sheet->cols.max_used; col++) {
fprintf (fp, "l|");
}
fprintf (fp, "}\\hline\n");
for (row = 0; row < (sheet->max_row_used+1); row++) {
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (row = 0; row <= sheet->rows.max_used; row++) {
for (col = 0; col <= sheet->cols.max_used; col++) {
cell = sheet_cell_get (sheet, col, row);
if (!cell) {
if (col)
......
......@@ -83,12 +83,12 @@ write_wb_roff (Workbook *wb, FILE *fp)
fprintf (fp, ".TS H\n");
fprintf (fp, "allbox;\n");
for (row = 0; row < (sheet->max_row_used+1); row++) {
for (row = 0; row <= sheet->rows.max_used; row++) {
if (row)
fprintf (fp, ".T&\n");
/* define alignments, bold etc. per cell */
v_size = DEFSIZE;
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (col = 0; col <= sheet->cols.max_used; col++) {
cell = sheet_cell_get (sheet, col, row);
if (col)
fprintf (fp, " ");
......@@ -141,7 +141,7 @@ write_wb_roff (Workbook *wb, FILE *fp)
}
fprintf (fp, ".\n");
fprintf (fp, ".vs %.2fp\n", 2.5 + (float)v_size);
for (col = 0; col < (sheet->max_col_used+1); col++) {
for (col = 0; col <= sheet->cols.max_used; col++) {
if (col)
fprintf (fp, "\t");
cell = sheet_cell_get (sheet, col, row);
......
......@@ -281,8 +281,8 @@ text_parse_file (gchar *file, gint flen, gint start,
crow ++;
}
sheet->max_col_used = mcol;
sheet->max_row_used = crow;
sheet->cols.max_used = mcol;
sheet->rows.max_used = crow;
return idx;
}
......
......@@ -1058,15 +1058,13 @@ cell_comment_reposition (Cell *cell)
/*
* cell_relocate:
* @cell: The cell that is changing position
* @col_diff: The column delta.
* @row_diff: The row delta .
*
* This routine is used to move a cell to a different location:
*
* Auxiliary items canvas items attached to the cell are moved.
*/
void
cell_relocate (Cell *cell, int col_diff, int row_diff)
cell_relocate (Cell *cell)
{
g_return_if_fail (cell != NULL);
......@@ -1075,8 +1073,6 @@ cell_relocate (Cell *cell, int col_diff, int row_diff)
/* 2. If the cell contains a formula, relocate the formula */
if (cell->parsed_node){
EvalPosition pos;
ExprTree * newtree;
sheet_cell_formula_unlink (cell);
/*
......@@ -1098,15 +1094,6 @@ cell_relocate (Cell *cell, int col_diff, int row_diff)
cell->row->pos - y);
}
newtree = expr_relocate (cell->parsed_node,
eval_pos_cell (&pos, cell),
col_diff, row_diff);
if (newtree) {
expr_tree_unref (cell->parsed_node);
cell->parsed_node = newtree;
}
/* The following call also relinks the cell. */
cell_formula_changed (cell);
}
......
......@@ -28,22 +28,28 @@ struct _ColRowInfo {
unsigned int hard_size:1; /* has the user explicitly set the dimensions? */
void *data;
/* TODO : Add per row/col min/max */
void *spans; /* Only used for rows */
};
typedef struct
{
int max_used;
ColR