From 7f8e8fb312fbf84322b5a282c63fbbc7fefd951f Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Wed, 23 Jul 2014 21:51:06 +0000 Subject: [PATCH] fpspreadsheet: Rename virtual mode event handler OnNeedCellData to OnWriteCellData. Add another virtual mode event handler for reading, OnReadCellData. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3370 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../examples/fpsspeedtest/mainform.pas | 22 ++++++++-------- .../examples/other/demo_virtualmode_write.lpr | 8 +++--- components/fpspreadsheet/fpspreadsheet.pas | 25 +++++++++++-------- .../fpspreadsheet/tests/internaltests.pas | 6 ++--- components/fpspreadsheet/xlscommon.pas | 3 +-- components/fpspreadsheet/xlsxooxml.pas | 5 ++-- 6 files changed, 35 insertions(+), 34 deletions(-) diff --git a/components/fpspreadsheet/examples/fpsspeedtest/mainform.pas b/components/fpspreadsheet/examples/fpsspeedtest/mainform.pas index f54b987cb..696d9c25f 100644 --- a/components/fpspreadsheet/examples/fpsspeedtest/mainform.pas +++ b/components/fpspreadsheet/examples/fpsspeedtest/mainform.pas @@ -37,11 +37,11 @@ type FCurFormat: TsSpreadsheetFormat; procedure EnableControls(AEnable: Boolean); function GetRowCount(AIndex: Integer): Integer; - procedure NeedCellString(Sender: TObject; ARow, ACol: Cardinal; + procedure WriteCellStringHandler(Sender: TObject; ARow, ACol: Cardinal; var AValue: Variant; var AStyleCell: PCell); - procedure NeedCellNumber(Sender: TObject; ARow, ACol: Cardinal; + procedure WriteCellNumberHandler(Sender: TObject; ARow, ACol: Cardinal; var AValue: Variant; var AStyleCell: PCell); - procedure NeedCellStringAndNumber(Sender: TObject; ARow, ACol: Cardinal; + procedure WriteCellStringAndNumberHandler(Sender: TObject; ARow, ACol: Cardinal; var AValue: Variant; var AStyleCell: PCell); procedure ReadFromIni; procedure WriteToIni; @@ -87,7 +87,7 @@ const { TForm1 } -procedure TForm1.NeedCellString(Sender: TObject; ARow, ACol: cardinal; +procedure TForm1.WriteCellStringHandler(Sender: TObject; ARow, ACol: cardinal; var AValue: variant; var AStyleCell: PCell); var S: string; @@ -98,7 +98,7 @@ begin StatusMsg(Format('Writing %s row %d...', [GetFileFormatName(FCurFormat), ARow])); end; -procedure TForm1.NeedCellNumber(Sender: TObject; ARow, ACol: cardinal; +procedure TForm1.WriteCellNumberHandler(Sender: TObject; ARow, ACol: cardinal; var AValue: variant; var AStyleCell: PCell); begin AValue := ARow * 1E5 + ACol; @@ -106,13 +106,13 @@ begin StatusMsg(Format('Writing %s row %d...', [GetFileFormatName(FCurFormat), ARow])); end; -procedure TForm1.NeedCellStringAndNumber(Sender: TObject; ARow, ACol: cardinal; +procedure TForm1.WriteCellStringAndNumberHandler(Sender: TObject; ARow, ACol: cardinal; var AValue: variant; var AStyleCell: PCell); begin if odd(ARow + ACol) then - NeedCellString(Sender, ARow, ACol, AValue, AStyleCell) + WriteCellStringHandler(Sender, ARow, ACol, AValue, AStyleCell) else - NeedCellNumber(Sender, ARow, ACol, AValue, AStyleCell); + WriteCellNumberHandler(Sender, ARow, ACol, AValue, AStyleCell); end; procedure TForm1.RunReadTest(Idx: Integer; Log: String; @@ -211,9 +211,9 @@ begin MyWorkbook.VirtualRowCount := Rows; MyWorkbook.VirtualColCount := COLCOUNT; case RgContent.ItemIndex of - 0: MyWorkbook.OnNeedCellData := @NeedCellString; - 1: MyWorkbook.OnNeedCellData := @NeedCellNumber; - 2: MyWorkbook.OnNeedCellData := @NeedCellStringAndNumber; + 0: MyWorkbook.OnWriteCellData := @WriteCellStringHandler; + 1: MyWorkbook.OnWriteCellData := @WriteCellNumberHandler; + 2: MyWorkbook.OnWriteCellData := @WriteCellStringAndNumberHandler; end; end else diff --git a/components/fpspreadsheet/examples/other/demo_virtualmode_write.lpr b/components/fpspreadsheet/examples/other/demo_virtualmode_write.lpr index e77f53d98..7d204d46f 100644 --- a/components/fpspreadsheet/examples/other/demo_virtualmode_write.lpr +++ b/components/fpspreadsheet/examples/other/demo_virtualmode_write.lpr @@ -14,7 +14,7 @@ uses type TDataProvider = class - procedure NeedCellData(Sender: TObject; ARow,ACol: Cardinal; + procedure WriteCellDataHandler(Sender: TObject; ARow,ACol: Cardinal; var AData: variant; var AStyleCell: PCell); end; @@ -25,8 +25,8 @@ var headerTemplate: PCell; t: TTime; - procedure TDataProvider.NeedCellData(Sender: TObject; ARow, ACol: Cardinal; - var AData: variant; var AStyleCell: PCell); + procedure TDataProvider.WriteCellDataHandler(Sender: TObject; + ARow, ACol: Cardinal; var AData: variant; var AStyleCell: PCell); { This is just a sample using random data. Normally, in case of a database, you would read a record and return its field values, such as: @@ -81,7 +81,7 @@ begin { The event handler for OnNeedCellData links the workbook to the method from which it gets the data to be written. } - workbook.OnNeedCellData := @dataprovider.NeedCellData; + workbook.OnWriteCellData := @dataprovider.WriteCellDataHandler; { If we want to change the format of some cells we have to provide this format in template cells of the worksheet. In the example, the first diff --git a/components/fpspreadsheet/fpspreadsheet.pas b/components/fpspreadsheet/fpspreadsheet.pas index c6a4cf151..5b144f37e 100755 --- a/components/fpspreadsheet/fpspreadsheet.pas +++ b/components/fpspreadsheet/fpspreadsheet.pas @@ -706,7 +706,9 @@ type @param boVirtualMode If in virtual mode date are not taken from cells when a spreadsheet is written to file, but are - provided by means of the event OnNeedCellData. + provided by means of the event OnWriteCellData. + Similarly, when data are read they are not added as + cells but passed the the event OnReadCellData; @param boBufStream When this option is set a buffered stream is used for writing (a memory stream swapping to disk) or reading (a file stream pre-reading chunks of data @@ -719,14 +721,15 @@ type {@@ Event fired when writing a file in virtual mode. The event handler has to - pass data ("AValue") and formatting ("AStyleCell") to the writer } - TsWorkbookNeedCellDataEvent = procedure(Sender: TObject; ARow, ACol: Cardinal; + pass data ("AValue") and formatting style to be copied from a template + cell ("AStyleCell") to the writer } + TsWorkbookWriteCellDataEvent = procedure(Sender: TObject; ARow, ACol: Cardinal; var AValue: variant; var AStyleCell: PCell) of object; {@@ - Event fired when reading a file in virtual mode. The event handler has to - process the data provided by the read in the "ADataCell". } - TsWorkbookHaveCellDataEvent = procedure(Sender: TObject; ARow, ACol: Cardinal; + Event fired when reading a file in virtual mode. Read data are provided in + the "ADataCell" (which is not added to the worksheet in virtual mode). } + TsWorkbookReadCellDataEvent = procedure(Sender: TObject; ARow, ACol: Cardinal; const ADataCell: PCell) of object; {@@ @@ -749,8 +752,8 @@ type FVirtualRowCount: Cardinal; FWriting: Boolean; FOptions: TsWorkbookOptions; - FOnNeedCellData: TsWorkbookNeedCellDataEvent; - FOnHaveCellData: TsWorkbookHaveCellDataEvent; + FOnWriteCellData: TsWorkbookWriteCellDataEvent; + FOnReadCellData: TsWorkbookReadCellDataEvent; FFileName: String; { Setter/Getter } @@ -843,11 +846,11 @@ type {@@ This event allows to provide external cell data for writing to file, standard cells are ignored. Intended for converting large database files to a spreadsheet format. Requires Option boVirtualMode to be set. } - property OnNeedCellData: TsWorkbookNeedCellDataEvent read FOnNeedCellData write FOnNeedCellData; + property OnWriteCellData: TsWorkbookWriteCellDataEvent read FOnWriteCellData write FOnWriteCellData; {@@ This event accepts cell data while reading a spreadsheet file. Data are not encorporated in a spreadsheet, they are just passed through to the - event handler for processing. Requires Optio boVirtualMode to be set. } - property OnHaveCellData: TsWorkbookHaveCellDataEvent read FOnHaveCellData write FOnHaveCellData; + event handler for processing. Requires option boVirtualMode to be set. } + property OnReadCellData: TsWorkbookReadCellDataEvent read FOnReadCellData write FOnReadCellData; end; {@@ Contents of a number format record } diff --git a/components/fpspreadsheet/tests/internaltests.pas b/components/fpspreadsheet/tests/internaltests.pas index 29db396c8..b9e348c71 100644 --- a/components/fpspreadsheet/tests/internaltests.pas +++ b/components/fpspreadsheet/tests/internaltests.pas @@ -28,7 +28,7 @@ type TSpreadInternalTests= class(TTestCase) private - procedure NeedVirtualCellData(Sender: TObject; ARow, ACol: Cardinal; + procedure WriteVirtualCellDataHandler(Sender: TObject; ARow, ACol: Cardinal; var AValue:Variant; var AStyleCell: PCell); protected // Set up expected values: @@ -373,7 +373,7 @@ begin end; -procedure TSpreadInternalTests.NeedVirtualCellData(Sender: TObject; +procedure TSpreadInternalTests.WriteVirtualCellDataHandler(Sender: TObject; ARow, ACol: Cardinal; var AValue:Variant; var AStyleCell: PCell); begin // First read the SollNumbers, then the first 4 SollStrings @@ -403,7 +403,7 @@ begin workbook.VirtualColCount := 1; workbook.VirtualRowCount := Length(SollNumbers) + 4; // We'll use only the first 4 SollStrings, the others cause trouble due to utf8 and formatting. - workbook.OnNeedCellData := @NeedVirtualCellData; + workbook.OnWriteCellData := @WriteVirtualCellDataHandler; tempFile:=NewTempFile; workbook.WriteToFile(tempfile, AFormat, true); finally diff --git a/components/fpspreadsheet/xlscommon.pas b/components/fpspreadsheet/xlscommon.pas index 8674a0b07..ac77e470f 100644 --- a/components/fpspreadsheet/xlscommon.pas +++ b/components/fpspreadsheet/xlscommon.pas @@ -2587,10 +2587,9 @@ begin for r := 0 to Workbook.VirtualRowCount-1 do begin for c := 0 to Workbook.VirtualColCount-1 do begin InitCell(lCell); -// FillChar(lCell, SizeOf(lCell), 0); value := varNull; styleCell := nil; - Workbook.OnNeedCellData(Workbook, r, c, value, styleCell); + Workbook.OnWriteCellData(Workbook, r, c, value, styleCell); if styleCell <> nil then lCell := styleCell^; lCell.Row := r; lCell.Col := c; diff --git a/components/fpspreadsheet/xlsxooxml.pas b/components/fpspreadsheet/xlsxooxml.pas index b8aef0404..d7705bc3f 100755 --- a/components/fpspreadsheet/xlsxooxml.pas +++ b/components/fpspreadsheet/xlsxooxml.pas @@ -902,7 +902,7 @@ begin AppendToStream(FSSheets[FCurSheetNum], ''); - if (boVirtualMode in Workbook.Options) and Assigned(Workbook.OnNeedCellData) + if (boVirtualMode in Workbook.Options) and Assigned(Workbook.OnWriteCellData) then begin for r := 0 to Workbook.VirtualRowCount-1 do begin row := CurSheet.FindRow(r); @@ -914,12 +914,11 @@ begin AppendToStream(FSSheets[FCurSheetNum], Format( '', [r+1, Workbook.VirtualColCount, rh])); for c := 0 to Workbook.VirtualColCount-1 do begin - //FillChar(lCell, SizeOf(lCell), 0); InitCell(lCell); CellPosText := CurSheet.CellPosToText(r, c); value := varNull; styleCell := nil; - Workbook.OnNeedCellData(Workbook, r, c, value, styleCell); + Workbook.OnWriteCellData(Workbook, r, c, value, styleCell); if styleCell <> nil then lCell := styleCell^; lCell.Row := r;