Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
GNOME
gnumeric
Commits
d66694bf
Commit
d66694bf
authored
Jul 28, 1998
by
Arturo Espinosa
Browse files
Simple brute force, stupid, idiotic recomputetation engine; Will be gone soon
parent
902312b2
Changes
8
Hide whitespace changes
Inline
Side-by-side
ChangeLog-1999-07-09
View file @
d66694bf
1998-07-28 <miguel@nuclecu.unam.mx>
* src/sheet.c (sheet_cell_new): Insert the row, not the cell in
the column list.
(sheet_cell_foreach_range): Fixety fix
1998-07-27 <miguel@nuclecu.unam.mx>
* src/sheet.c (sheet_cell_new): Cells are born with their propper
...
...
ChangeLog-2000-02-23
View file @
d66694bf
1998-07-28 <miguel@nuclecu.unam.mx>
* src/sheet.c (sheet_cell_new): Insert the row, not the cell in
the column list.
(sheet_cell_foreach_range): Fixety fix
1998-07-27 <miguel@nuclecu.unam.mx>
* src/sheet.c (sheet_cell_new): Cells are born with their propper
...
...
OChangeLog-1999-07-09
View file @
d66694bf
1998-07-28 <miguel@nuclecu.unam.mx>
* src/sheet.c (sheet_cell_new): Insert the row, not the cell in
the column list.
(sheet_cell_foreach_range): Fixety fix
1998-07-27 <miguel@nuclecu.unam.mx>
* src/sheet.c (sheet_cell_new): Cells are born with their propper
...
...
OChangeLog-2000-02-23
View file @
d66694bf
1998-07-28 <miguel@nuclecu.unam.mx>
* src/sheet.c (sheet_cell_new): Insert the row, not the cell in
the column list.
(sheet_cell_foreach_range): Fixety fix
1998-07-27 <miguel@nuclecu.unam.mx>
* src/sheet.c (sheet_cell_new): Cells are born with their propper
...
...
src/gnumeric-canvas.c
View file @
d66694bf
...
...
@@ -81,6 +81,7 @@ gnumeric_sheet_set_current_value (GnumericSheet *sheet)
cell_set_text
(
sheet
->
sheet
,
cell
,
gtk_entry_get_text
(
GTK_ENTRY
(
sheet
->
entry
)));
if
(
sheet
->
selection
)
stop_cell_selection
(
sheet
);
sheet_brute_force_recompute
(
sheet
->
sheet
);
sheet_redraw_all
(
sheet
->
sheet
);
}
...
...
src/gnumeric-sheet.c
View file @
d66694bf
...
...
@@ -81,6 +81,7 @@ gnumeric_sheet_set_current_value (GnumericSheet *sheet)
cell_set_text
(
sheet
->
sheet
,
cell
,
gtk_entry_get_text
(
GTK_ENTRY
(
sheet
->
entry
)));
if
(
sheet
->
selection
)
stop_cell_selection
(
sheet
);
sheet_brute_force_recompute
(
sheet
->
sheet
);
sheet_redraw_all
(
sheet
->
sheet
);
}
...
...
src/sheet.c
View file @
d66694bf
...
...
@@ -21,17 +21,55 @@ sheet_redraw_all (Sheet *sheet)
}
static
void
re
compute_
one_
cell
(
Sheet
*
sheet
,
int
col
,
int
row
,
Cell
*
cell
,
void
*
closure
)
sheet_
compute_cell
(
Sheet
*
sheet
,
Cell
*
cell
)
{
char
*
error_msg
;
Value
*
v
;
if
(
cell
->
text
)
g_free
(
cell
->
text
);
v
=
eval_node_value
(
sheet
,
cell
->
parsed_node
,
&
error_msg
);
if
(
cell
->
value
)
eval_release_value
(
cell
->
value
);
if
(
v
==
NULL
){
cell
->
text
=
g_strdup
(
error_msg
);
cell
->
value
=
NULL
;
}
else
{
/* FIXME: Use the format stuff */
cell
->
value
=
v
;
cell
->
text
=
eval_value_string
(
v
);
}
}
static
void
recompute_one_cell
(
Sheet
*
sheet
,
int
col
,
int
row
,
Cell
*
cell
,
void
*
closure
)
{
if
(
cell
->
parsed_node
==
NULL
)
return
;
printf
(
"recomputing %d %d
\n
"
,
col
,
row
);
sheet_compute_cell
(
sheet
,
cell
);
sheet_redraw_cell_region
(
sheet
,
cell
->
col
->
pos
,
cell
->
row
->
pos
,
cell
->
col
->
pos
,
cell
->
row
->
pos
);
}
void
sheet_brute_force_recompute
(
Sheet
*
sheet
)
{
sheet_cell_foreach_range
(
sheet
,
1
,
0
,
0
,
SHEET_MAX_COL
,
SHEET_MAX_ROW
,
g_return_if_fail
(
sheet
!=
NULL
);
g_return_if_fail
(
IS_SHEET
(
sheet
));
printf
(
"brute force!
\n
"
);
sheet_cell_foreach_range
(
sheet
,
1
,
0
,
0
,
SHEET_MAX_COLS
,
SHEET_MAX_ROWS
,
recompute_one_cell
,
NULL
);
}
static
void
...
...
@@ -1036,29 +1074,30 @@ sheet_cell_foreach_range (Sheet *sheet, int only_existing,
last_row_gen
=
-
1
;
for
(
row
=
(
GList
*
)
ci
->
data
;
row
;
row
=
row
->
data
){
ColRowInfo
*
ri
=
row
->
data
;
if
(
ri
->
pos
<
start_row
)
Cell
*
cell
=
(
Cell
*
)
row
->
data
;
int
row_pos
=
cell
->
row
->
pos
;
if
(
row_pos
<
start_row
)
continue
;
if
(
r
i
->
pos
>
end_row
)
if
(
r
ow_
pos
>
end_row
)
break
;
if
(
!
only_existing
){
if
(
last_row_gen
>
0
){
if
(
r
i
->
pos
!=
last_row_gen
+
1
)
if
(
r
ow_
pos
!=
last_row_gen
+
1
)
gen_row_blanks
(
sheet
,
ci
->
pos
,
last_row_gen
,
r
i
->
pos
,
r
ow_
pos
,
callback
,
closure
);
}
if
(
r
i
->
pos
>
start_row
)
if
(
r
ow_
pos
>
start_row
)
gen_row_blanks
(
sheet
,
ci
->
pos
,
r
i
->
pos
,
start_row
,
r
ow_
pos
,
start_row
,
callback
,
closure
);
}
(
*
callback
)(
sheet
,
ci
->
pos
,
r
i
->
pos
,
(
C
ell
*
)
ri
->
data
,
closure
);
(
*
callback
)(
sheet
,
ci
->
pos
,
r
ow_
pos
,
c
ell
,
closure
);
}
}
}
...
...
@@ -1118,7 +1157,6 @@ void
cell_set_formula
(
Sheet
*
sheet
,
Cell
*
cell
,
char
*
text
)
{
char
*
error_msg
;
Value
*
v
;
g_return_if_fail
(
sheet
!=
NULL
);
g_return_if_fail
(
IS_SHEET
(
sheet
));
...
...
@@ -1135,21 +1173,7 @@ cell_set_formula (Sheet *sheet, Cell *cell, char *text)
return
;
}
v
=
eval_node_value
(
sheet
,
cell
->
parsed_node
,
&
error_msg
);
if
(
cell
->
value
)
eval_release_value
(
cell
->
value
);
if
(
v
==
NULL
){
cell
->
text
=
g_strdup
(
error_msg
);
cell
->
value
=
NULL
;
}
else
{
/* FIXME: Use the format stuff */
cell
->
value
=
v
;
cell
->
text
=
eval_value_string
(
v
);
}
sheet_compute_cell
(
sheet
,
cell
);
}
...
...
src/sheet.h
View file @
d66694bf
...
...
@@ -89,6 +89,8 @@ void sheet_selection_extend_horizontal (Sheet *sheet, int count);
void
sheet_selection_extend_vertical
(
Sheet
*
sheet
,
int
count
);
int
sheet_selection_is_cell_selected
(
Sheet
*
sheet
,
int
col
,
int
row
);
void
sheet_brute_force_recompute
(
Sheet
*
sheet
);
/* Cell management */
Cell
*
sheet_cell_new
(
Sheet
*
sheet
,
int
col
,
int
row
);
void
sheet_cell_foreach_range
(
Sheet
*
sheet
,
int
only_existing
,
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment