--- loncom/interface/spreadsheet/Spreadsheet.pm 2005/05/15 04:02:17 1.48 +++ loncom/interface/spreadsheet/Spreadsheet.pm 2005/06/23 17:55:01 1.52 @@ -1,5 +1,5 @@ # -# $Id: Spreadsheet.pm,v 1.48 2005/05/15 04:02:17 albertel Exp $ +# $Id: Spreadsheet.pm,v 1.52 2005/06/23 17:55:01 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -111,7 +111,8 @@ sub new { # # Flags temporary => 0, # true if this sheet has been modified but not saved - new_rows => 0, # true if this sheet has new rows + new_rows => 0, # true if this sheet has new rows + loaded => 0, # true if the formulas have been loaded # # blackout is used to determine if any data needs to be hidden from the # student. @@ -126,15 +127,8 @@ sub new { }; # bless($self,$class); - # - # Load in the spreadsheet definition $self->filename($filename); - if (exists($env{'form.workcopy'}) && - $self->{'type'} eq $env{'form.workcopy'}) { - $self->load_tmp(); - } else { - $self->load(); - } + # return $self; } @@ -976,6 +970,16 @@ sub formulas { $self->{'template_cells'} = []; return; } else { + if (!$self->{'loaded'}) { + $self->{'loaded'}=1; + # Load in the spreadsheet definition + if (exists($env{'form.workcopy'}) && + $self->{'type'} eq $env{'form.workcopy'}) { + $self->load_tmp(); + } else { + $self->load(); + } + } return %{$self->{'formulas'}}; } } @@ -1611,7 +1615,11 @@ sub load { my ($formulas); if (exists($spreadsheets{$cachekey})) { $formulas = $spreadsheets{$cachekey}->{'formulas'}; - } else { + $self->formulas($formulas); + $self->{'row_source'}=$spreadsheets{$cachekey}->{'row_source'}; + $self->{'row_numbers'}=$spreadsheets{$cachekey}->{'row_numbers'}; + $self->{'maxrow'}=$spreadsheets{$cachekey}->{'maxrow'}; + } else { # Not cached, need to read if (! defined($filename)) { $formulas = $self->load_system_default_sheet(); @@ -1647,10 +1655,19 @@ sub load { $filename=$self->filename(); # filename may have changed $cachekey = join('_',($cnum,$cdom,$stype,$filename)); %{$spreadsheets{$cachekey}->{'formulas'}} = %{$formulas}; + $self->formulas($formulas); + $self->set_row_sources(); + $self->set_row_numbers(); + if (ref($self->{'row_source'})) { + %{$spreadsheets{$cachekey}->{'row_source'}} = + %{$self->{'row_source'}}; + } + if (ref($self->{'row_numbers'})) { + %{$spreadsheets{$cachekey}->{'row_numbers'}} = + %{$self->{'row_numbers'}}; + } + $spreadsheets{$cachekey}->{'maxrow'} = $self->{'maxrow'}; } - $self->formulas($formulas); - $self->set_row_sources(); - $self->set_row_numbers(); } sub set_row_sources {